Torna indietro   Hardware Upgrade Forum > Software > Programmazione

realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-05-2009, 10:04   #1
ivan p
Member
 
Iscritto dal: Jun 2008
Messaggi: 58
[Linguaggio C] Aiuto interpretazione lista

Salve, studio ingegneria informatica e ho qualche problema ad interpretare il codice di un esempio di lista del mio prof; Utilizzo il devc++. Sarò grato a tutti coloro che potranno aiutarmi.

Quello che non capisco è il funzionamento della funzione Full quando viene richiamata nel Main.

#include <stdio.h>
#include <malloc.h>
#define LISTAVUOTA NULL

typedef int tipobase;

typedef short boolean;

typedef struct nodo {
tipobase info;
struct nodo *next;
} *list;

typedef list position;

position End(list l)
{
if (l==LISTAVUOTA) return(LISTAVUOTA);
while (l->next!=LISTAVUOTA)
l=l->next;
return(l);
}

position First(list l)
{
return(LISTAVUOTA); /*se la lista è vuota torna END(l) */
}

void MakeNull(list *l)
{
*l=LISTAVUOTA;
}

boolean Empty(list l)
{
return(l==LISTAVUOTA);
}

boolean Full(list l)
{
return(0);
}

void Insert(list *l, position p, tipobase x)
{
struct nodo * temp;

temp=(struct nodo *) malloc(sizeof(struct nodo));
temp->info=x;
if (p==LISTAVUOTA) {
temp->next=*l;
*l=temp;
} else {
temp->next=p->next;
p->next=temp;
}
}

void Delete(list *l, position p)
{
struct nodo * tmp;

if (!Empty(*l) && p!=End(*l)) {
if (p==LISTAVUOTA) {
tmp=(*l)->next;
free (*l);
*l=tmp;
} else {
tmp=p->next;
p->next=tmp->next;
free (tmp);
}
}
}

position Locate(list l, tipobase x)
{

if (!Empty(l)) {
if (l->info==x) return(LISTAVUOTA);
while (l->next!=LISTAVUOTA) {
if (l->next->info==x) return(l);
l=l->next;
}
return(l);
}
}

tipobase Retrieve(list l, position p)
{
if (!Empty(l) && p!=End(l)) {
if (p==LISTAVUOTA) return(l->info);
else return(p->next->info);
}
}

position Next(list l, position p)
{
if (p!=End(l)) {
if (p==LISTAVUOTA) return(l);
else return(p->next);
}
}

void visita(list l)
{
position p,u;
tipobase x;
int i=0;

p=First(l);
u=End(l);
while (p!=u) {
x=Retrieve(l,p);
printf("L'elemento di posizione %d e' %d \n",++i,x);
p=Next(l,p);
}
}

void insord(list *l, tipobase x)
{
position p,u;
tipobase tmp;

if (Empty(*l)) Insert(l,First(*l),x);
else {
p=First(*l);
u=End(*l);
while (p!=u) {
tmp=Retrieve(*l,p);
if (tmp<x)
p=Next(*l,p);
else break;
}
Insert(l,p,x);
}
}

main()
{
list lt; //Variabile locale Lista
int s;
tipobase elem;
position pos;

MakeNull(&lt);

do {
printf("Menu di Operazioni \n");
printf("1-Inserimento Ordinato \n");
printf("2-Ricerca \n");
printf("3-Cancellazione \n");
printf("4-Visita Lista \n");
printf("5-Fine \n");
printf("Inserisci la scelta ---> ");
scanf("%d",&s);
fflush(stdin);
switch(s) {

case 1 : {
if (Full(lt)) printf("Lista piena \n");
else {
printf("Inserisci l'Elemento da Inserire ");
scanf("%d",&elem);
fflush(stdin);
insord(&lt,elem);
}
break;
}
case 2 : {
if (Empty(lt)) printf("Lista Vuota \n");
else {
printf("Inserisci l'Elemento da Ricercare \n");
scanf("%d",&elem);
fflush(stdin);
pos=Locate(lt,elem);
if (pos!=End(lt))
printf("Elemento Trovato \n");
else printf("Elemento non Trovato \n");
}
break;
}
case 3 : {
if (Empty(lt)) printf("Lista Vuota \n");
else {
printf("Inserisci l'Elemento da Cancellare \n");
scanf("%d",&elem);
fflush(stdin);
pos=Locate(lt,elem);
if (pos!=End(lt)) {
Delete(&lt,pos);
printf("Elemento Cancellato \n");
}
else printf("Elemento non Trovato \n");
}
break;
}
case 4 : {
if (Empty(lt)) printf("Lista Vuota \n");
else visita(lt);
break;
}
}
} while (s<5);
}
ivan p è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2009, 10:08   #2
ivan p
Member
 
