Zahlen von beliebigen basen in beliebigen basen umwandeln

nein er gibt immer noch mehr als 5 zeichen aus und ignoriert nicht das 6te zeichen
Und nochmal ganz kurz zu return, er gibt immer 0 als rückgabewert raus wenn return undefiniert ist,r ichtig? es muss nicht unbedingt return 0 sein
 
Hi.

Bitte achte etwas mehr auf deine Rechtschreibung - vor allem Groß-/Kleinschreibung - so wie es die Netiquette ausdrücklich fordert. Danke.
nein er gibt immer noch mehr als 5 zeichen aus und ignoriert nicht das 6te zeichen
Arrays in C/C++ sind 0 basiert, d.h. das 1. Element ist array[0] usw. Wenn ein Array die Größe 5 hat, also 5 Elemente enthält, dann ist das letzte gültige Arrayelement array[4]!

Strings müssen mit einem zusätzlichen \0 Zeichen terminiert werden
C:
char c[6];

c[0] = 'a';
c[1] = 'b';
c[2] = 'c';
c[3] = 'd';
c[4] = 'e';
c[5] = '\0';  // String terminieren

puts(c);
Und nochmal ganz kurz zu return, er gibt immer 0 als rückgabewert raus wenn return undefiniert ist,r ichtig? es muss nicht unbedingt return 0 sein
Laut C99 Standard und in C++ darf man in der main Funktion (und nur in der main Funktion) die return Anweisung weglassen.

Gibt man keine return Anweisung an, wird automatisch 0 (bedeutet: KEIN FEHLER) zurückgeliefert. Dies gilt nur für C99 und C++, nicht für C89 oder C90.

Man kann auch andere Werte zurückgeben, die dann einen Fehlercode signalisieren.

Gruß

\edit: Übrigens ist es immer eine gute Idee, den Code über den du sprichst auch zu zeigen. Du hast nicht gesagt wie du den Wert denn nun ausgegeben hast.
 
Zuletzt bearbeitet:
naja, es ging mir halt in der kompletten Programmieraufgabe einfach darum die anzahl der ein und ausgabe zu begrenzen. ich schick dir das ebend rüber,
im großén gibt man da eine Zahl ein, die basis zu der zahl und anschließend die Basis zu der das umgewandelt werden soll!
außerdem würde mich interessieren da ich einen kleinen Fehler innehab, also in der ersten Funktion mit der return -1, warum das trotzdem funktioniert würde mich gerne interessieren!
C++:
#include <iostream>
//#include "poly2.h"
using namespace std;



