[C] Benötige Hilfe bei meiner Aufgabe

gto40

Grünschnabel
Hallo:);

Ich habe eine Aufgabe gestellt bekommen, wo ich nicht weiter weiß.

Meine Aufgabe lautet:

Folgender Programmteil soll einen Vektor initialisieren und alle Vektorelemente ausgeben:

Code:
	int zaehler;
    int  vektor[10] = {1,2,3,4,5,6,7,8,9,10};

    for (zaehler=1;zaehler<=10;zaehler++)
        printf("zaehler = %d",zaehler);


Ist dieses Vorgehen korrekt? Schreiben sie ein Programm um es zu testen. Bekommen sie eine Fehlermeldung oder eine Warnung?

Das ist meine Aufgabenstellung gewesen.
Ich habe mir dazu folgendes überlegt:
Code:
  int  vektor[] = {1,2,3,4,5,6,7,8,9,10};

    for(int  i=0;i<sizeof(vektor)/sizeof(vektor[0]);i++)
        printf("zaehler = %i \n", vektor[i]);
Mein Problem ist aber jetzt, dass ich, wenn ich das in Microsoft Visual C++ 6.0 eingeben möchte und laufen lassen will, dass es nicht funktioniert. ICh habe auch keinen schimmer wieso.
Hat einer Rat?

Wie muss man dies denn nun richtig eingeben oder ist da schon was in meiner Überlegung vollkommend falsch?
 
Willkommen bei tutorials.de :)

Was heißt, es funktioniert nicht?

Kommt ein Compilerfehler? Welcher?
Wenn nicht, was wird beim Programm ausgegeben?

Übrigens hättest du die Variable zaehler nicht gleich wegkürzen müssen...und %d statt %i ist auch nicht verkehrt.

C++:
int zaehler;
int vektor[10] = {1,2,3,4,5,6,7,8,9,10};

for (zaehler=0;zaehler<10;zaehler++)
printf("zaehler = %d\n",vektor[zaehler]);

Gruß

PS Bitte benutze in Zukunft auch [code=cpp]...[/code], um Code zu posten.
Siehst du oben, macht das Ganze besser lesbar.
 
Ach Sry, ich habs nicht gesehen bzw. dran gedacht.

Also: Ich bin echt am verzweifeln^^ Ich hab locker irgendwas falsch eingeben bzw. viel vergessen. Ehrlich gesagt, ich hab vor kurzem erst angefangen C zu lernen. Deshalb verzeiht mir meine Anfängerfehler bitte:)

C++:
int  main(void)
{
    int  vektor[] = {1,2,3,4,5,6,7,8,9,10};

    for(int  i=0;i<sizeof(vektor)/sizeof(vektor[0]);i++)
        printf("zaehler = %i \n", vektor[i]);
    
}
    
    return  0;
}


Die Fehlermeldungen sind diese hier:
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(5) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(5) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(5) : error C2143: Syntaxfehler : Fehlendes ')' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(5) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(5) : error C2065: 'i' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(5) : warning C4552: '<' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(5) : error C2059: Syntaxfehler : ')'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(6) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'printf'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(6) : warning C4013: 'printf' undefiniert; Annahme: extern mit Rueckgabetyp int
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(15) : error C2059: Syntaxfehler : 'return'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(16) : error C2059: Syntaxfehler : '}'



Ich habe versucht davon welche zu beheben aber dann funktioniert es trotzdem nicht:(

Wie hättest du bzw. ihr diese Aufgabe gelöst?

Sobald ich einige Fehler ausmerze, bleiben immernoch welche übrig.
 
Deine Fehler sind:

1) Bei der Bedingung der for-Schleife könnten Klammern nicht schaden, da / für den Compiler Wichtiger ist als <.
Es wird also Zuerst der Kleiner-Vergleich gemacht und dann dividiert.
Lösung: i<(sizeof(vektor)/sizeof(vektor[0]))

2) Vorm return ist ein }, das da nicht hin gehört. Das { beim Main und das } nach dem return reichen schon.

3) Um printf zu verwenden muss am Anfang (noch vor int main...) ein include hin:

C++:
#include<stdio.h>

We ich das gelöst hätte, hab ich ja schon oben gezeigt.

Hier nocheinmal als Komplettprogramm:
C++:
#include<stdio.h>

int main()
{
    int zaehler;
    int vektor[10] = {1,2,3,4,5,6,7,8,9,10};
 
    for (zaehler=0;zaehler<10;zaehler++)
    printf("zaehler = %d\n",vektor[zaehler]);

    return 0;
}

