Berechnung der einzelnen Zifferm einer beliebigen Zahl!

Hallo Martin098

Nein, ich denke das wird niemand machen. Ziel dieses Forums ist es nicht einfach Code für andere zu machen, wenn dann sollst du etwas lernen. Die wichtigen Punkte:
Ausgabe:
C++ -> std::cout, C -> printf
Eintage:
C++ -> std::cin, C -> scanf (z.B.)
Strings:
C++ -> std::string, C -> (const) char*

Nun kannst du mal versuchen bisschen damit zu werkeln, deinen Code zeigen, wo du nicht weiter kommst usw und dann kann man dir helfen.

Viele Grüsse
Cromon
 
C++:
//Header-Dateien
#include <stdio.h>
#include <stdlib.h>

//Funktionen
int ean_code(int zahl[]);

//Hauptprogramm
int main(void){
	//Variablendeklaration
	int zahl[11];
	int i = 0;
	
	//printf("Dieses Programm berechnet die Pruefziffer des Ean-Codes\n");
	printf("EAN-Code (12-Stellen): ");
	scanf("%d", &zahl);

	printf("\n");
	ean_code(zahl);
	
	//wert = ean_code(ean);

	return EXIT_SUCCESS;
}

int ean_code(int zahl[]){
	//Variablen
	int i = 0;

	//jede zweite Stelle ausgeben
	for (i = 0; i <= zahl[11]; i += 2){
		printf("%d", zahl[i]);
	}
	printf("\n");
	return EXIT_SUCCESS;
}

So ich habe das Programm so umgeformt wie oben angeführt jedoch gibt das Programm Garnichts aus Ps: Dies ist nur eine Teilberechnung :D
 
Ein Problem:
- int-Zahlenbereich: -2147483648 bis 2147483647 (wenn 4 Bytes)
int ist also maximal 10-Stellig

Mit float könntest Du dein Programm realisieren.
 
?
Auch float hilft überhaupt nicht.

@Martin: Du brauchst nicht 11 int, sondern 13 char.
Dazu kein %d, sondern %s und weg mit dem & weil Array
(oder noch viel besser: mit fgets einlesen)

Und "i <= zahl[11]" kann nicht funktionieren.
Soll das nicht eher "i < 11" sein?
Und noch besser (bzw. das einzig Richtige): strlen.

PS: Die Korrektheit vom Ean-Code berechnet man anders.
 
C++:
//Header-Dateien
#include <stdio.h>
#include <stdlib.h>

//Funktionen
int ean_code(char zahl[]);

//Hauptprogramm
int main(void){
	//Variablendeklaration
	char zahl[13];
	int i = 0;
	
	//printf("Dieses Programm berechnet die Pruefziffer des Ean-Codes\n");
	printf("EAN-Code (12-Stellen): ");
	gets(zahl);

	printf("\n");
	
	//wert = ean_code(ean);

	return EXIT_SUCCESS;
}

int ean_code(char zahl[]){
	//Variablen
	int i = 0;

	//jede zweite Stelle ausgeben
	for (i = 0; i <= 11; i += 2){
		printf("%s", zahl[i]);
	}
	printf("\n");
	return EXIT_SUCCESS;
}

Wie und wo soll ich strlen einsetzen --> ich weiß das strlen die Länge einer Zeichenkette OHNE das '\0' Endezeichen bestimmt.
PS: Ich will mir die Prüfziffer des EAN-Codes berechnen und da ist dies nur eine Teilberechnung:
Die Prüfziffer errechnet sich wie folgt aus den ersten 12 Stellen:

 Summe1: Die Summe aus der 1., 3., 5., 7., 9. und 11. Ziffer
 Summe2: Die Summe aus der 2., 4., 6., 8., 10. und 12. Ziffer.
 Die Summe2 wird mit 3 multipliziert und zur Summe1 addiert.
 Die Prüfziffer ergibt sich aus der Differenz dieser Summe zur nächsten durch 10 teilbaren Zahl.
