Lineare Suche



  • Ich bereite mich derzeit auf Klausuren vor.

    In unserem Script haben wir verschiedene Suchalgorithmen durchgenommen, aber nur mit Pseudocode besprochen.

    Ich beschäftige mich gerade mit der linearen, oder auch sequentiellen Suche in C und versuche den Code zu verstehen.

    Könnt ihr mir sagen, was genau die Ausdrücke in Zeile 17 und 48 bedeuten?
    Also ich weiss, dass es sich beispielsweise in Zeile 48 um ein Char Array der Größe Max = 255 handelt. Was aber heisst das genau?

    // sequentielle_suche.cpp : 
    // Sequentielle Suche in einem Feld
    
    #include "stdafx.h"
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define MAX 255
    
    struct plz{
       char ort[MAX];
       unsigned int postleit;
    };
    
    struct plz postleitzahlen[100];
    
    static int N;
    
    /* Initialisieren */
    void init(void) {
       N = 0;
       postleitzahlen[N].postleit = 0;
       strcpy(postleitzahlen[N].ort, "init");
    }
    
    void einfuegen(unsigned int p, char *o) {
       postleitzahlen[++N].postleit = p;
       strcpy(postleitzahlen[N].ort, o);
    }
    
    void suche(unsigned int key) {
       int i;
       for(i=0; i<=N; i++)
       if(postleitzahlen[i].postleit == key) {
          printf("Der Ort zur Postleitzahl %d : %s\n",
             key,postleitzahlen[i].ort);
          return;
       }
       printf("Für den Wert %d konnte keine Postleitzahl "
              "gefunden werden!\n",key);
    }
    
    int main(void) {
       int wahl;
       unsigned int search, post;
       char new_ort[MAX];
       init();
       do {
          printf("-1- Postleitzahl suchen\n");
          printf("-2- Postleitzahl hinzufügen\n");
          printf("-3- Ende\n\n");
          printf("Ihre Wahl : ");
          scanf("%d",&wahl);
          getchar();
          if(wahl == 1) {
             printf("Welche Postleitzahl suchen Sie : ");
             scanf("%5d",&search);
             suche(search);
          }
          else if(wahl == 2) {
             printf("Neue Postleitzahl : ");
             scanf("%5u",&post);
             getchar();
             printf("Ort für PLZ %d : ",post);
             fgets(new_ort, MAX, stdin);
             einfuegen(post, strtok(new_ort, "\n") );
          }
       } while(wahl!=3);
       return EXIT_SUCCESS;
    }
    

    Edit: Ich habe die Werte mal im Code geändert, merke aber keine Änderungen im Programm.
    Danke im Voraus!



  • Es heisst genau as: leg ein plz- bzw. ein char-Array der Groesse 100 bzw. MAX an, nichts weiter. Was verstehst du daran nicht? (Wenn du nicht weisst, was ein Array ist, solltest du allerdings erstmal C lernen bevor du dich tiefer in die Materie wagst).



  • Oke das heisst, das Array hat 100 Felder. Und wieviele Daten kann jedes dieser Felder enthalten?



  • Sassylicious schrieb:

    Oke das heisst, das Array hat 100 Felder. Und wieviele Daten kann jedes dieser Felder enthalten?

    Jedes Feld beinhaltet hier genau ein Datum, das idR 256 verschiedene Werte annehmen kann.



  • Dankeschön 🙂



  • Ehrlich gesagt war ich zu voreilig und hatte mich nur auf das char-Array bezogen 🙂 Beim Postleitzahlen-Array hast du halt 100 verschiedene Instanzen vom Typ Postleitzahl.



  • Edit: Ich habe die Werte mal im Code geändert, merke aber keine Änderungen im Programm.
    Danke im Voraus!

    Also ich weiss, dass es sich beispielsweise in Zeile 48 um ein Char Array der Größe Max = 255 handelt. Was aber heisst das genau?

    Änder den Wert "MAX" mal auf 4 oder so. Dann kann dein array nur noch 4 Zeichen aufnehmen. Willst du also den Ort "Ulm" eingeben (3 Zeichen), funktioniert es. Bei "Hamburg" bräuchtest du aber 7 Zeichen. Das passt nicht. Da dein Programm die Größe des Eingabepuffers nicht mit der maximal zulässigen Größe (MAX) vergleicht, kannst du hier als Anwender einen Pufferüberlauf herbeiführen.



  • Ok komischerweise gehts so wie du beschrieben hast.
    Ich hatte das gestern ausprobiert und da gings nicht *grml*


Anmelden zum Antworten