C Aufgabe mit dem Thema Funktionen

technik-noob

Cadet 2nd Year
Registriert
März 2016
Beiträge
24
Hallo Forum,

ich habe neu mit dem Programmieren angefangen und bin gerade bei dem Thema Funktionen, also relativ am Anfang und habe nicht wirklich viel Ahnung davon.
Jetzt habe ich eine Aufgabe, die ich nicht lösen kann, weil ich sie nicht verstehe. Deswegen hoffe ich, dass mich hier jemand aufklären kann.

Das hier ist die Aufgabenstellung:
Vervollständigen Sie die folgende Funktionsdefinition so, dass sie die Anzahl des Vorkommens vom Zeichen c in der Zeichenkette text zuruckliefert.
C:
#include <stdio.h>
int count_occurrence(char text[], char c) {
...
}
int main() {
char message[] = "hellooo woooorld!";
char letter = ’o’;
printf("Anzahl des Vorkommens: %d\n", count_occurrence(message, letter));
return(0);
}

1. Wieso steht bei count_occurrence in der main Funktion in den klammern message und letter? müsste man nicht eigentlich die selbe funktion von oben übernehmen also mit (char text[], char c)?
2.Soll ich jetzt bei int count_occurrence einfach ein Programm schreiben, dass ich einen Text eingeben kann und dann für char c einen buchstaben eingeben muss und dann dieser im Text gezählt wird?
Oder soll char text den selben string wie char message von unten haben und ich soll nach dem Buchstaben char letter = 'o' suchen?


Bin für jede Hilfe dankbar.

LG atiufi
 
1. In Zeile 2 definierst du die Funktion; in Zeile 8 rufst du sie auf. Du definierst, dass du ein char Array und ein einzelner char übergeben willst und in Zeile 8 übergibst du das dann (message ist ein char Array und letter ein char (definiert in Zeile 6 bzw. 7)
2. Du sollst mit der Funktion count_occurrence im String/Chararray text[] nach dem char c suchen.
Wenn du in Zeile 8 die Funktion aufrufst übergibts du ihr den Text message und den Char letter. Heißt du willst herrausfinden, wie viele 'o' in 'message' sind. Wenn du alles richtig machst, solltest du 7 als Ergebnis erhalten.
 
  • Gefällt mir
Reaktionen: aroxx und technik-noob
Nilson schrieb:
1. In Zeile 2 definierst du die Funktion; in Zeile 8 rufst du sie auf. Du definierst, dass du ein char Array und ein einzelner char übergeben willst und in Zeile 8 übergibst du das dann (message ist ein char Array und letter ein char (definiert in Zeile 6 bzw. 7)
2. Du sollst mit der Funktion count_occurrence im String/Chararray text[] nach dem char c suchen.
Wenn du in Zeile 8 die Funktion aufrufst übergibts du ihr den Text message und den Char letter. Heißt du willst herrausfinden, wie viele 'o' in 'message' sind. Wenn du alles richtig machst, solltest du 7 als Ergebnis erhalten.
Ich habe es jetzt soweit geschafft. Aber bei mir kommt als Ausgabe immer die 17 raus. Wie kann ich den int count ausgeben?

Code:
#include <stdio.h>
#include<string.h>
int count_occurrence(char text[], char c) {
int i;
int count=0;
int length=strlen(text);
for(i=0;i<length;i++) {
    if(text[i]==c) {
        count++; }
}
}
int main() {
char message[] = "hellooo woooorld!";
char letter = 'o';
printf("Anzahl des Vorkommens: %d\n", count_occurrence(message, letter));
return(0);
}
 
Deine Funktion sollte auch einen Rückgabewert (return) erhalten. Der Compiler hat dessen Fehlen mit Sicherheit auch bemängelt. Also immer schön Fehlermeldungen lesen!
 
  • Gefällt mir
Reaktionen: abcddcba und technik-noob
simpsonsfan schrieb:
Deine Funktion sollte auch einen Rückgabewert (return) erhalten. Der Compiler hat dessen Fehlen mit Sicherheit auch bemängelt. Also immer schön Fehlermeldungen lesen!
omg danke ich habe wirklich fast eine halbe stunde an diesem Problem gesessen, weil ich return vergessen habe ich dummkopf. Es gab keine Fehlermeldung ich compiliere mit gcc und gebe es immer so ein gcc "name" -o "exe-name" -Wall. Einen anderen Command als -Wall habe ich nicht gelernt und da kam keine Meldung.
Vielen Dank für deine schnelle Hilfe :)
 
-Wall -Werror -std=c99
würde ich für den Anfang empfehlen :)
 
  • Gefällt mir
