Lineare Suche



  • Hallo,
    wir haben als Hausaufgabe die Aufgabe bekommen, eine Funktion der linearen Suche zu erstellen.
    Prinzip ist es, sagen zu können ob ein bestimmter Suchwert in einer Liste mit vielen Zahl drin ist.
    Die Ausgabe soll in etwa so aussehen

    1 ja, ist drin
    3 nein, ist nicht drin
    5 ja, ist drin
    .
    .
    .

    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    
    int lese_array(int array[]) {
        int i = 0;
    
        while (scanf("%d", &array[i]) == 1) {
            i++;
        }
        return i;
    }
    
    int lese_suchwert(int* value) {
        int i = 0;
    
        while (scanf("%d", &value[i]) == 1) {
            i++;
        }
        return i;
    }
    
    void linearsearch(int array[], int value[], int start, int end)  {
        int i = start;
        while(i<=end){
            if(array[i]==value){
                printf("&d ja\n", &value[i]);
            } else {
    
            printf("&d nein\n", &value[i]);
            }
            i = i+1;
        }
        return 0;
    }
    
    int main (int argc, char *argv[])
    {
        if (argc!=5){
            printf ("usage: %s suchen suchen.txt suchliste suchliste.txt\n", argv[0]);
            exit(2);
        }
    
        int array,suchwert,start,end,value;
        int hey = lese_array(array);
        int hey2 =  lese_suchwert(suchwert);
    
        for (int i=0; i<hey2 ; i++) {
            linearsearch(array,suchwert,start,end);
        }
        return 0;
    }
    

    Vorab, ich weiss, dass dies wahrscheinlich eine Katastrophe ist. Ich bin leider gerade nur in der theoretischen und technischen Informatik sehr gut. Beim Programmieren hatte ich leider keine Vorkenntnisse und muss mit C als erste Programmiersprache anfangen.

    Meine Frage ist jetzt, da nur die main-Funktion gegeben und laut Aufgabenblatt die linearsearch (mit pseudocode) nur zu implementieren war, ob mein Ansatz mit dem lese_array und lese_suchwert okay ist. Unten bei int hey, hey2 sollen nämlich das array (liste mit den gegebenen sortierten Zahlen) und die suchwerte (liste mit 10 suchwerten zum bsp) initialisiert werden.

    Könnte mir eventuell bitte jemand dabei helfen, da Ordnung rein zu bringen und das noch zu Ende zu bringen?

    Gruß



  • Nur weil eien Variable array heißt, ist sie noch lange kein Array.
    Du musst das Array vorher definieren (und auch die Größe festlegen).

    Einer der häufigsten Fehler in C ist, das Arraygrenzen überschritten werden, weil die Größe nicht beachtet wird.

    Was sagt die der Hilfetext in Zeile 45 zum Aufruf des Programms?

    Tipp:
    Setze den Warnlevel von deinem Compiler auf Maximum und beachte die Warnungen vom Compiler. Behandele sie wie Fehler und beseitige deren Ursache.
    Wenn du sie nicht verstehst, kannst du nachfragen.


  • Mod

    Komplett falsch, sowohl von der technischen Umsetzung als auch von der Logik her. Das compiliert ja nicht einmal*. Und wenn es compilieren würde, dann würde es sofort abstürzen.

    Was soll man da helfen, außer dir die Hausaufgaben zu machen? Ich kann nicht einmal die genaue Aufgabenstellung erahnen, das Programm scheint irgendwie eine Mischung aus zwei verschiedenen Programmen zu sein.

    Die allerdringendste Baustelle sind bei dir Arrays. Da hast du anscheinend überhaupt keinen Schimmer, aber sie sind grundlegend für die Aufgabenstellung. Das andere Drumherum sieht auch nicht gut aus, aber da kann man ja vielleicht noch mit dem Prüfer diskutieren, dass es vielleicht für die Aufgabe nicht wichtig ist, ob und wie aus den Dateien gelesen wird und ähnliches. Aber Arrays brauchst du hier ganz dringend. Sowohl grundlegende Nutzung als auch die Spezialbehandlung bei Übergabe an Funktionen. Das kann man dir in einem Forenbeitrag nicht beibringen. Lies die entsprechenden Kapitel in deinem Lehrbuch durch und versuch deinen Code wenigstens in dieser Hinsicht zu verbessern. Nein, besser noch mal neu schreiben, denn verbessern bringt hier nichts, fast jede Zeile ist falsch.

    da nur die main-Funktion gegeben

    Die hier gezeigte main-Funktion war vorgegeben? Glaube ich nicht. Mindestens die Zeilen 49-55 sind in deinem Stil geschrieben und komplett falsch.

    *: Ok, es compiliert doch. Aber mit ungefähr so vielen Warnungen wie das Programm Zeilen hat. C ist eben sehr tolerant und glaubt dem Programmierer jede Art von Unsinn, in der Annahme, der Programmierer würde sich auskennen.


Anmelden zum Antworten