kurze Frage < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 02:30 Di 01.11.2005 | Autor: | Bastiane |
Hallo!
Eigentlich sollte nur ein Pseudo-Code geschrieben werden, aber einer "meiner" Studenten hat es wohl falsch verstanden... Ich blicke hier nicht so ganz durch, aber könnte mir jemand sagen, ob das folgende "Programm" bei Eingabe einer Folge von n Zahlen und einer Zahl v den Index i ausgibt, so dass v=A[i] oder NIL, falls kein solcher existiert.
[Dateianhang nicht öffentlich]
Viele Grüße
Bastiane
Dateianhänge: Anhang Nr. 1 (Typ: png) [nicht öffentlich]
|
|
|
|
Hallo Bastiane!
> Eigentlich sollte nur ein Pseudo-Code geschrieben werden,
> aber einer "meiner" Studenten hat es wohl falsch
> verstanden... Ich blicke hier nicht so ganz durch, aber
> könnte mir jemand sagen, ob das folgende "Programm" bei
> Eingabe einer Folge von n Zahlen und einer Zahl v den Index
> i ausgibt, so dass v=A oder NIL, falls kein solcher
> existiert.
>
> [Dateianhang nicht öffentlich]
>
Das Programm setzt folgende Parameterübergabe auf der Konsole vorraus: [mm] $\textrm{Programm}\ A_1\ A_2\ \dotsc\ A_n\ [/mm] v$
mit
[mm] $\mathrm{argv}[1] [/mm] = [mm] A_1$
[/mm]
[mm] $\vdots$
[/mm]
[mm] $\mathrm{argv}[\mathrm{argc}-2] [/mm] = [mm] A_n$
[/mm]
[mm] $\mathrm{argv}[\mathrm{argc}-1] [/mm] = v$
In jedem Iterationsschritt wird [mm] $A_i$ [/mm] in current eingelesen. Dann wird überprüft, ob:
current == argv[argc]
Das verstehe ich nicht, denn:
1. current ist ein Integer-Typ. argv[argc] ist eine Zeichenkette (genauer: ein Zeiger auf ein Array von Zeichen). Wieso sollte ein solcher Vergleich sinnvoll sein? Ok, da das ja hier eine Pseudo-Code-Notation sein soll, ignorieren wir das mal.
2. argv[argc] ist (zumindest der Visual C++ Dokumentation zufolge) == NULL. Also macht der Vergleich noch viel weniger Sinn, da das Programm im if-Körper ausgibt, es hätte eine Übereinstimmung mit einem [mm] $A_i$ [/mm] gegeben. Selbst wenn Punkt 1. nicht gelten würde, würde der if-Körper niemals aufgerufen werden. Ich denke, dort sollte so etwas stehen:
if(current == atoi(argv[argc-1]))
'atoi' konvertiert das Ganze zu einem Integer, und argc-1 ist ja gerade $v$. Jetzt passt das auch zu der Schleifenabbruchbedingung i < argc-1.
Damit es funktioniert, müßte wohl oben noch '#include <stdlib.h>' als Präprozessor-Direktive stehen, damit die Bibliothek, die atoi enthält, noch eingebunden wird.
Ansonsten scheint aber alles zu stimmen.
Grüße
Karl
|
|
|
|