Fragen zu C!! Habe morgen Klausur!! Hilfe!!
-
Hallo
schreibe morgen Klausur und bin gerade ein bisschen am probieren!
Folgende Aufgabe:Definieren Sie die Funktion Finden, die in einem Vektor
der Länge N alle Zahlen im Intervall [n1,n2] findet und
deren Produkt zurückgibt.
*int Finden(int z, int N, int n1, int n2);Mein bisheriger Lösungsvorschlag:
int main()
int finden (int *z,int N,int A,int
{
int i;
int p=1;for(i=0;i<=N;i++)
if(((z+i)>=A)&&((z+i)<=B))
p*=*(z+i);
return p;
}Aber irgendwas stimmt hier noch nicht! Wäre dankbar für schnelle Hilfe!
Schonmal Danke im voraus!!epimetheus_xxx
-
for(i=0;i<=N;i++)
Das zählt dir ein Feld über das Ziel hinaus - richtig wäre i<N als Abbruchbedingung.
PS: Falls das nicht das Problem war - wie äußert sich das "irgendwas stimmt nicht"?
-
Danke für die sehr schnelle Antwort!
Wenn ich den Variablen jetzt mal Werte zuweise, z.B. so:
#include <stdio.h>int main()
*int finden (int z,int N=4,int A=5,int B=6)
{
int i;
int p=1;for(i=0;i<N;i++)
if(((z+i)>=A)&&((z+i)<=B))
p*=*(z+i);
return p;
}
Bekomme ich 4 Fehlermeldungen!
Und zwar:
E:\4. Semester\Softwaretechnik I\Klausur\Aufgabe 26_03_04_08.c(6) : error C2143: Syntaxfehler : Fehlendes ')' vor '='
E:\4. Semester\Softwaretechnik I\Klausur\Aufgabe 26_03_04_08.c(6) : error C2085: 'finden' : Nicht in der formalen Parameterliste enthalten
E:\4. Semester\Softwaretechnik I\Klausur\Aufgabe 26_03_04_08.c(6) : error C2143: Syntaxfehler : Fehlendes ';' vor '='
E:\4. Semester\Softwaretechnik I\Klausur\Aufgabe 26_03_04_08.c(6) : error C2059: Syntaxfehler : ')'
Fehler beim Ausführen von cl.exe.Aufgabe 26_03_04_08.exe - 4 Fehler, 0 Warnung(en)
Und alle zeigen auf die dickgeschriebene Zeile!
Wo liegt mein Fehler?epimetheus_xxx
-
Ganz einfach, diese Art der Wertzuweisung kennt C nicht. Das ist C++ (vielleicht auch C99, weiß grad net).
-
Genau - C kennt noch keine Default-Parameter. Die Werte mußt du angeben, wenn du die Funktion aufrufst:
int finden(int*z,int N,int A,int B) {...} int main() { int values[10]; int i,n; for(i=0;i<10;++i) values[i]=10-i; //Funktionsaufruf: n=finden(values,10,3,7); printf("Zahlen zwischen 3 und 7: %d\n",n); return 0; }
-
mmh Danke ich glaube das führt jetzt zu weit!
Ich habe hier noch eine ähnliche Aufgabe mit Lösung!
Aufgabe:
Definieren Sie die Funktion Finden, die in einem Vektor
der Länge N alle Zahlen des Intervalls [Z1,Z2] findet und
deren Summe zurückgibt.
int Finden(int z, int N, int Z1, int Z2);
Lösung (Programmsegment):
int Finden(int z, int N, int Z1, int Z2)
{
int i, S=0;
for (i=0; i<N; i++)
if( ((z+i)>=Z1) && ((z+i)<=Z2) )
S += *(z+i);
return S;
}
Unser Prof erwartet immer nur solche Segmente als Antworten, wäre die folgende Lösung dann richtig für die erste Aufgaenstellung???int finden (int *z,int N,int A,int
{
int i, p=1;for(i=0;i<N;i++)
if(((z+i)>=A)&&((z+i)<=B))
p*=*(z+i);
return p;
epimetheus_xxx
-
Also technisch dürfte die Funktion richtig sein, ob sie den Vorgaben deines Prof's entspricht, kann dir hier niemand sagen
(wenn er Wert legt auf die Bezeichnungen, mußt du deine Parameter eventuell umbenennen)PS: Wenn du hier postest, pack' deine Programmschnipselchen doch bitte in [cpp]-Tags, das erhöht die Lesbarkeit.
-
epimetheus_xxx schrieb:
Unser Prof erwartet immer nur solche Segmente als Antworten, wäre die folgende Lösung dann richtig für die erste Aufgaenstellung???
int finden (int *z,int N,int A,int B) { int i, p=1; for(i=0;i<N;i++) if((*(z+i)>=A)&&(*(z+i)<=B)) p*=*(z+i); return p; }
Entschuldigt bitte, ich kann nicht anders, aber wie wär's mit
int finden (int *z,int N,int A,int B) { int i, p=1; for(i=0;i<N;i++) if((*(z+i)>=A)&&(*(z+i)<=B)) p*=*(z+i); return p; }
Und bezüglich "das führt jetzt zu weit!": Schreibt ihr nur Programmschnippselchen oder benutzt ihr die auch mal in einem echten Programm?!
-
Wir haben ältere Klausuren bekommen, zum lernen! Und da stehen teilweise solche "Programmschnipsel" drauf, die wir interpretieren müssen und solche Aufgaben zum entwerfen und definieren! Programme sollen das nicht werden! Ich versuche nur für mich diese Schnipsel in C Programm zu schreiben, um sie besser zu verstehen!
epimetheus_xxx
PSS: Für ein komplettes Programm zu den Aufgaben mit dem Produkt und Summe wäre ich sehr dankbar!
-
Naja von dem kompletten Programm rede ich eigentlich die ganze Zeit, aber wurscht. CStoll hat Dir bereits ein Hauptprogramm zu der finden-Funktion mit Produkt geliefert, wo Du nur den Inhalt der funden-Funktion in die "..." hättest packen müssen, das war wo Du meintest "das führt jetzt zu weit". Also, was nun?
Achja: Ich kann mir kaum vorstellen dass ihr Eure erste C-Klausur schreibt ohne je ein Hauptprogramm geschrieben zu haben.
-
An folgender Aufgabe verzweifel ich gerade:
Entwerfen sie ein Programmstück, in dem das Feld int Feld[5][5] wie folgt zeilenweise belegt wird:
{{1,2,3,4,5},{2,4,6,8,10},{3,6,9,...},...}#include <stdio.h> void main() { int Feld[5][5]; int i; int j; int x=0; for(i=0;i<5;i++) for(j=0;j<5;j++) { Feld[i][j]=j*++x; // hier komme ich nicht weiter printf("%d\n",Feld[i][j]); } }
Danke für Eure Hilfe!
epimetheus_xxx
-
Was soll denn das werden? versuch's doch mal mit "feld[i][j]=i*j;"