Deshalb verzeiht mir meine Anfängerfehler bitte
Keine Sorge, jeder hat doch mal angefangen :)

Gruß
 
Als allererstes Danke für deine Erklärungen!

Ich hab noch eine Aufgabe zu den Vektoren, die ist noch schwieriger finde ich:(
Da habe ich auch nur meinen Lösungsansatz aber, dort ist das selbe Problem wie bei der Aufgabe.
Ich kriege Fehler und wenn ich welche behebe, dann funktioniert es trotzdem nicht.

Darf ich die hier auch noch posten? Die anderen Übungsaufgaben die wir vom Lehrer bzw. aus einem Buch haben, klappen wunderbar.
 
Es gibt Leute, die denken, die Posten hier einfach ihre Aufgaben und andere User machen die schon. Davon hat eigentlich im Endeffekt keiner was und wegen solchen Leuten werden manchen nicht geholfen.

Die letzte Problemaufgabe die ich habe ist diese hier. Ich poste einfach mal die Aufgabenstellung damit ihr, bzw. du, wisst, worum es geht.

Aufgabe:
Schreiben sie Ein Programm, das 10 Zahlen einliest und jede Zahl ausgibt, die mit keiner der vorhergehenden Zahlen übereinstimmt. Verwenden sie einen Vektor für diese Aufgabe. Bedenken Sie, dass im ungünstigsten Fall alle 10 Zahlen verschieden sind!


Ich habe mir jetzt folgendes ausgedacht:
Mein erster Lösungsansatz war mit BOOL:

C++:
bool  Contains(int  vek[],int  eingabe,int  laenge)
{
    for(int  i=0;i<laenge;i++) //durchlaufe das array
    {
        if(vek[i]==eingabe)//ist das N-Element identisch mit der eingabe
        {
            return  true; // dann gebe ja zurueck
        }
    }
    return  false; //ansonsten nein
}


int  main(void)
{
    //ein 10stelliges array erstellen und es {} leer initialisieren ( d.h. an jeder stelle steht 0}
    int  vektor[10] = {};

    //hilfsvariable fuer eingabe
    int  eingabe;

    //zahlen abfragen und fuellen
    for(int  i=0;i<sizeof(vektor)/sizeof(vektor[0]);i++)
    {
        printf("Geben Sie eine Zahl ein und bestaetigen sie mit ENTER\n");
        scanf("%i",&eingabe);//benutzer eingabe einlesen
        
        //ueberpruefen ob zahl bereits eingegeben wurde
        if(!Contains(vektor,eingabe,sizeof(vektor)/sizeof(vektor[0])))
        {
            printf("Ausgabe: %i \n",eingabe);
                vektor[i]=eingabe;
        }
        //else
        //    printf("%i wurde breits eingegeben\n",eingabe);    
}
    
    return  0;
}

Das PRoblem was ich jetzt habe, ist, dass mein Microsoft Visual C++ 6.0 dieses Bool und Contain nicht erkennen will.

Problem:
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(1) : error C2061: Syntaxfehler : Bezeichner 'Contains'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(1) : error C2059: Syntaxfehler : ';'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(1) : error C2059: Syntaxfehler : 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(17) : error C2059: Syntaxfehler : '}'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2143: Syntaxfehler : Fehlendes ')' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2065: 'i' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : warning C4552: '<' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2059: Syntaxfehler : ')'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(24) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : warning C4013: 'printf' undefiniert; Annahme: extern mit Rueckgabetyp int
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(26) : warning C4013: 'scanf' undefiniert; Annahme: extern mit Rueckgabetyp int
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(29) : warning C4013: 'Contains' undefiniert; Annahme: extern mit Rueckgabetyp int
Fehler beim Ausführen von cl.exe.


Als zweites habe ich dann dieses Bool aufgrund eines "Tipps" von einem aus der Schule in Int geändert.

Dies sah dann wie folgt aus:
C++:
int Contains(int vek[], int eingabe, int laenge) 
{ 
 int i; 

    for (i = 0; i <laenge; i++) //durchlaufe das array 
    { 
        if (vek[i] == eingabe)//ist das N-Element identisch mit der eingabe 
        { 
            return 1; // dann gebe ja zurueck 
        } 
    } 

    return 0; //ansonsten nein 
} 
 
int  main(void)
{
    //ein 10stelliges array erstellen und es {} leer initialisieren ( d.h. an jeder stelle steht 0}
    int  vektor[10] = {};
 
    //hilfsvariable fuer eingabe
    int  eingabe;
 
    //zahlen abfragen und fuellen
    for(int  i=0;i<sizeof(vektor)/sizeof(vektor[0]);i++)
    {
        printf("Geben Sie eine Zahl ein und bestaetigen sie mit ENTER\n");
        scanf("%i",&eingabe);//benutzer eingabe einlesen
        
        //ueberpruefen ob zahl bereits eingegeben wurde
        if(!Contains(vektor,eingabe,sizeof(vektor)/sizeof(vektor[0])))
        {
            printf("Ausgabe: %i \n",eingabe);
                vektor[i]=eingabe;
        }
        //else
        //    printf("%i wurde breits eingegeben\n",eingabe);    
}
    
    return  0;
}

Jetzt sind es nur noch 8 Fehler, die er meldet. Deshalb vermute ich irgendwelche Fehler im anderen Teil des Programmes. Diese Vermutung kann auch falsch sein:)