Beispiel:
 Summe1: 4 + 1 + 7 + 0 + 6 + 1 = 19
 Summe2 0 + 2 + 0 + 9 + 3 + 0 = 14 * 3 = 42
 Gesamtsumme: 61
 Differenz zu 70 = 9
 9 ist die Prüfziffer
 
Main schaut schon fast gut aus, bis auf das gets.
gets existiert nicht mehr, fgets verwenden.

In der Funktion:
Einserseits kein %s beim Ausgeben (sondern %c weil es einzelne Buchstaben sind).
Und das mit dem strlen war so gemeint, dass du ja gar nicht weißt,
ob der Benutzer die 12 Nicht-Prüf-Stellen auch alle eingegeben hat.
Wenn er nur drei Stellen eingibt, was macht dann deine Schleife?

(und wenn er keine Ziffern eingibt...für die Ausgabe kein Problem, aber für die Berechnung später.
Gehört auch noch geprüft: Schleife, ob jedes Ding bis zum Eingabenende >='0' und <='9' ist).
 
C++:
#include <stdlib.h>
#include <string.h>

//Funktionen
int ean_code(char zahl[]);

//Hauptprogramm
int main(void){
	//Variablendeklaration
	char zahl[13];
	int i = 0;
	
	//printf("Dieses Programm berechnet die Pruefziffer des Ean-Codes\n");

	printf("EAN-Code (12-Stellen): ");
	gets(zahl);
	printf("\n");
	
	//wert = ean_code(ean);

	return EXIT_SUCCESS;
}

int ean_code(char zahl[]){
	//Variablen
	int i = 0;
	strlen(zahl);
	while (*zahl >= '0' && *zahl <= '9'){
		//jede zweite Stelle ausgeben
		for (i = 0; i <= strlen(zahl); i += 2){
			printf("%c", zahl[i]);
		}
	}
	printf("\n");
	return EXIT_SUCCESS;
}

Bei mir geht aber komischerweise nur gets und nicht fgets, Ich hab den Code mal so umgeändert aber irgendwie mach ich da was falsches..
 
fgets geht ganz sicher.
Wenn es ein Problem gibt, das sich nach Lesen der Funktionsbeschreibung nicht Lösen lässt,
bitte sagen, was das Problem ist.

Und die Funktion... was denkst du, was das macht?
 
Wenn ich fgets schreibe kommt immer eine Fehlermeldung 'Zu wenig Argumente im Funktionsaufruf'.
Ich kapier irgendwie nicht wie ich jetzt die ungeraden und geraden Ziffern bekomme ich gehe vom Anfang des Arrays durch bis zum Ende des Arrays und dabei gibt die Schleife immer die zweite Stelle aus, jedoch bei mir gibt sie Garnichts aus...
C++:
for (i >=strlen(zahl); i <= strlen(zahl); i =i+ 2){
       printf("%c",zahl[i]);
}
 
...Wenn es ein Problem gibt, das sich nach Lesen
der Funktionsbeschreibung
nicht Lösen lässt...
http://www.cplusplus.com/reference/cstdio/fgets/

Wenn ich dir das jetzt fertig hinschreibe bist du nicht weiter als am Anfang.
Ziel ist, das du am Ende dieses Threads in der Lage bist,
die Aufgabe ggf. wieder zu lösen, aber dann allein.

Zur Funktion: Es wird dir wahrscheinlich helfen,
einmal auf Deutsch detailliert hinzuschreiben,
as die Funktion machen soll.
Also Details zu Überprüfung, ggf. Fehler(meldung),
summieren/multiplizieren und returnen (dann ausgeben) vom Ergebnis

Jedenfalls garantiere ich dir, nie fertig zu werden, wenn du vorhandene Codeteile neu ordnest
und/oder Sachen nur machst, um Compilerfehler wegzubekommen.
(das ist nämlich irgendwas in NP. Für sehr großen Input.
Schaffen=>Nobel/Turing/Field-Preis oder so)
 
Zurück