Char zu Double



  • mit dieser Funktion wollte ich erreichen, dass der Char[]-parameter als double zurückgegeben wird. allerdings wird bei Funktionsaufruf immer in int konvertiert...
    Error: (in den folgenden zeilen wird die Funktion mit einem Char Array aufgerufen:)

    1>pytagora.cpp(85): warning C4244: '=': Konvertierung von 'double' in 'int', möglicher Datenverlust
    1>pytagora.cpp(91): warning C4244: '=': Konvertierung von 'double' in 'int', möglicher Datenverlust
    1>pytagora.cpp(97): warning C4244: '=': Konvertierung von 'double' in 'int', möglicher Datenverlust
    1>pytagora.cpp(103): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust
    1>pytagora.cpp(110): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust
    1>pytagora.cpp(117): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust
    
    if (conv_CtD(Ckatheter1))
    			{	x = 1;	}
    		else
    		{
    			katheter2 = conv_CtD(Ckatheter2);
    		}
    		if (conv_CtD(Ckatheter2))
    			{	x = 2;	}
    		else
    		{
    			katheter1 = conv_CtD(Ckatheter1);
    		}
    		if (conv_CtD(Ckatheter1))
    			{	x = 3;	}
    		else
    		{
    			hypotenuse = conv_CtD(Chypotenuse);
    		}
    

    **
    Funktion:**

    double conv_CtD (char Char[])
    {
    	double New;
    	double durch = 1.0;
    	bool actdurch = false;
    	double mal = 10.0;
    	int tempnew;
    	for (int i = 0 ; i < 255; i++)
    	{
    		if (Char[i] <= '0'|| Char[i] >= '9' ) 
    		{
    			if (Char[i] == ',')	
    			{
    				actdurch = true,
    				mal = 1;
    			}
    			else
    			{
    			return 1; //1 wird zurückgegeben, wenn der Parameter keine Zahl ist
    			}
    		}
    
    		else
    		{
    			tempnew = Char[i];
    			if (actdurch == true)
    			{
    				durch = durch*10;
    			}
    			New = New * mal + (tempnew - '0') / durch; 
    		}
    	}
    
    	return New;
    
    }
    


  • Hat es einen Grund, warum du nicht die konventionellen Lösungen nutzt?

    http://www.c-plusplus.net/forum/39488



  • Ich wusste nichs davon -.-

    und ich war zu dumm nach string zu suchen *shame on me* xD

    Edit: Allerdings muss ich wissen ob das eingegebene eine Zahl oder ein Buchstabe ist 😕 aber dafür kann ich ja eine andere funktion schreiben.

    Hmm aber ich würde trotzdem gerne wissen warum dass nicht klappt also: wennn jemandem ein Fehler ins Auge springt, nicht Zurückhalten 😉



  • DarkscrollZ schrieb:

    Edit: Allerdings muss ich wissen ob das eingegebene eine Zahl oder ein Buchstabe ist

    Das macht dir auch der stringstream.

    double conv_CtD(char * Char)
    {
      std::stringstream s(Char);
      double d;
      if (s >> d)
        return d;
      throw "keine Zahl";
    }
    


  • Irgendwie Logisch 💡 😮



  • hrmpf irgendwas geht immer bei der sqrt() funktion schief...

    if (Kat1 >> Ckatheter1)
    		{
    			Kat1 << Ckatheter1;
    			Kat1 >> katheter1;
    		}
    		else
    		{	x = 1;	}
    
    		if (Kat2 >> Ckatheter2)
    		{
    			Kat2 << Ckatheter2;
    			Kat2 >> katheter2;
    		}
    		else
    			{	x = 2;	}
    
    		if (Hyp >> Chypotenuse)
    		{
    			Hyp << Chypotenuse;
    			Hyp >> hypotenuse;
    		}
    		else
    			{	x = 3;	}
    
    if (x == 1)
    {
    	rechnung = hypotenuse^2 - katheter2^2;
    	katheter1 = sqrt(rechnung);
    
    	Dlprint("X ist: "); cout << katheter1; Dlprint("!");
    }
    if (x == 2)
    {
    	rechnung = hypotenuse^2 - katheter1^2;
    	katheter2 = sqrt(rechnung);
    
    	Dlprint("X ist: "); cout << katheter2; Dlprint("!");
    }	
    if (x == 3)
    {
    	rechnung = (katheter1*katheter1) + (katheter2*katheter2);
    	hypotenuse = sqrt(rechnung);
    
    	Dlprint("X ist: "); cout << hypotenuse ; Dlprint("!");
    }
    
    1>pytagora.cpp(122): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust
    1>pytagora.cpp(129): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust
    1>pytagora.cpp(136): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust
    

    PS: ich weiß dass es Kathete und nicht Katheter heißt 😃


  • Mod

    BTW: Wenn Du glaubst, dass hypotenuse^2 das Quadrat der Hypothenuse errechnet, dann irrst Du aber gewaltig...

    Wie wäre es mal mit einem Grundlagen Tutorial?



  • ups... Stimmt ich hab nie was von einem ^-zeichen in c++ gehört 😃

    aber ich habe das "^2" jetzt durch hypotenuse*hypotenuse ersetzt und diese Warnung kommt immernoch 😕

    Edit: wer will kann meinen Source-code gern haben 🙂 is ja nichts großes



  • BTW: Wenn du glaubst, dass Katheter die Kathete eines Dreiecks ist, dann irrst Du aber gewaltig...

    Das sieht alles ziemlich wirr aus, z.B. das sinnlose Bitshifting in´s Nirvana.
    Irgendwie habe ich den Eindruck, dass du einen Codeschnipsel einer anderen Programmiersprache nach C++ portieren willst, ohne C++ zu können. Ich kann mich Martin nur anschließen, besorg´ dir ein vernünftiges C++ Grundlagenbuch und arbeite es durch. Es gibt einige gute Bücher als kostenlose EBooks, die müssten über die Suche hier im Forum zu finden sein (und hüte dich vor J.W. :p).

    Edit:
    Hm, vielleicht ist da ja doch kein Bitshifting, was bitte sind Kat1, Kat2 und Hyp?



  • Ich bin noch blutiger anfänger in c++ 😕
    Ich habe mir vor einiger Zeit "Einstieg in C++" von Arnold Willemer (Galileo Computing) besorgt und arbeite es zurzeit durch. Ich schicke euch mal den gesammten Code (ich habe Katheter in Kathete geändert):

    // pytagora.cpp: Hauptprojektdatei.
    
    #include "stdafx.h"
    #include <math.h>
    #include <iostream>
    #include "Dlprint.h"
    #include <Windows.h>
    #include <sstream>
    #include <string>
    using namespace System;
    using namespace std;
    
    //double conv_CtD (char Char[])
    //{
    //	double New;
    //	double durch = 1.0;
    //	bool actdurch = false;
    //	double mal = 10.0;
    //	int tempnew;
    //	for (int i = 0 ; i < 255; i++)
    //	{
    //		if (Char[i] <= '0'|| Char[i] >= '9' ) //ascII code für die Zahlen
    //		{
    //			if (Char[i] == ',')	//ASCII code für das Komma
    //			{
    //				actdurch = true,
    //				mal = 1;
    //			}
    //			else
    //			{
    //			return 1;
    //			}
    //		}
    //
    //		else
    //		{
    //			tempnew = Char[i];
    //			if (actdurch == true)
    //			{
    //				durch = durch*10;
    //			}
    //			New = New * mal + (tempnew - '0') / durch; 
    //		}
    //	}
    //
    //	return New;
    //
    //}
    
    double check_CtD(char * Char)
    {
      std::stringstream s(Char);
      double d;
      if (s >> d)
        return d;
      throw "keine Zahl";
    } 
    
    int main(array<System::String ^> ^args)
    {
    	char Ckathete1[255];
    	char Ckathete2[255];
    	char Chypotenuse[255];
    	long double rechnung;
    
    	for (int i = 0;i <= 255; i++) //Char-Arrays sichern
    	{
    		Ckathete1[i] =0;
    		Ckathete2[i] =0;
    		Chypotenuse[i] =0;
    	}
    
    	int x=0;
    	int kathete1=0;
    	int kathete2=0;
    	int hypotenuse=0;
    
    	Dlprinttl("Mit diesem Programm kann man eine unbekannte Seite eines Dreiecks ausrechnen!", 50);
    	Dlprinttl("Den Wert den du NICHT weisst muss 'X' oder 'x' sein!!!",50);
    	cout << endl;
    	Dlprintt("erster kathete:", 40);
    	cin >> Ckathete1;
    	Dlprintt("zweiter kathete:", 40);
    	cin >> Ckathete2;
    	Dlprintt("hypotenuse:", 40);
    	cin >> Chypotenuse;
    
    			stringstream Kat1(Ckathete1);
    			stringstream Kat2(Ckathete2);
    			stringstream Hyp(Chypotenuse);
    
    		if (Kat1 >> Ckathete1)
    		{
    			Kat1 << Ckathete1;
    			Kat1 >> kathete1;
    		}
    		else
    		{	x = 1;	}
    
    		if (Kat2 >> Ckathete2)
    		{
    			Kat2 << Ckathete2;
    			Kat2 >> kathete2;
    		}
    		else
    			{	x = 2;	}
    
    		if (Hyp >> Chypotenuse)
    		{
    			Hyp << Chypotenuse;
    			Hyp >> hypotenuse;
    		}
    		else
    			{	x = 3;	}
    
    if (x == 1)
    {
    	rechnung = hypotenuse*hypotenuse - kathete2*kathete2;
    	kathete1 = sqrt(rechnung);
    
    	Dlprint("X ist: "); cout << kathete1; Dlprint("!");
    }
    if (x == 2)
    {
    	rechnung = hypotenuse*hypotenuse - kathete1*kathete1;
    	kathete2 = sqrt(rechnung);
    
    	Dlprint("X ist: "); cout << kathete2; Dlprint("!");
    }	
    if (x == 3)
    {
    	rechnung = (kathete1*kathete1) + (kathete2*kathete2);
    	hypotenuse = sqrt(rechnung);
    
    	Dlprint("X ist: "); cout << hypotenuse ; Dlprint("!");
    }
    
    	system("pause");
        return 0;
    }
    

    Das Auskomentierte war mein ursprünglicher versuch char zu int zu konvertieren ;/

    Dlprint ist nur eine Funktion die Text buchstabe für buchstabe ausgibt:

    #include <iostream>
    #include <Windows.h>
    using namespace std;
    
    void Dlprint(char text[1000]) //gibt "text" aus (standardgeschwindigkeit 75)
    {
    	for (int i=0; text[i] && i < 1000; i++)
    	{
    		cout << text[i];
    		Sleep(75);
    	}
    }
    
    void Dlprintt(char text[1000], int sleep) //gibt "text" aus (standardgeschwindigkeit 75)
    {
    	if (sleep <= 0)
    	{
    		sleep=75; //standardgeschwindigkeit
    	}
    
    	for (int i=0; text[i] && i <1000; i++)
    	{
    		cout << text[i];
    		Sleep(sleep);
    	}
    }
    
    void Dlprintl(char text[1000]) //gibt "text" aus (standardgeschwindigkeit 75)
    {
    	for (int i=0; text[i] && i < 1000; i++)
    	{
    		cout << text[i];
    		Sleep(75);
    	}
    	cout << endl;
    }
    
    void Dlprinttl(char text[1000], int sleep) //gibt "text" aus (standardgeschwindigkeit 75)
    {
    	if (sleep <= 0)
    	{
    		sleep=75; //standardgeschwindigkeit
    	}
    
    	for (int i=0; text[i] && i <1000; i++)
    	{
    		cout << text[i];
    		Sleep(sleep);
    	}
    	cout << endl;
    }
    

    PS: Ich bin 15 Jahre alt und versuche c++ zu lernen, als übung versuche ich immer das jeweilige thema in mathe umzusetzen 😃

    PPS: Ich interreesiere mich vorallem für Spieleprogrammierung und finde den "faden" dazu nicht 😞 Ich weiß, dass ich dazu ersteinmal die Grundlagen kennen sollte, aber ich finde einfach keine Tutorials die über den "Einstieg" gehen...
    falls jemand einen Tipp hat, nur zu 😃

    Ach ja, gibt es hier Spoiler? ich fände es dann übersichtlicher 😉



  • DocShoe schrieb:

    BTW: Wenn du glaubst, dass Katheter die Kathete eines Dreiecks ist, dann irrst Du aber gewaltig...

    Das sieht alles ziemlich wirr aus, z.B. das sinnlose Bitshifting in´s Nirvana.
    Irgendwie habe ich den Eindruck, dass du einen Codeschnipsel einer anderen Programmiersprache nach C++ portieren willst, ohne C++ zu können. Ich kann mich Martin nur anschließen, besorg´ dir ein vernünftiges C++ Grundlagenbuch und arbeite es durch. Es gibt einige gute Bücher als kostenlose EBooks, die müssten über die Suche hier im Forum zu finden sein (und hüte dich vor J.W. :p).

    Edit:
    Hm, vielleicht ist da ja doch kein Bitshifting, was bitte sind Kat1, Kat2 und Hyp?

    Kat1, Kat2 und Hyp sind die Sringstreams, die ich zur konvertierung genutzt habe

    EDIT: Ich hab jetzt ein neues Programm ganz ohne schriftzeichen geschrieben 🙂

    // PYTAGORAA.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    #include "stdafx.h"
    #include <iostream>
    #include <Dlprint.h>
    #include <math.h>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	double kathete1=0;
    	double kathete2=0;
    	double hypotenuse=0;
    	int A=5;
    	int B=10;
    	char check=0;
    	system("color 3f");
    	for (bool exit=false;exit == false; system("cls"))
    	{
    		//prints
    		Dlprinttl("mit diesem Programm kannst du eine \"unbekannte\" Seite eines Dreiecks ausrechnen!\nWICHTIG: benutze statt \",\" ein \".\".\n\n", A);
    		Dlprintt("gebe die erste Kathete ein (wenn du sie nicht kennst gib \"0\" ein): ", B);
    		cin >> kathete1;
    		if (kathete1 > 0)
    		{
    			Dlprintt("gebe die zweite Kathete ein (wenn du sie nicht kennst gib \"0\" ein): ", B);
    			cin >> kathete2;
    
    			if (kathete2 > 0)
    			{
    				Dlprintt("gebe die Hypotenuse ein (wenn du sie nicht kennst gib \"0\" ein): ", B);
    				cin >> hypotenuse;
    			}
    			else
    			{
    				Dlprintt("gebe die Hypotenuse ein: ", B);
    				cin >> hypotenuse;
    			}
    		}
    		else
    		{
    			Dlprintt("gebe die zweite Kathete ein: ", B);
    			cin >> kathete2;
    
    			Dlprintt("gebe die Hypotenuse ein: ", B);
    			cin >> hypotenuse;
    		}
    
    		if (hypotenuse <= kathete1 || hypotenuse <= kathete2)
    		{
    			Dlprinttl("Error: die hypotenuse ist kleine als eine Kathete!",B);
    			system("Pause");
    			continue;
    		}
    		if (kathete1 <= 0)
    		{
    			kathete1 = hypotenuse*hypotenuse - kathete2*kathete2;
    			kathete1 = sqrt(kathete1);
    			cout << "die erste kathete ist: " << kathete1 << endl;
    			if (check == 'y')
    				system("Pause");
    		}
    		else
    		{
    		if (kathete2 <= 0)
    		{
    			kathete2 = hypotenuse*hypotenuse - kathete1*kathete1;
    			kathete2 = sqrt(kathete2);
    			cout << "die zweite kathete ist: " << kathete2 << endl;
    			if (check == 'y')
    				system("Pause");
    		}
    		else
    		{	
    		if (hypotenuse <= 0)
    		{
    			hypotenuse = kathete1*kathete1 + kathete2*kathete2;
    			hypotenuse = sqrt(hypotenuse);
    			cout << "die hypoenuse ist: " << hypotenuse << endl;
    			if (check == 'y')
    				system("Pause");
    		}
    		else
    		{
    		Dlprinttl("Error: Alle Seiten sind bekannt!", B);
    		system("Pause");
    		}}}
    		A = 1;
    		B = 1;
    		if (check == 0)
    		{
    			Sleep(10);
    			cout << "\n\nWillst du mehrmals rechnen? (y/n): ";
    			cin >> check;
    			if (check != 'y')
    				{return 0;}
    		}
    	}
    
        return 0;
    }
    

Anmelden zum Antworten