Reaktionen: technik-noob
Ich hab es grade kurz getestet auf einer online compiler Seite. gcc sollte in etwa folgenden Fehler ausspucken:
source_file.c: In function ‘count_occurrence’:
source_file.c:11:1: warning: control reaches end of non-void function [-Wreturn-type]
 
  • Gefällt mir
Reaktionen: technik-noob
aroxx schrieb:
-Wall -Werror -std=c99
würde ich für den Anfang empfehlen :)
dankeschön die habe ich mir jetzt notiert. Ich google dann mal was die bedeutung von werror und std=c99 ist. Dankeschön! :)
 
-Werror sorgt dafür, dass alle warnings als error behandelt werden und somit kein executable erstellt wird. Das hilft dir sauberen Code zu schreiben, weil du auch jedes Warning fixen solltest und nicht in Versuchung kommst: Ach es compiled, dann passt das schon ;-)
-std=c99 erlaubt (u.a.) die Deklarierung von Variablen (z.b. int i = 0) in for-loops:
C:
for(int i=0;i<length;i++) {
//Do something
}
 
  • Gefällt mir
Reaktionen: technik-noob
Stimmt, war das falsche Wort von mir, natürlich ist es genaugenommen zunächst keine Fehler- sonder eine Warnmeldung. Aber auch die haben nützliche Informationen. Deswegen würde ich auch sagen, dass für den Anfang -Werror vielleicht nicht schlecht ist.
 
  • Gefällt mir
Reaktionen: technik-noob
aroxx schrieb:
-Werror sorgt dafür, dass alle warnings als error behandelt werden und somit kein executable erstellt wird. Das hilft dir sauberen Code zu schreiben, weil du auch jedes Warning fixen solltest und nicht in Versuchung kommst: Ach es compiled, dann passt das schon ;-)
-std=c99 erlaubt (u.a.) die Deklarierung von Variablen (z.b. int i = 0) in for-loops:
C:
for(int i=0;i<length;i++) {
//Do something
}
Die Registrierung von Variablen in die Schleifen ging bei mir bis jetzt ohne std=c99. Danke für die Erklärungen :) werror werde ich ab jetzt beim kompilieren benutzen.
 
  • Gefällt mir
Reaktionen: abcddcba
Für Daus:


Rückgabedatentyp Funktionsname(Parameterdatentyp Parametername, Parameterdatentyp2 Parametername2...) {
Mach irgendwas;
Return irgendwas vom Typ Rückgabedatentyp;}

Aufruf:
X = Funktionsname(1,2,3);


Google mal prozedurale Programmierung und guck dir an was du da machst, bevor du nicht verstanden hast was eine Funktion und was ein Funktionsaufruf ist versuch nicht weiterzumachen. Auswendig bringt nix, Prinzip muss erstmal klar sein.

Tipp noch für den Aufgabentyp: das sind meistens simpelste Programmieraufgaben, egal obs ums Ergänzen oder Fehler finden geht: wenn dus nicht gleich raffst schreib die Funktion einfach kurz für dich selbst ohne aufs vorgegebene Programm zu gucken was da vorgegeben ist. Dann musst du nur noch vergleichen zwischen deinem und der Vorgabe. Bleibst du hängen ist es ein Daufehler: Datentypen checken, Return checken, gucken dass deine Arrays nicht zu klein sind, sowas in der Art. Im Zweifel: Handbuch hilft.

Irgendwann wirds dann komplexer mit Pointern und Co, auch da: verstehen was ein Pointer ist, ob du gerade den Wert oder die Referenz brauchst, obs ein Pointer auf einen Pointer ist, solche Scherze. Immer langsam und überlegen was du gerade machst.
 
  • Gefällt mir
Reaktionen: technik-noob
Zurück
Oben