Iscritto dal: Jun 2008
Messaggi: 58
Scusate mi sono accorto che incollando il codice la formattazione del testo è andata a farsi benedire, spero possiate aiutarmi comunque.

Ultima modifica di ivan p : 30-05-2009 alle 10:28.
ivan p è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2009, 12:14   #3
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da ivan p Guarda i messaggi
Salve, studio ingegneria informatica e ho qualche problema ad interpretare il codice di un esempio di lista del mio prof; Utilizzo il devc++. Sarò grato a tutti coloro che potranno aiutarmi.

Quello che non capisco è il funzionamento della funzione Full quando viene richiamata nel Main.
Codice:
#include <stdio.h> 
#include <malloc.h> 
#define LISTAVUOTA NULL 

typedef int tipobase; 

typedef short boolean; 

typedef struct nodo { 
     tipobase info; 
     struct nodo *next; 
} *list; 

typedef list position; 

position End(list l) 
{ 
 if (l==LISTAVUOTA) return(LISTAVUOTA); 
 while (l->next!=LISTAVUOTA) 
               l=l->next; 
 return(l); 
} 

position First(list l) 
{ 
  return(LISTAVUOTA); /*se la lista è vuota torna END(l) */ 
} 

void MakeNull(list *l) 
{ 
  *l=LISTAVUOTA; 
} 

boolean Empty(list l) 
{ 
 return(l==LISTAVUOTA); 
} 

boolean Full(list l) 
{ 
 return(0); 
} 

void Insert(list *l, position p, tipobase x) 
{ 
  struct nodo * temp; 

  temp=(struct nodo *) malloc(sizeof(struct nodo)); 
   temp->info=x; 
    if (p==LISTAVUOTA) { 
      temp->next=*l; 
     *l=temp; 
    } else { 
           temp->next=p->next; 
           p->next=temp; 
    } 
 } 

void Delete(list *l, position p) 
 { 
    struct nodo * tmp; 

    if (!Empty(*l) && p!=End(*l)) { 
           if (p==LISTAVUOTA) { 
                     tmp=(*l)->next; 
                     free (*l); 
                     *l=tmp; 
           } else { 
                     tmp=p->next; 
                     p->next=tmp->next; 
                     free (tmp); 
           } 
    } 
 } 

position Locate(list l, tipobase x) 
 { 

 if (!Empty(l)) { 
           if (l->info==x) return(LISTAVUOTA); 
           while (l->next!=LISTAVUOTA) { 
                     if (l->next->info==x) return(l); 
                     l=l->next; 
           } 
           return(l); 
 } 
 } 

tipobase Retrieve(list l, position p) 
 { 
    if (!Empty(l) && p!=End(l)) { 
           if (p==LISTAVUOTA) return(l->info); 
           else return(p->next->info); 
    } 
 } 

position Next(list l, position p) 
 { 
 if (p!=End(l)) { 
     if (p==LISTAVUOTA) return(l); 
     else return(p->next); 
  } 
 } 

void visita(list l) 
{ 
 position p,u; 
  tipobase x; 
 int i=0; 

 p=First(l); 
 u=End(l); 
 while (p!=u) { 
    x=Retrieve(l,p); 
   printf("L'elemento di posizione %d e' %d \n",++i,x); 
   p=Next(l,p); 
 } 
} 

void insord(list *l, tipobase x) 
{ 
   position p,u; 
   tipobase tmp; 

   if (Empty(*l)) Insert(l,First(*l),x); 
   else { 
          p=First(*l); 
          u=End(*l); 
          while (p!=u) { 
                  tmp=Retrieve(*l,p); 
                   if (tmp<x) 
                                  p=Next(*l,p); 
                   else break; 
          } 
          Insert(l,p,x); 
   } 
} 

