Brauche Hilfe bei einen Programm



  • 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