Brauche Hilfe bei einen Programm



  • Hallo,

    ich hab hier ein Programm zur berechnung der EAN-Prüfziffer geschrieben.
    Doch leider zeigt mir der Compiler noch irgendwo ein Fehler an.
    Könnt ihr mir weiterhelfen was ich da falsch gemacht habe?

    Gruss
    Johannes

    #include<stdio.h>
    void main()
    {
     int Nutzziffer1, Nutzziffer2, Nutzziffer3, Nutzziffer4, Nutzziffer5, Nutzziffer6, Nutzziffer7;
     int Pruefziffer;
     int SummeEinzelProdukte;
     int modulo10;
    
     printf("Nutzziffer1 eingeben: ");
     scanf("%i" ,&Nutzziffer1);
     printf("Nutzziffer2 eingeben: ");
     scanf("%i" ,&Nutzziffer2);
     printf("Nutzziffer3 eingeben: ");
     scanf("%i" ,&Nutzziffer3);
     printf("Nutzziffer4 eingeben: ");
     scanf("%i" ,&Nutzziffer4);
     printf("Nutzziffer5 eingeben: ");
     scanf("%i" ,&Nutzziffer5);
     printf("Nutzziffer6 eingeben: ");
     scanf("%i" ,&Nutzziffer6);
     printf("Nutzziffer7 eingeben: ");
     scanf("%i",&Nutzziffer7);
    
    SummeEinzelProdukte=Nutzziffer1*3+Nutzziffer2*1+Nutzziffer3*3+Nutzziffer4*1+Nutzziffer5*3+Nutzziffer6*1+Nutzziffer7*3;
    
     modulo10=SummeEinzelProdukte10;
     Pruefziffer=(10-modulo10)%10; 
    
     printf("DiePruefziffer ist: %i \n",Pruefziffer);
    }
    


  • Hallo

    Doch leider zeigt mir der Compiler noch irgendwo ein Fehler an.

    Ahja. Und sollen wir nun raten, wo wlecher Fehler auftritt?

    Denn deinen unformatierten Quellcode wird sich keiner anschauen.

    bis bald
    akari



  • rofl, irgendwo einen fehler?
    und wie wärs, wenn du den mal mit hier rein postest?

    dann gehört das wohl ins Ansi C Forum, da ich hier kein C++ erkennne kann!



  • Johannes1983 schrieb:

    Doch leider zeigt mir der Compiler noch irgendwo ein Fehler an.

    Das ist noch nicht vage genug. Könntest du etwas weniger spezifisch sein?



  • Es fehlt wohl ein

    int SummeEinzelProdukte10;
    

    Trotzdem würde ich das Programm nochmal überarbeiten.



  • ..bzw die 10 muss vielleicht da weg.

    [notiz]
    Ich muss mir mein Kennwort wiederholen
    [/notiz]



  • SciFi->N/A schrieb:

    Es fehlt wohl ein

    int SummeEinzelProdukte10;
    

    Trotzdem würde ich das Programm nochmal überarbeiten.

    Hallo,

    sorry ich weiss noch nocht wie man den Quellcode hier richtig rein bringt!
    Es fehlte ein % Zeichen hinter dem Produkte. Jetzt klappt das Programm.

    Gruss
    Johannes

    EDIT: Ok hab herausgefunden wie das mit dem Quellcode hier einfügen funktioniert 🙂



  • Ok, jetzt hab ich mal noch eine Frage zu den Schleifen!

    Und zwar hab ich in meinen jetzigen Programm den Algorithmus

    SummeEinzelProdukte=Nutzziffer1*3+
                        Nutzziffer2*1+
                        Nutzziffer3*3+
                        Nutzziffer4*1+
                        Nutzziffer5*3+
                        Nutzziffer6*1+
                        Nutzziffer7*3;
    

    Es werden also alle Nutzziffern abwechselnd mit 3 und 1 multipliziert!

    Wie kann ich sowas als Schleife schreiben? Den ich hab vor das Programm für mehrere Nutzziffern zu schreiben und möchte nicht z.B. 27mal Nutzzifferxx*27 zu schreiben 🙂

    Ich hab mir das irgendwie so vorgestellt. Scheitere aber leider an der Umsetzung.

    if(nutzziff==3)
         nutzziff=1;
    else nutzziff=3;
    

    Könnt ihr mir auch hier weiterhelfen?
    Danke 🙂



  • du nimmst ein feld an nutzziffern, und in der schleife dann

    if(akt_ziffer%2)
      summe += ziffern[akt_ziffer] *3;
    else
      summe += ziffern[akt_ziffer] *1;
    

    es gibt auch kompaktere schreibweisen, aber ich denke die sind zu kompliziert für dich



  • Dazu mußt du deine Ziffern in ein Array (bzw. einen std::vector) packen. Und dann geht das so:

    int Summe = 0;
    
    for (int i=0; i<Nutzziffer.size(); i+=2)
        Summe += Nutzziffer[i] * 3;
    
    for (int i=1; i<Nutzziffer.size(); i+=2)
        Summe += Nutzziffer[i] * 1;
    

    Im übrigen ist

    void main()

    falsch. Es muß

    int main()

    heißen.

    Edit: Zu langsam und suboptimal. Arrrg!



  • Ähem du meinst wohl jede ungerade Stelle wird mit 3 multipliziert, oder was erhoffst du dir von den *1 Multiplikationen?

    mach es so:

    #include <numeric> //für std::accumulate
    
    int main()
    {
        const size_t anzahlZiffern = 13;
        int ean[ anzahlZiffern ];
    
        for( int i = 0; i < anzahlZiffern; ++i )
           if( i % 2 == 0 )
               ean[ i ] *= 3;
    
        int sum = std::accumulate( ean, ean + anzahlZiffern, 0 );
    
        int checkdigit = ( 10 - sum % 10 ) % 10; //wenn ich deinen Codeauszug richtig interpretiere
    }
    


  • Vielen Dank für eure Antworten. Ich versuche es mal umzusetzen 🙂



  • Z2 schrieb:

    Dazu mußt du deine Ziffern in ein Array (bzw. einen std::vector) packen. Und dann geht das so:

    int Summe = 0;
    
    for (int i=0; i<Nutzziffer.size(); i+=2)
        Summe += Nutzziffer[i] * 3;
    
    for (int i=1; i<Nutzziffer.size(); i+=2)
        Summe += Nutzziffer[i] * 1;
    

    Im übrigen ist

    void main()

    falsch. Es muß

    int main()

    heißen.

    Edit: Zu langsam und suboptimal. Arrrg!

    Gibt es sowas auch für den "printf" Befehl?
    Also so das ich nicht z.B. 21 mal

    printf("Nutzziffer1 eingeben: ");
    scanf("%i" ,&Nutzziffer1);

    für 21 Eingaben schreiben muss? Es soll also variieren und nicht durch den Programmieren festgelegt werden!

    Edit: Ok hab selber im Buch nachgeschaut und bin auf folgende Lösung gekommen um mir das Einlesen der Daten zu erleichtern!

    printf("Bitte Nutzziffern eingeben: \n");
    	for(i=0; i<n; i++)
    	scanf("%i",&Nutzziffer[i]);
    


  • Bräuchte wohl noch ein wenig unterstützung von euch! Bin inzwischen beim Kapitel Schleifen gekommen, doch hab ich an einigen Stellen noch Probleme 😕

    #include<stdio.h>
    int main()
    {
    	int Nutzziffer[13];
    	int Pruefziffer, SummeEinzelProdukte, modulo10;
    	int i,ean_nr,anzahl_nziffern;
    
        printf("EAN-Code-Nr. =? (8 oder 13 eingeben)");
        scanf("%i",&ean_nr);
        anzahl_nziffern=ean_nr-1;
        printf("Es werden nun %i Ziffern eingelesen.\n\n",anzahl_nziffern);
    
    	//Einlesen der Nutzziffern
    	{
    	printf("Bitte Nutzziffern eingeben: \n");
    	for(i=0; i<anzahl_nziffern; i++)
    	scanf("%i",&Nutzziffer[i]);
        }
    
    	//Der Algorithmus (Alle Zahlen sollen abwechseln mit 3 und 1 multipliziert werden)
    
    	{
        if (Nutzziffer[i]%2) 
    		SummeEinzelProdukte += Nutzziffer[i] *3; 
        else 
    		SummeEinzelProdukte += Nutzziffer[i] *1;
    	}
    
    	modulo10=SummeEinzelProdukte % 10;
    	Pruefziffer=(10-modulo10) % 10;
    
        //Ausgeben des EAN-Codes mit Prüfziffer
        char Text[]="Der EAN-Code ist: %i \n" ,Pruefziffer";;
        printf("%s",Text);
    
    }
    

    Visual C++ 6.0 zeigt mir leider noch 4 Fehler und 1 Warnung! 😕

    error C2001: Zeilenumbruch innerhalb einer Konstanten
    error C2143: Syntaxfehler : Fehlendes ';' vor 'string'
    error C2371: 'Pruefziffer' : Neudefinition; unterschiedliche Basistypen
    Siehe Deklaration von 'Pruefziffer'
    error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'printf'
    warning C4508: 'main' : Funktion sollte einen Wert zurueckgeben; Ergebnistyp 'void' angenommen



  • char Text[]="Der EAN-Code ist: %i \n" ,Pruefziffer";;

    Diese Zeile kannst du so nicht verwenden, du müsstest die Prüfziffer mittels snprintf einfügen..



  • printf("DiePruefziffer ist: %i \n",Pruefziffer);
    

    Das muss %d heissen bei Integer!

    Gruß Alex


Anmelden zum Antworten