main() 
{ 
    list lt;  //Variabile locale Lista 
    int s; 
    tipobase elem; 
   position pos; 

   MakeNull(&lt); 

    do { 
         printf("Menu di Operazioni \n"); 
         printf("1-Inserimento Ordinato \n"); 
         printf("2-Ricerca \n"); 
         printf("3-Cancellazione \n"); 
         printf("4-Visita Lista \n"); 
         printf("5-Fine \n"); 
         printf("Inserisci la scelta ---> "); 
         scanf("%d",&s); 
         fflush(stdin); 
         switch(s) { 

         case 1 : { 
                 if (Full(lt)) printf("Lista piena \n"); 
                 else { 
                     printf("Inserisci l'Elemento da Inserire "); 
                     scanf("%d",&elem); 
                     fflush(stdin); 
                     insord(&lt,elem); 
              } 
              break; 
       } 
       case 2 : { 
              if (Empty(lt)) printf("Lista Vuota \n"); 
              else { 
                     printf("Inserisci l'Elemento da Ricercare \n"); 
                     scanf("%d",&elem); 
                     fflush(stdin); 
                     pos=Locate(lt,elem); 
                     if (pos!=End(lt)) 
                            printf("Elemento Trovato \n"); 
                     else printf("Elemento non Trovato \n"); 
              } 
              break; 
       } 
       case 3 : { 
              if (Empty(lt)) printf("Lista Vuota \n"); 
              else { 
                     printf("Inserisci l'Elemento da Cancellare \n"); 
                     scanf("%d",&elem); 
                     fflush(stdin); 
                     pos=Locate(lt,elem); 
                     if (pos!=End(lt)) { 
                            Delete(&lt,pos); 
                            printf("Elemento Cancellato \n"); 
                     } 
                     else printf("Elemento non Trovato \n"); 
              } 
              break; 
       } 
       case 4 : { 
              if (Empty(lt)) printf("Lista Vuota \n"); 
              else visita(lt); 
              break; 
       } 
       } 
   } while (s<5); 
}
usa il tag code la prossima volta
secondo me c'è qualcosa di sbagliato, li passa un argomento e non lo usa. inoltre non può ritornare sempre zero altrimenti quell'if-else è inutile.

Ultima modifica di ndakota : 30-05-2009 alle 12:19.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2009, 12:53   #4
ivan p
Member
 
Iscritto dal: Jun 2008
Messaggi: 58
Quale argomento non usa? Per quello che ho capito quando il main esamina la condizione la funzione restituisce sempre che la lista non è mai piena e questo non sarebbe corretto perchè può riempirsi. Giusto?
ivan p è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2009, 12:56   #5
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4908
Se la dimensione della lista non è limitata come fa a diventare piena?
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2009, 13:02   #6
ivan p
Member
 
Iscritto dal: Jun 2008
Messaggi: 58
Giusto.
ivan p è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2009, 13:03   #7
ivan p
Member
 
Iscritto dal: Jun 2008
Messaggi: 58
Altro dubbio, perchè Firtst restituisce sempre NULL? Perchè anche Empty restituisce NULL?

Ultima modifica di ivan p : 30-05-2009 alle 13:15.
ivan p è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2009, 14:02   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
Perché ritorna LISTAVUOTA che hai definito all'inizio come NULL.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2009, 15:40   #9
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da ivan p Guarda i messaggi
Quale argomento non usa? Per quello che ho capito quando il main esamina la condizione la funzione restituisce sempre che la lista non è mai piena e questo non sarebbe corretto perchè può riempirsi. Giusto?
quello della funzione Full()
ndakota è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Tim Cook riceverà il Robert N. No...
Meta ha annunciato Petal, il primo cavo ...
Resident Evil Veronica, l'uscita potrebb...
Audi porta in tribunale...AUDI: causa co...
Apple smette di firmare iOS 26.6.2: chi ...
Rallentare l'IA per sicurezza o per tene...
X informerà gli utenti quando i g...
MediaTek presenta Dimensity CX C10 Max, ...
iPhone 18 Pro, alcuni utenti segnalano p...
ChatGPT ti segue anche fuori dalla chat:...
Destiny 2 non è finito: Bungie ri...
iPhone 20 Pro, un nuovo leak anticipa i ...
Ricaricare l'auto con la stessa velocit&...
Generazione Z e lavoro: l'IA ripensa gli...
Samsung Galaxy Tab S12+ e S12 Ultra: spe...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:06.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v