Ajutor cu un program in C


  1. #1
    Newcomer R.M.F.'s Avatar R.M.F. reprezinta o cantitate neglijabila
    Data de inscriere
    03-08-2006
    Sex
    M
    Mesaje
    37
    Mesaje bazar
    82
    Putere Reputatie
    36
    Reputatie
    10
    Puncte CF
    0.5

    Ajutor cu un program in C

    Am de facut un proiect cu urmatoarea problema in C , daca ma puteti ajuta si pe mine:

    Se se imprementeze o lista dublu inlantuita ale carei elemente sa fie atudentii undei facultati. Programul va contine functii pentru:

    - crearea listei vide;
    - afisarea elementelor listei;
    - cautarea unui student in lista;
    - adaugarea unui student in lista(la incaput, la sfarsit, dupa un anumit nod specificat);
    - stergerea unui anumit student din lista;
    - salvarea listei de studenti intr-un fisier pe hard-disk;
    - citirea listei de studenti din fisier in memorie.

    Evident ca la facultatea nu am facut deloc liste dublu inlantuite doar ne-a dat un elemplu in cursc care evident nu merge in fine romania... sau poate gasiti voi ce are exemplul si reusesc eu sa fac proiectul dupa modelul asta daca reusiti sa il depanati.

    Iata exemplul din curs:

    Cod:
    #include<stdio.h>
    #include<alloc.h>
    #include<conio.h>
    #include<string.h>
    #include<process.h>
    
    typedef struct fotbalist
      {
      char* nume;
      char* pozitie;
      int varsta;
      } Fotbalist;
    
    typedef struct nod
      {
      Fotbalist data;
      struct nod* urm;
      struct nod* prec;
      } Nod;
    
      Nod* primul;
      void cit_fotbal(Fotbalist* f)
        {
    
        char* temp=(char*)malloc(sizeof(char)*100+1);
        flushall();
    
        printf("\nNume:");
          scanf("%s",temp);
          f->nume=(char*)malloc(sizeof(char)*strlen(temp)+1);
          strcpy(f->nume,temp);
    
        printf("\nPozitie:");
          scanf("%s",temp);
          f->pozitie=(char*)malloc(sizeof(char)*strlen(temp)+1);
          strcpy(f->pozitie,temp);
    
        printf("\nVarsta:");
        scanf("%d",&f->varsta);
    
        }
    
      void adauga_coada(Nod** p_prim,Nod** p_ultim,Fotbalist f)
        {
    
        Nod* p=*p_prim;
        Nod* u=*p_ultim;
        Nod* q=(nod*)malloc(sizeof(nod));
        q->data=f;
        q->urm=NULL;
    
        if(p==NULL)
          {
    
          p=q;
    
          }
    
        q->prec=u;
        u->urm=q;
        u=q;
        *p_prim=p;
        *p_ultim=u;
    
        }
    
      void creare_list(Nod** p_prim,Nod** p_ultim)
        {
    
        Fotbalist f;
         char c;
         *p_prim=*p_ultim=NULL;
    
         do{
    
           cit_fotbal(&f);
           adauga_coada(p_prim, p_ultim,f);
           printf("Continuati? (D/N):");
           flushall();
           c=getchar();
    
           } while(c=='d'|| c=='D');
    
        }
    
    
      void afis_fotb(Fotbalist f)
        {
    
        printf("\n Fotbalistul %s joaca pe pozitia %s si are varsta %d ani",f.nume,f.pozitie,f.varsta);
    
        }
    
    
      void afis_lista(Nod *incep)
        {
    
        Nod* p;
        p=incep;
        while(p!=NULL)
          {
    
          afis_fotb(p->data);
          p=p->urm;
    
          }
    
        }
    
      /* Funtia care cauta un fotbalist returneaza adresa nodului
      unde se afla fotbalistul daca a fost gasit.
       NULL daca nu a fost gasit */
    
       Nod* cauta_fotb(Nod* prim,Fotbalist f)
         {
    
         Nod *p;
         p=prim;
         while(p&&strcmp(p->data.nume,f.nume)!=0)
           {
    
           p=p->urm;
    
           }
    
           return p;
         }
    
       /* sterge fotbalistul f in dilista */
    
       void sterge_fotb(Nod** p_prim, Nod** p_ultim, Fotbalist f)
         {
    
         Nod* p=*p_prim;
         Nod* u=*p_ultim;
         Nod* q;
         q=cauta_fotb(p,f);
    
         if(q){
    
    	  if(p==u&&p==q)
    	    {
    	  //avem un singur elemnt in lista
    	  p=u=NULL;
    
    	    }
    	      else {
    
    		   if(p==q){
    			   //se sterge primul elem din lista
    			   p->urm->prec=NULL;
    			   p=p->urm;
    
    			   }
    			     else {
    
    				   if(u==q){
    					   //se sterge ultimul elem din lista
    					   u->prec->urm=NULL;
    					   u=u->prec;
    
    					   }
    					     else {
    						  //se sterge un nod interior
    						  q->prec->urm=q->urm;
    						  q->urm->prec=q->prec;
    
    						  }
    
    				  }
    
    		   }
    
    	  free(q);
    	  *p_prim=p;
    	  *p_ultim=u;
    	  printf("Fotbalistul a fost sters.");
    
    	  }
    	    else {
    
    		 printf("Fotbalistul nu a fost gasit.");
    
    		 }
    
         }
    
    
       /* adauga jucator dupa un anumit fotbalist */
       void adaug_fotb(Nod**p_prim,Nod**p_ultim, Nod* p_nod, Fotbalist f)
         {
    
         Nod*u=*p_ultim;
         Nod*q;
         /* alocam spatiu de mem pt. a retine nodul care se adauga */
         q=(Nod*)malloc(sizeof(Nod));
         q->data=f;
         q->prec=p_nod;
         q->urm=p_nod->urm;
    
         if(p_nod==u){
    		 //se adauga dupa ultimul nod din lista
    
    		 u=q;
    
    		 } else {
    
    			p_nod->urm->prec=q;
    
    			}
         p_nod->urm=q;
         *p_ultim=u;
    
         }
    
    
       /* adaiga un jucator la inceputul listei */
       void adaug_cap(Nod**p_prim,Nod**p_ultimm,Fotbalist f)
         {
    
         Nod*p=*p_prim;
         Nod*u=*p_ultim;
         Nod*q;
         /* alocam spatiu de mem pt a retine nodul care se adauga */
         q=(Nod*)malloc(sizeof(Nod));
         q->data=f;
         q->prec=NULL;
    
         if(p==NULL){
    		// lista este vida si se adauga primul elem
    
    		u=q;
    
    		}
         q->urm=p;
         p->prec=q;
         p=q;
    
         *p_prim=p;
         *p_ultim-u;
    
         }
    
    
       void main()
         {
    
         Nod* prim;
         Nod* ultim;
         Nod* p;
         char c;
         Fotbalist f;
         prim=ultim=NULL;
    
         do{
    
    	 clrscr();
           printf("\n1. Creare echipa fotbal\n");
           printf("\n2. Adaugare jucator dupa un anumit fotbalist \n");
           printf("\n3. Adaugare jucator la inceputul listei \n");
           printf("\n4. Cauta jucator \n");
           printf("\n5. Sterge jucator \n");
           printf("\n6. Iesire \n");
           flushall();
           c=getchar();
           switch(c)
    	 {
    
    	 case '1': creare_list(&prim,&ultim);
    		   afis_lista(prim);
    		   break;
    
    	 case '2': printf("\nDati numele jucatorului dupa care se v-a adauga:");
    		   flushall;
    		   scanf("%s",f.nume);
    		   p=cauta_fotb(prim,f);
    
    		    if(p){
    
    			 printf("\nJucatorul %s a fost gasit",f.nume);
    			 afis_fotb(p->data);
    			 printf("\nDati datele pt jucatorul care se adauga");
    			 cit_fotbal(&f);
    			 adaug_fotb(&prim,&ultim,p,f);
    			 afis_lista(prim);
    
    			 } else {
    
    				printf("\nJucatorul %s nu a fost gasit.");
    
    				}
    		   break;
    
    	 case '3': printf("\nDati datele pt jucatorul care se adauga.");
    		   cit_fotbal(&f);
    		   adaug_cap(&prim,&ultim,f);
    		   afis_lista(prim);
    		   break;
    
    	 case '4': printf("/nDati numele jucatotului cautat:");
    		   flushall();
    		   scanf("%s",f.nume);
    
    		    if(cauta_fotb(prim,f)){
    
    					  printf("\nuUcatorul %s a fost gasit",f.nume);
    
    					  } else {
    
    						 printf("\nJucatorul %s nu a fost gasit",f.nume);
    
    						 }
    		   break;
    
    	 case '5': printf("\nDati numele jucatorului:");
    		   flushall();
    		   scanf("%s",f.nume);
    		   sterge_fotb(&prim,&ultim,f);
    		   afis_lista(prim);
    		   break;
    
    	 }
    
           getch();
    
           } while(C!=6);
    
         }

  2. #2
    Newcomer dragos_cv9 reprezinta o cantitate neglijabila
    Data de inscriere
    06-05-2006
    Locaţie
    craiova
    Varsta
    42
    Sex
    M
    Mesaje
    34
    Mesaje bazar
    66
    Putere Reputatie
    37
    Reputatie
    10
    Puncte CF
    15.0

    Te mai intereseaza?

    Salut!
    Nr. meu e 0743. 23. 02. 09. Suna-ma si incerc sa te ajut
    Vrei mai putine reclame? Inregistreaza-te sau logheaza-te

Google+

Cautati logo-ul CraiovaForum?

Iata cateva variante: