Statische Liste



  • Servus,
    muss diese Aufgabe für die Uni lösen.

    Telefonliste (statisch)

    Schreiben Sie ein Programm, das eine Telefonliste verwaltet. Für jeden Teilnehmer soll der Name, der Vorname und die Telefonnummer eingetragen werden. Die Datensätze werden in einem Feld gespeichert.
    Mit Hilfe eines Menüs sollen folgende Funktionen gewählt werden können:

    a) Eingabe falls noch Platz in der Liste ist, werden Name, Vorname, Telefonnummer eingegeben.
    b) Ausgabe auf dem Bildschirm wird eine Tabelle der Daten ausgegeben Nr. Name Vorname Tel-Nr.
    c) loeschen Die Nummer des zu löschenden Datensatzes wird abgefragt. Die übrigen Datensätze müssen so verschoben werden, dass im Feld keine Lücke entsteht.

    a) und b) sind kein Problem, doch ich verstehe ich nicht, wie ich bei c) vorgehen muss.
    Bitte um Hilfe
    Cnewb93



  • Ist mit "Feld" ein Array gemeint?


  • Mod

    Wenn die Reihenfolge egal ist" Verschiebe den letzten Datensatz an die Stelle des zu löschenden Datensatzes.
    Wenn die Reihenfolge erhalten bleiben muss: Kopiere alle folgenden Datensätze um eine Position nach vorne.



  • Den Teil haben wir vorgegeben bekommen:

    struct eintrag 
    {
    	char name[40];
    	char vorname[20];
    	char nummer[20];
    } telefonliste[20];
    

    Ist mit "Feld" ein Array gemeint?

    Denke das ist auch mit Feld gemeint.



  • SeppJ schrieb:

    Wenn die Reihenfolge erhalten bleiben muss: Kopiere alle folgenden Datensätze um eine Position nach vorne.

    Die Reihenfolge soll eingehalten werden.
    Beispiel:

    Nr. Name Vorname Tel-Nr
    1    a      aa     123
    2    b      bb     456
    3    c      cc     789
    4    d      dd     555
    

    Wenn ich jetzt Datensatz Nr. 3 lösche (wie funktioniert das Löschen eigentlich?), dann verschiebt sich 4 an die Stelle von 3, aber die andern Datensätze müssen doch an ihrer Position bleiben!?


  • Mod

    Schneid dir mal ein paar Zettelchen aus Papier aus, schreib ein paar Adressen drauf und versuch das mal auf dem Schreibtisch nachzuvollziehen.



  • Ich kapiers leider immer noch nicht.



  • Cnewb93 schrieb:

    wie funktioniert das Löschen eigentlich?

    Du kannst den Eintrag als ungültig kennzeichnen
    - in dem du dafür ein extra Flag hast oder
    - alles oder ein Element mit ungültigen Werten überschreibst.
    - oder du gibst die Länge der Liste an. Bei Länge 0 ist sie leer.

    Cnewb93 schrieb:

    dann verschiebt sich 4 an die Stelle von 3, aber die andern Datensätze müssen doch an ihrer Position bleiben!?

    Genau das meinte SeppJ auch mit:
    "Wenn die Reihenfolge erhalten bleiben muss: Kopiere alle folgenden Datensätze um eine Position nach vorne."
    also 4 auf 3, 5 auf 4 ach hast du ja gar nicht mehr



  • Cnewb93 schrieb:

    Ich kapiers leider immer noch nicht.

    Wo ist denn Dein Problem? Das ist doch nicht so schwer.

    Du hast doch aus der Aufgabe folgende Informationen:

    Ein Feld mit maximal 20 Adressdatensätze. Das ist simpel, denn das ist schon vorgegeben:

    struct eintrag 
    {
        char name[40];
        char vorname[20];
        char nummer[20];
    } telefonliste[20];
    

    Was brauchst Du noch:

    Du musst wissen, wieviele Karteikarten gefüllt sind:

    Das ist auch sehr einfach.

    size_t count=0;
    

    Am Anfang ist ein leerer Karteikasten also hast Du 0 gefüllte Karteikarten.

    Du musst wissen, welche Karteikarten gefüllt sind:

    Ist auch nicht schwer. Die Aufgabe fordert, daß alle Karten lückenlos gefüllt sind, also alle Karten mit dem Index

    0 <= index < count

    Dafür brauchen wir keine Variable.

    Wie fügst Du nun einen neuen Datensatz ein? Du nimmst Deine Variable count als index, schreibst dort die Werte rein und erhöhst dann Zähler um eins:

    telefonliste[count++]=eingabe;
    

    Wie löscht Du nun einen Wert? Du verschiebst einfach ab dem zu löschenden Wert alle nachfolgenden Datensätze um eine Position nach vorne und veringerst Deinen Zähler. Denn letzten Wert brauchst Du nicht zu überschreiben, da Werte außerhalb Deines gültigen Bereichs Dich nicht interessieren:

    size_t i, del;
    del = .... // Was auch immer
    for( i=del+1; i<count; i++ )
        telefonliste[i-1]=telefonliste[i];
    count--;
    

    Worum du dich jetzt noch kümmern musst, ist dafür zu sorgen, daß Deine Inidizes immer einen gültigen Wert haben.

    mfg Martin



  • Cnewb93 schrieb:

    Nr. Name Vorname Tel-Nr
    1    a      aa     123
    2    b      bb     456
    3    c      cc     789
    4    d      dd     555
    

    Wenn ich jetzt Datensatz Nr. 3 lösche (wie funktioniert das Löschen eigentlich?), dann verschiebt sich 4 an die Stelle von 3, aber die andern Datensätze müssen doch an ihrer Position bleiben!?

    Ja, 1+2 bleiben da wo sie sind, Nr.4 verschiebt sich um eine Elementgröße 'nach vorn', überschreibt damit Nr.3.
    Dann musst du bloß noch den irgendwo gemerkten Arraygrößenzähler mit 1 subtrahieren.



  • 2 Übung: Statische Telefonliste
    Entwickeln Sie ein C++-Programm, das eine Telefonliste verwaltet. Für jeden Teilnehmer soll der Namen, der Vorname und die Telefonnummer eingetragen werden.
    Schreiben Sie dazu eine Klasse Telefonliste die wiederum ein Array vom Typ
    Teilnehmer enthält.
    1. Die Klasse Telefonliste soll die folgenden Methoden bereitstellen:
    void neueTeilnehmer(string name, string vorname ,
    string telefonnr);
    void ausgeben();
    void loescheTeilnehmer(string telefonnr);
    2. Schreiben Sie die main()-Funktion die die Klasse Telefonliste erstellt und
    die Methoden von dieser aufru. Die Ausgabe auf dem Bildschirm könnte wie
    folgt aussehen:
    Bitte wählen Sie:
    1 - neuen Teilnehmer eingeben
    2 - Telefonliste ausgeben
    3 - Teilnehmer löschen
    4 - Programm beenden
    Auswahl:



  • kedji22 schrieb:

    2 Übung: Statische Telefonliste
    ...

    hier die Lösung:

    #include <stdio.h>
    
    int main( void )
    {
        puts( "kedji22 ist stinkendfaul" );
    
        return 0;
    }
    


  • kedji22 schrieb:

    Entwickeln Sie ein C++-Programm

    tschüühüüüßßß !!!
    http://www.c-plusplus.net/forum/f15


Log in to reply