Suche in einer Personenliste (HILFE)



  • Hallo, ich bin dabei ein Programm zu schreiben aber komme einfach nicht weiter.

    Die Aufgabenstellung lautet:

    Schreiben Sie ein C Programm, in dem am Anfang ein Datenfeld für bis zu 10 Datensätze für Studierenden-Ausweise angelegt wird. Das Datenfeld muss mit dem Struktur-Typ definiert werden, den Sie mit typedef zuvor deklariert haben. Einer dieser 10 Datensätze soll mit Ihren eigenen Daten, entsprechend Ihres FH-Ausweises, gefüllt werden (durch Initialisierung oder Zuweisung direkt im Programmtext, nicht durch Benutzereingaben!). Wenn Ihre Matrikelnummer mit der Ziffer 0 endet, dann sollen Ihre eigenen Daten im ersten Feldelement
    abgelegt werden (Index-Wert 0). Für die Matrikelnummer 123456 wären diese Daten im Feldelement mit dem Index-Wert 6 abzulegen. Generell soll Ihr Datensatz in dem Feldelement mit dem Index-Wert "letzte Ziffer" Ihrer Matrikelnummer abgelegt werden.Die anderen 9 Datensätze sollen zunächst als "leer" markiert werden, z.B. dadurch, dass die Matrikelnummer auf Null gesetzt wird.
    Die "leeren" Datensätze sollen im nächsten Schritt durch Benutzereingaben gefüllt werden. Mit einer Programm-Schleife soll 9-mal ein kompletter Datensatz einlesen und in dem Datenfeld für die Studierenden-Datensätze abgelegt werden. Ein eingelesener Datensatz kann in jedem beliebigen "leeren" Element des Datenfelds abgelegt werden. Danach darf das verwendete Feldelement natürlich nicht mehr als "leer" markiert sein!Für das Testen Ihres Programms müssen Sie sich 9 "fiktive Studierende" ausdenken und deren
    Ausweisdaten eingeben. Insgesamt enthält Ihre "Personendatenbank" danach 10 Einträge, inklusive des einen Eintrags für Sie selbst.
    Danach soll Ihr Programm die gesamte Liste der Datensätze durchsuchen und dabei zählen, wie viele der Personen im selben Jahr wie Sie selbst geboren wurden. Die ermittelte Anzahl und Ihr Geburtsjahr sollen ausgegeben werden. Diese Anzahl ist mindestens 1 (Ihr eigener Eintrag) und maximal 10. Den Text der Programmausgabe gestalten Sie selbst. Ihr Geburtsjahr und die Gesamtanzahl der Personen mit diesem Geburtsjahr muss in jedem Fall in der Ausgabe enthalten sein.

    Mein Programm:

    #include <stdio.h>
    #include <string.h>
    typedef struct {
    char vorname[50];        
    char nachname[50];
    int  matrikelnummer; 
    int b_day;
    int b_month;
    int b_year;
    } STUDI;
    int main (void) {
    STUDI ich;
    
    ich.matrikelnummer = 123456; 
    
    strcpy(ich.vorname, "Sara");
    strcpy(ich.nachname, "Mueller");
    
    ich.b_day=10;
    ich.b_month=06;
    ich.b_year= 1992;
    
      printf("Matrikelnummmer: %i, Vorname: %s, Nachname: %s, Geburtsdatum: %i.%i.%i\n \n",
       ich.matrikelnummer, ich.vorname, ich.nachname, ich.b_day, ich.b_month, ich.b_year);
      int i;
        /*Schleife*/
    
     for (i=0;i<=9;i=i+1) 
     {
    
    char vorname;        
    char nachname;
    int  matrikelnummer; 
    int b_day;
    int b_month;
    int b_year;
    
      scanf("%i",&matrikelnummer);
              scanf("%s",&vorname);
              scanf("%s",&nachname);
    scanf("%i",&b_day);
      scanf("%i",&b_month);
      scanf("%i",&b_year);
    
             if(b_year==ich.b_year)
               i=i+1;
           printf("Ermittelte Anzahl: %i \n",i);
    return 0;
           }
    }
    

    Ich hab schon programmiert, und mein Programm hat auch keine Fehler, aber ich komme nicht zum Ergebnis.
    Vielleicht kann sich ja einer mein Programm anschauen und weiterhelfen.
    Vielen Dank im Voraus.



  • Hallo,
    dein Programm kann man in der Form schlecht lesen. Bitte nimm zum darstellen von Code die Code-Tags. Einfach Code markieren und auf den C-Button unter den Smilies klicken. (Da du registriert bist, kannst du das auch nachträglich machen)

    Du hast allerdings einige Sachen in der Aufagbenstellung nicht beachtet:

    Aufgabe schrieb:

    ... in dem am Anfang ein Datenfeld für bis zu 10 Datensätze für Studierenden-Ausweise angelegt wird

    Aufgabe schrieb:

    Danach soll Ihr Programm die gesamte Liste der Datensätze durchsuchen und dabei zählen,

    Es ist auch ein bisschen ungeschickt in einer for-Schleife, mit der Schleifenvariable noch etwas anders zu zählen.



  • DirkB schrieb:

    Hallo,
    dein Programm kann man in der Form schlecht lesen. Bitte nimm zum darstellen von Code die Code-Tags. Einfach Code markieren und auf den C-Button unter den Smilies klicken. (Da du registriert bist, kannst du das auch nachträglich machen)

    Du hast allerdings einige Sachen in der Aufagbenstellung nicht beachtet:

    Aufgabe schrieb:

    ... in dem am Anfang ein Datenfeld für bis zu 10 Datensätze für Studierenden-Ausweise angelegt wird

    Aufgabe schrieb:

    Danach soll Ihr Programm die gesamte Liste der Datensätze durchsuchen und dabei zählen,

    Es ist auch ein bisschen ungeschickt in einer for-Schleife, mit der Schleifenvariable noch etwas anders zu zählen.

    So ich habe den Qode jetzt geändert, wie mache ich das aber mit den 10 Datensätzen?



  • Sara25 schrieb:

    So ich habe den Qode jetzt geändert, ...

    Sieht der in deinem Editor auch so zerpflückt aus?
    Dann schau mal: Einrückungsstil

    Sara25 schrieb:

    ... wie mache ich das aber mit den 10 Datensätzen?

    Mit einem Feld



  • Sara25 schrieb:

    Hallo, ich bin dabei ein Programm zu schreiben aber komme einfach nicht weiter.

    Die Aufgabenstellung lautet:

    Schreiben Sie ein C Programm, in dem am Anfang ein Datenfeld für bis zu 10 Datensätze für Studierenden-Ausweise angelegt wird. Das Datenfeld muss mit dem Struktur-Typ definiert werden, den Sie mit typedef zuvor deklariert haben. Einer dieser 10 Datensätze soll mit Ihren eigenen Daten, entsprechend Ihres FH-Ausweises, gefüllt werden (durch Initialisierung oder Zuweisung direkt im Programmtext, nicht durch Benutzereingaben!). Wenn Ihre Matrikelnummer mit der Ziffer 0 endet, dann sollen Ihre eigenen Daten im ersten Feldelement
    abgelegt werden (Index-Wert 0). Für die Matrikelnummer 123456 wären diese Daten im Feldelement mit dem Index-Wert 6 abzulegen. Generell soll Ihr Datensatz in dem Feldelement mit dem Index-Wert "letzte Ziffer" Ihrer Matrikelnummer abgelegt werden.Die anderen 9 Datensätze sollen zunächst als "leer" markiert werden, z.B. dadurch, dass die Matrikelnummer auf Null gesetzt wird.
    Die "leeren" Datensätze sollen im nächsten Schritt durch Benutzereingaben gefüllt werden. Mit einer Programm-Schleife soll 9-mal ein kompletter Datensatz einlesen und in dem Datenfeld für die Studierenden-Datensätze abgelegt werden. Ein eingelesener Datensatz kann in jedem beliebigen "leeren" Element des Datenfelds abgelegt werden. Danach darf das verwendete Feldelement natürlich nicht mehr als "leer" markiert sein!Für das Testen Ihres Programms müssen Sie sich 9 "fiktive Studierende" ausdenken und deren
    Ausweisdaten eingeben. Insgesamt enthält Ihre "Personendatenbank" danach 10 Einträge, inklusive des einen Eintrags für Sie selbst.
    Danach soll Ihr Programm die gesamte Liste der Datensätze durchsuchen und dabei zählen, wie viele der Personen im selben Jahr wie Sie selbst geboren wurden. Die ermittelte Anzahl und Ihr Geburtsjahr sollen ausgegeben werden. Diese Anzahl ist mindestens 1 (Ihr eigener Eintrag) und maximal 10. Den Text der Programmausgabe gestalten Sie selbst. Ihr Geburtsjahr und die Gesamtanzahl der Personen mit diesem Geburtsjahr muss in jedem Fall in der Ausgabe enthalten sein.

    Mein Programm:

    #include <stdio.h>
    #include <string.h>
    typedef struct {
    char vorname[50];        
    char nachname[50];
    int  matrikelnummer; 
    int b_day;
    int b_month;
    int b_year;
    } STUDI;
    int main (void) {
    STUDI ich;
    
    ich.matrikelnummer = 123456; 
      
    strcpy(ich.vorname, "Sara");
    strcpy(ich.nachname, "Mueller");
      
    ich.b_day=10;
    ich.b_month=06;
    ich.b_year= 1992;
      
      
      
      
      printf("Matrikelnummmer: %i, Vorname: %s, Nachname: %s, Geburtsdatum: %i.%i.%i\n \n",
       ich.matrikelnummer, ich.vorname, ich.nachname, ich.b_day, ich.b_month, ich.b_year);
      int i;
        /*Schleife*/
    
      
     for (i=0;i<=9;i=i+1) 
     {
           
    char vorname;        
    char nachname;
    int  matrikelnummer; 
    int b_day;
    int b_month;
    int b_year;
      
      scanf("%i",&matrikelnummer);
              scanf("%s",&vorname);
              scanf("%s",&nachname);
    scanf("%i",&b_day);
      scanf("%i",&b_month);
      scanf("%i",&b_year);
           
      
             if(b_year==ich.b_year)
               i=i+1;
           printf("Ermittelte Anzahl: %i \n",i);
    return 0;
           }
    }
    

    Ich hab schon programmiert, und mein Programm hat auch keine Fehler, aber ich komme nicht zum Ergebnis.
    Vielleicht kann sich ja einer mein Programm anschauen und weiterhelfen.
    Vielen Dank im Voraus.

    Ist es so richtig mit den 10 Datensätzen?

    #include <stdio.h>
    #include <string.h>
    #define ANZPERSONEN 10
    
    typedef struct {
    char vorname[50];        
    char nachname[50];
    int  matrikelnummer; 
    int b_day;
    int b_month;
    int b_year;
    } STUDI;
    int main (void) {
    STUDI ich;
    
    ich.matrikelnummer = 123456; 
    
    strcpy(ich.vorname, "Sara");
    strcpy(ich.nachname, "Mueller");
    
    ich.b_day=10;
    ich.b_month=06;
    ich.b_year= 1992;
    
      printf("Matrikelnummmer: %i, Vorname: %s, Nachname: %s, Geburtsdatum: %i.%i.%i\n \n",
       ich.matrikelnummer, ich.vorname, ich.nachname, ich.b_day, ich.b_month, ich.b_year);
      int i;
        /*Schleife*/
    
     for (i=0;i<ANZPERSONEN;i=i++) 
     {
    
    char vorname;        
    char nachname;
    int  matrikelnummer; 
    int b_day;
    int b_month;
    int b_year;
    
      scanf("%i",&matrikelnummer);
              scanf("%s",&vorname);
              scanf("%s",&nachname);
    scanf("%i",&b_day);
      scanf("%i",&b_month);
      scanf("%i",&b_year);
    
             if(b_year==ich.b_year)
               i=i+1;
           printf("Ermittelte Anzahl: %i \n",i);
    return 0;
           }
    }
    


  • DirkB schrieb:

    Sara25 schrieb:

    So ich habe den Qode jetzt geändert, ...

    Sieht der in deinem Editor auch so zerpflückt aus?
    Dann schau mal: Einrückungsstil

    Sara25 schrieb:

    ... wie mache ich das aber mit den 10 Datensätzen?

    Mit einem Feld

    so?

    #include <stdio.h> 
    #include <string.h> 
    #define ANZPERSONEN 10 
    
    typedef struct { 
    char vorname[50];         
    char nachname[50]; 
    int  matrikelnummer; 
    int b_day; 
    int b_month; 
    int b_year; 
    } STUDI; 
    int main (void) { 
    STUDI ich; 
    
    ich.matrikelnummer = 123456; 
    
    strcpy(ich.vorname, "Sara"); 
    strcpy(ich.nachname, "Mueller"); 
    
    ich.b_day=10; 
    ich.b_month=06; 
    ich.b_year= 1992; 
    
      printf("Matrikelnummmer: %i, Vorname: %s, Nachname: %s, Geburtsdatum: %i.%i.%i\n \n", 
       ich.matrikelnummer, ich.vorname, ich.nachname, ich.b_day, ich.b_month, ich.b_year); 
      int i; 
        /*Schleife*/ 
    
     for (i=0;i<ANZPERSONEN;i=i++) 
     { 
    
    char vorname;         
    char nachname; 
    int  matrikelnummer; 
    int b_day; 
    int b_month; 
    int b_year; 
    
      scanf("%i",&matrikelnummer); 
              scanf("%s",&vorname); 
              scanf("%s",&nachname); 
    scanf("%i",&b_day); 
      scanf("%i",&b_month); 
      scanf("%i",&b_year); 
    
             if(b_year==ich.b_year) 
               i=i+1; 
           printf("Ermittelte Anzahl: %i \n",i); 
    return 0; 
           } 
    }
    


  • Nein.
    Du hast doch nur die 10 gegen ein Makro (ANZPERSONEN) eingetauscht.

    Du musst das so schaffen, das du erst alle Daten einliest und danach dann suchst.
    Du musst alle Werte zwischenspeichern.

    vorname und nachname in deiner struct sind Arrays.

    Nebenbei passt das überhaupt nicht zusammen:

    char vorname;  // Platz für ein Zeichen     
      char nachname; // Ein einziges Zeichen, nicht mehr.
    ...
      scanf("%s",&vorname);  // %s erwartet einen Zeiger auf einen Datenbereich, der genug Speicher vorhält.
      scanf("%s",&nachname); // Ein Zeichen ist da nicht genug. Das  reicht gerade für das Endezeichen.
    

Anmelden zum Antworten