|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
[C] Esercizi su strutture e liste
|
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
io procederei così: tanto per cominciare confronta le lunghezze dei due numeri in input, la lunghezza maggiore appartiene al numero maggiore. se le lunghezze sono uguali allora passi a testare le singole cifre dei due numeri con un ciclo partendo dalle più significative verso le meno significative; non appena incontri due cifre diverse sei in grado di determinare il numero maggiore e puoi interrompere il ciclo e ritornare subito, altrimenti se riesci a concludere il ciclo e a verificare l'uguaglianza di tutte le cifre allora i due numeri sono identici. cosa non ti è chiaro?
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
Non ho capito proprio la prima parte, quell'immagine che ho postato, cioè tutte quelle dichiarazioni ecc..
sei hai tempo mi fai vedere come si inizializza il tutto nel modo piu semplice possibile,cose forse riesco a capire |
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
supponiamo che io debba utilizzare quella roba per memorizzare il numero 24:
Codice:
struct Number n1, n2; struct InteroIllimitato i; n1.value = 4; n1.next = &n2; n2.value = 2; n2.next = NULL; i.length = 2; i.firstNumber = &n1; i.lastNumber = &n2; |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
ok, l'inizializzazione l'ho capita ora vedo di capire cosa fa l'esercizio
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
ma la funzione cosa deve fare?
deve confrontare i numeri memorizzati in n1 e n2 o cosa? non l'ho capito |
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
sostanzialmente deve confrontare tutte le struct Number contenute nelle liste specificate da n ed m, ma per i dettagli sull'algoritmo vedi post #2.
|
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
faccio un altro esempio di inizializzazione, giusto per chiarire che una di quelle liste può contenere anche molto più di due cifre; supponiamo di voler memorizzare il numero 123:
Codice:
struct Number n1, n2, n3; struct InteroIllimitato i; n1.value = 3; n1.next = &n2; n2.value = 2; n2.next = &n3; n3.value = 1; n3.next = NULL; i.length = 3; i.firstNumber = &n1; i.lastNumber = &n3; |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
allora, tu hai creato una struttura di tipo number chiamata n1 e una chiamata n2 e in oguna di queste strutture hai inizializzato la variabile value rispettivamente a 4 e 2.
poi hai creato una struttura di tipo interoillimitato chiamata i e hai inizializzato la lunghezza a 2(perchè?) e hai inizializzato i due puntatori, uno a n1 e uno a n2. Mi puoi spiegare a parole cosa chiede l'esercizio? |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
ho visto anche la tua seconda inizializzazione, ora mi è tutto chiaro. ma non capisco cosa chiede l'esercizio.
|
|
|
|
|
|
#11 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
|
||
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
non capisco ancora, non ci riuscirò mai..
quindi devo confrontare due numeri n e m, cioè due liste? come quella che hai creato? solo che ne devo fare due e confrontarle? |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
Codice HTML:
#include <stdio.h>
struct Number{
int value;
struct Number *next;};
struct Interoillimitato{
int lenght;
struct Number *firstnumber;
struct Number *lastnumber;};
int main(){
struct Number n1, n2, n3, n4;
struct Interoillimitato i;
n1.value=4;
n1.next=&n2;
n2.value=3;
n2.next=&n3;
n3.value=2;
n3.next=&n4;
n4.value=1;
n4.next=NULL;
i.lenght=4;
i.firstnumber=&n1;
i.lastnumber=&n4;
Ho scritto questo, cioè ho creato una lista di 4 elementi, 4->3->2->1->NULL ora che devo fare? |
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
scusa la mia ignoranza ma non ho capito proprio cosa deve fare la funziona
cioè io ho una lista di 4 elementi e una struttura dove c'è scritto il numero di elementi che ha la lista e c'è un puntatore al primo e uno all'ultimo numero della lista ora cosa devo farci con questa lista? non bisogna creare 2 liste per confrontare 2 numeri? |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
cioè ho capito come va svolto l'esercizio ma non so su cosa devo lavorare all'interno della funzione e quali sono i due numeri da confrontare. devo confrontare due liste o cosa?
mi serve un aiutino, un input, poi cerco di farlo da solo |
|
|
|
|
|
#17 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
guarda la dichiarazione della funzione: ci sono due parametri, m ed n, che rispettivamente puntano a due diverse "struct InteroIllimitato" ciascuna delle quali descrive una diversa lista di cifre decimali. ricevi in input le descrizioni di due liste diverse che corrispondono a due numeri diversi, e tu devi confrontare questi due numeri e ritornare 1 se è minore il primo, 0 se sono uguali e -1 se è maggiore il primo.
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
penso di aver capito.
domani ci provo |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
Ho provato a farlo, ditemi tutto quello che ho sbagliato
Codice HTML:
#include <stdio.h> int confronta(struct interoillimitato *m, struct interoillimitato *n); struct Number{ int value; struct Number *next;}; struct Interoillimitato{ int lenght; struct Number *firstnumber; struct Number *lastnumber;}; int main(){ struct Number n1, n2, n3, n4; struct Number m1, m2, m3, m4; struct Interoillimitato m; struct Interoillimitato n; n1.value=4; n1.next=&n2; n2.value=3; n2.next=&n3; n3.value=2; n3.next=&n4; n4.value=1; n4.next=NULL; n.lenght=4; n.firstnumber=&n1; n.lastnumber=&n4; m1.value=3; m1.next=&m2; m2.value=7; m2.next=&m3; m3.value=2; m3.next=&m4; m4.value=6; m4.next=NULL; m.lenght=4; m.firstnumber=&m1; m.lastnumber=&m4; printf("%d\n", confronta(Interoillimitato m, Interoillimitato n)); } int confronta(struct interoillimitato *m, struct interoillimitato *n){ int risultato=0; if(m.lenght>n.lenght){ risultato=-1;} if(m.lenght<n.lenght){ risultato=1;} else { for(i=0;i<m.lenght;i++){ if(m.firstnumber>n.firstnumber){ risultato=-1; break;} if(m.firstnumber<n.firstnumber){ risultato=1; break;} else {m.firstnumber=m.firstnumber->next; n.firstnumber=n.firstnumber->next;}} return risultato;} Ultima modifica di xbubbax : 19-08-2007 alle 10:08. |
|
|
|
|
|
#20 | |
|
Junior Member
Iscritto dal: Jul 2007
Messaggi: 27
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:35.




