Ich hoffe, du kannst mir wieder helfen bzw. auch andere.
Für mich sind das die 2 Aufgaben die ich am schwierigsten bis jetzt sind.
Verzeiht mir wieder solche dummen Fehler, aber selbst sieht man sie nicht, bis ein Erfahrener drüber schaut.
 
1) Bei der Bedingung der for-Schleife könnten Klammern nicht schaden, da / für den Compiler Wichtiger ist als <.
Es wird also Zuerst der Kleiner-Vergleich gemacht und dann dividiert.
Lösung: i<(sizeof(vektor)/sizeof(vektor[0]))
Das ist falsch, wie ein Blick in eine Präzedenztabelle bestätigt.

Den eigentlichen Fehler der for-Schleife hast du zwar in deinem korrigierten Quellcode behoben, aber nicht weiter erwähnt: die Deklaration von Variablen im Kopf einer for-Schleife ist erst ab C99 möglich. C99 wird von Visual C++ 6.0 (und wenn ich mich recht erinnere auch von der aktuellen Version 2010) aber nicht vollständig unterstützt, also muss man die Zählvariable vor der Schleife deklarieren.

@gto40: Gibt es einen speziellen Grund, warum du eine IDE und einen Compiler aus dem letzten Jahrtausend verwendest?

Grüße,
Matthias
 
Hallo Matthias Reitinger:)

Ja, der Grund ist der, dass wir in der Schule diese Microsoft Visual C++ 6.0 Version verwenden. Warum, dass weiß ich auch nicht. Ich habe insgesamt 10 Aufgaben lösen müssen. Die vorletzte und die letzte hier sind die letzten 2 Aufgaben davon.
Diese 10 Aufgaben muss ich an einem bestimmten Termin, der in einer Woche ist, auch erklären können und auch dort zeigen, dass das Programm wirklich läuft.
Bislang waren die Aufgaben mehr oder weniger leicht und für mich zu bewältigen aber die 2 Aufgaben die ich hier gepostet habe, sind für mich schon verwirrend bzw. schwer.
Dank Sheel, hab ich die 9te Aufgabe von 10 jetzt verstanden und zum laufen gebracht. Jetzt fehlt mir jedoch noch die 10te Aufgabe.
 
Es gibt Leute, die denken, die Posten hier einfach ihre Aufgaben und andere User machen die schon.

Solche Leute, die es nicht einmal selber probieren, verweis ich gern zu den unentgeltlichen Stellenangeboten...
aber du versuchst es ja selber, sollte also für keinen hier ein Problem sein.

Zu der bool-Sache: Wenn du bei der Dateinamenendung statt c cpp nimmst, kannst du auch bool verwenden.
Mit einem int gehts aber genau so gut.
Ich bleib vorerst bei der int-Variante.

Contains schaut gut aus.

Zum Main:

1)
C++:
int  vektor[10] = {};
kannst du auch ohne {} schreiben:
C++:
int  vektor[10];
Du darfst dich in beiden Fällen aber NICHT darauf verlassen, dass am Anfang überall 0 drinnen ist!
Wenn du alles Nuller brauchst, selber mit einer Schleife überall 0 reinschreiben.

2) sollest du warscheinlich zuerst nur Einlesen, und dann mit Contains prüfen und ausgeben.

3) Das include am Anfang fehlt schon wieder :)
Für printf und scanf brauchst du es nun mal.

@Matthias Reitinger: Danke für die Korrektur.
Aber schaden können die Klammern auch nicht :)
 
Zuletzt bearbeitet:
Zurück