int chartyp1(char c)
{
	if (c-'0'>=0 && c-'0' <=9)
		return (c-'0');
	else if (c-'A' >=0 && c-'A' <=26)
		return(c-'A'+10);
	else return -1;      ich meine diesen Fehler, warum funktioniert das trotzdem(weil return nicht definiert ist?
}

char chartyp2(int value)
{
	if (value >= 10)
		return(value-10+'A');
	else
		return(value+'0');

}

void littletobig(char* c)
{
	while (*c!=0)
	{
		if (*c >='a' && *c <= 'z')
			*c = *c -'a' + 'A';
		++c;
	}

}

int Dezipart1(char* c, int basis)
{
	char* beginn = c;
	int b=1;
	int erg=0;
	while( *c!=0)
		++c;

	do
	{
	  --c;
	  erg = erg+ chartyp1(*c)*b;
	  b=b*basis;

	}while (c != beginn);
	return erg;
}


void dezipart2(char* outbuffer, int value, int basis)
{
	char btwPuffer[32];
	int buffPos=0;
	int erg;
	while (value != 0)
	{
      erg = value % basis;
	  value = value / basis;
	  btwPuffer[buffPos]=chartyp2(erg);
      ++buffPos;
	}
	for (int i=buffPos-1; i>=0; i--)
	{
		*outbuffer=btwPuffer[i];
		++outbuffer;
	}
	*outbuffer=0;
}

bool pruefText(char *c )
{
	while (*c !=0 ) {
		if ((*c >= '0' && *c <='9') || (*c >= 'A' && *c <= 'Z'))
			++c;
	
        else
           
		 return false;

	}
	return true;
}
int main ()
{
	char c[32];
	char co[32];
	int basStart, basZiel, i;
    i=c[32];
  
    do
    {
    cout << "Geben Sie eine beliebige Zahl ein!" << endl << "Oder beenden Sie das Programm mit einer negativen Zahl! " << endl;
	cin >> c;
    littletobig(c);

	if (pruefText(c))
	{
	   cout << "Geben Sie die Basis ihrer Zahl ein! "<< endl;
	   cin >> basStart;
	   if (basStart<2 || basStart>36){
	     cout<< "Basis muss zwischen 2 und 36 liegen!" <<endl;
		 system("pause");
         return 0;
   	   }

	  cout << "Geben Sie nun die neue Basis ein! "<< endl;
	  cin >> basZiel;
	  if (basZiel<2 || basZiel>36){
		cout<< "Basis muss zwischen 2 und 36 liegen!" <<endl;
        system("pause");
        return 1;
        
	  }
	  int erg=Dezipart1(c,basStart);
	// cout << "Ergebnis: " << erg << endl;
      dezipart2(co,erg,basZiel);
	  cout << "Die Zahl in der neuen Basis lautet: " << co << endl;
	  system("pause");
	}
	else
	{
		cout << "Durch diese Eingabe wird das Programm automatisch beendet!" << endl;
		system("pause");
        return 1;
		
	}
}
while(c!=0);
	return 0;
}
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Ich verstehe nicht was du meinst.

Kannst du mal bitte versuchen deine Beiträge ordentlicher zu verfassen und nicht so ein Kauderwelsch zu verwenden.

Was meinst du mit Fehler in Zeile 13. Die Zeile ist doch OK. Was meinst du damit, das "return nicht definiert" wäre?

Gruß
 
Nein, an sich ist das kein Fehler, bloß soviel ich weiss damit man einen 0 Rückgabewert erhält schreibt man return 0 und ich habe ausversehen return -1 hingeschrieben, nun interessiert es mich warum es trotzdem geht!
 
Nein, an sich ist das kein Fehler, bloß soviel ich weiss damit man einen 0 Rückgabewert erhält schreibt man return 0 und ich habe ausversehen return -1 hingeschrieben, nun interessiert es mich warum es trotzdem geht!
Warum soll "es" nicht gehen? Was meinst du mit "es"? Das es kompiliert werden sollte ist klar, oder? Meinst du das das Programm nicht abstürzt? Oder wird trotz deines Programmierfehlers richtig gerechnet?

Gruß
 
Zuletzt bearbeitet:
jap, habe es so verstanden, wenn return keinen Rückgabewert abgibt, dann hast du halt 0 als Rückgabewert, da -1 in dem Falle ja auch kein Rückgabewert ist passiert das selbe wie bei return 0.

Leider bin ich mir bei einer Sache noch unsicher, was macht die boolfunktion bei dem Programm?
C++:
bool pruefText(char *c )
{
	while (*c !=0 ) {
		if ((*c >= '0' && *c <='9') || (*c >= 'A' && *c <= 'Z'))
			++c;
	
        else
           
		 return false;

	}
	return true;

ich habe einmal versuchsweise weise die boolfunktion durch eine wenn dann funktion im Main ersetzt und sah keinen unterschied. Das einzige Problem darin bestand das das int main() unnötig groß war und ich halt sau viele zeilen hatte, darum denk ich das man das ganze kürzer gefasst mit der bool funktion macht. Liege ich richtig?
Zur Verständnis zeige ich dir mal wie das "int main()" ohne bool und der zusätzlichen if/Else funktion aussieht!
Zeige dir jetzt nur das abgeänderte int main, wenn bool fehlt
C++:
int main ()
{
	char c[32];
	char co[32];
	int basStart, basZiel, i;
    i=c[32];
  
    do
    {
    cout << "Geben Sie eine beliebige Zahl ein!" << endl << "Oder beenden Sie das Programm mit einer negativen Zahl! " << endl;
	cin >> c;
    littletobig(c);

	if(*c >= '0' && *c <='9')
	{
	   cout << "Geben Sie die Basis ihrer Zahl ein! "<< endl;
	   cin >> basStart;
	   if (basStart<2 || basStart>36){
	     cout<< "Basis muss zwischen 2 und 36 liegen!" <<endl;
		 system("pause");
         return 0;
   	   }

	  cout << "Geben Sie nun die neue Basis ein! "<< endl;
	  cin >> basZiel;
	  if (basZiel<2 || basZiel>36){
		cout<< "Basis muss zwischen 2 und 36 liegen!" <<endl;
        system("pause");
        return 1;
        
	  }
	  int erg=Dezipart1(c,basStart);
	// cout << "Ergebnis: " << erg << endl;
      dezipart2(co,erg,basZiel);
	  cout << "Die Zahl in der neuen Basis lautet: " << co << endl;
	  system("pause");
	}
                      else if(*c >= 'A' && *c <= 'Z')
                     {
	   cout << "Geben Sie die Basis ihrer Zahl ein! "<< endl;
	   cin >> basStart;
	   if (basStart<2 || basStart>36){
	     cout<< "Basis muss zwischen 2 und 36 liegen!" <<endl;
		 system("pause");
         return 0;
   	   }

	  cout << "Geben Sie nun die neue Basis ein! "<< endl;
	  cin >> basZiel;
	  if (basZiel<2 || basZiel>36){
		cout<< "Basis muss zwischen 2 und 36 liegen!" <<endl;
        system("pause");
        return 1;
        
	  }
	  int erg=Dezipart1(c,basStart);
	// cout << "Ergebnis: " << erg << endl;
      dezipart2(co,erg,basZiel);
	  cout << "Die Zahl in der neuen Basis lautet: " << co << endl;
	  system("pause");
	}
	else
	{
		cout << "Durch diese Eingabe wird das Programm automatisch beendet!" << endl;
		system("pause");
        return 1;
		
	}
}
while(c!=0);
	return 0;
}
 
Zuletzt bearbeitet von einem Moderator:
Für welche meiner Fragen ist dieses "jap" denn jetzt gedacht? Evtl. solltest du mal zitieren.
habe es so verstanden, wenn return keinen Rückgabewert abgibt, dann hast du halt 0 als Rückgabewert
Nein. Eine Funktion muss in jedem Fall einen Wert zurückgeben. Einen Rückgabewert gibt man mit einer return-Anweisung zurück. (einzige Ausnahme: main())
da -1 in dem Falle ja auch kein Rückgabewert ist
Wieso ist -1 kein Rückgabewert? Wenn du "return -1" schreibst ist -1 der Rückgabewert. Wovon redest du?
ich habe einmal versuchsweise weise die boolfunktion durch eine wenn dann funktion im Main ersetzt und sah keinen unterschied. Das einzige Problem darin bestand das das int main() unnötig groß war und ich halt sau viele zeilen hatte, darum denk ich das man das ganze kürzer gefasst mit der bool funktion macht. Liege ich richtig?
Ja. Jede Funktion ist zur Modularisierung eines Programmes gedacht. Theoretisch könnte man auch alles in die main Funktion schreiben und statt Schleifen gotos verwenden.

Du hast allerdings keine äquivalente Programmumformung durchgeführt. In der pruefText Funktion war eine Schleife drin - aus gutem Grund: um alle eingegebenen Zeichen zu prüfen. Du prüfst nur das erste Zeichen.

Gruß
 
jetzt bin ich irritiert, durch while!=0 prüft er doch von links bis rechts mit ++c bis zum stringende, er prüft erst das erste, dann kommt ++c und er rückt dann eine weiter nacht rechts und prüft wieder bis stringende
 
jetzt bin ich irritiert, durch while!=0 prüft er doch von links bis rechts mit ++c bis zum stringende, er prüft erst das erste, dann kommt ++c und er rückt dann eine weiter nacht rechts und prüft wieder bis stringende
Du hast den Aufruf der pruefText Funktion (wo eine Schleife drin ist) in dem Programm aus Beitrag 25 in Zeile 101
C++:
if (pruefText(c)) // Zeile 101
ersetzt in Beitrag 29, Zeile 14 durch
C++:
if (*c >= '0' && *c <='9')
Diese Ersetzung ist nicht korrekt, da du hier nur das erste Zeichen prüfst und nicht mit einer Schleife durch den String c iterierst.

Gruß
 

Neue Beiträge

Zurück