Complimenti miglior video in assoluto che ho trovato finora sul argomento, video curato in maniera incredibile le grafiche che hai realizzato aiutano tantissimo a capire i concetti!
hey scusa che compilatore hai usato in questo video? Grazie comunque, mi sei stato utile, da novizio dell'informatica mi risulta molto comodo vedere in atto questi meccanismi
Ciao, ascolta mi sapresti dire quale sia la differenza tra il C vecchio stile e il C11 ? Se dovessi programmare in C11 utilizzando un libro sulla vecchia versione del C per esempio il C89 o C99 potrei farlo?
@@EdoardoSciutti quindi se io dovessi programmare in C11 usando le funzioni del C99 andrebbe ugualmente bene ? Posso compilare il tutto e mandarlo in esecuzione senza problemi ?
Ciao scusa ma nella prima esecuzione del while cosa stampa la funzione se io ho il puntatore che sarebbe la testa della lista quindi che non contiene alcun dato?
A me da un errore nel for (nella tua linea 25) con visual studio community. Mi da impossibile assegnare un valore di tipo void * ad un entità di tipo nodo*
Si, in visual studio da questo errore che in realtà puoi risolvere semplicemente facendo un casting prima di richiamare la funzione malloc. In questo caso ti suggerisco di scrivere: nuovoElemento=(nodo*)malloc(sizeof(nodo)); Così facendo l'errore dovrebbe sparire. Spero di esserti stato d'aiuto.
Ciao, ho scritto un codice un pò diverso dal tuo poiché permetto all'utente di scegliere quando e quanti elementi inserire nella lista e anche di effettuare ricerche tramite una chiave. Provo a inserire 2 elementi ma faccio una ricerca del 2 elemento, non funziona e non mi stampa i suoi dati poiché non entra nell'if in riga 96 ma va in quello in riga 84. Spero tu possa aiutarmi. #include #include struct persona { int eta; char nome[50]; char cognome[15]; int matricola; struct persona *next; }; void inserire(struct persona * *inizio); void inserire(struct persona * *inizio) { struct persona *nuovapersona; nuovapersona=malloc(sizeof(struct persona));
if(nuovapersona==NULL) { printf("Allocazione memoria non riuscita "); }
} int main() { struct persona *inizio; inizio=NULL;
char s; printf("Scegli una tra le seguenti opzioni o digita f per terminare: a. Aggiungi persona b. Rimuovi persona c. Ricerca persona tramite matricola "); scanf("%s", &s);
while(s!='f') {
if(s=='a') { inserire(&inizio); }
if(s=='c') { printf("Inserisci matricola "); int matricola; scanf("%d", &matricola);
ricerca(&inizio, matricola); }
printf("Scegli una tra le seguenti opzioni o digita f per terminare: a. Aggiungi persona b. Rimuovi persona c. Ricerca persona tramite matricola "); scanf("%s", &s);
Ciao! Ho sistemato il codice, ora dovrebbe andare! Se hai dei dubbi sono qua #include #include struct persona { int eta; char nome[50]; char cognome[15]; int matricola; struct persona *next; }; void inserire(struct persona **inizio){ struct persona *nuovapersona; nuovapersona=malloc(sizeof(struct persona)); printf("Inserisci nel seguente ordine nome, cognome, eta' e matricola "); scanf("%s", nuovapersona->nome); getchar(); scanf("%s", nuovapersona->cognome); getchar(); scanf("%d", &(nuovapersona->eta)); getchar(); scanf("%d", &(nuovapersona->matricola)); getchar(); nuovapersona->next = *inizio; *inizio = nuovapersona; } void ricerca(struct persona *inizio, int matricola){ struct persona *q = inizio; if (q == NULL){ printf("La lista e' vuota "); }else{ while(q != NULL && matricola != q->matricola){ q = q->next; } if(q == NULL){ printf("Elemento non trovato "); }else{ printf("%s %s %d %d ", q->nome, q->cognome, q->eta, q->matricola); } } } int main(){ struct persona *inizio = NULL; char s; printf("Scegli una tra le seguenti opzioni o digita f per terminare: a. Aggiungi persona b. Rimuovi persona c. Ricerca persona tramite matricola "); scanf("%c", &s); getchar(); while(s!='f'){ if(s=='a'){ inserire(&inizio); }else if (s=='c'){ printf("Inserisci matricola "); int matricola; scanf("%d", &matricola); ricerca(inizio, matricola); } printf("Scegli una tra le seguenti opzioni o digita f per terminare: a. Aggiungi persona b. Rimuovi persona c. Ricerca persona tramite matricola "); scanf("%c", &s); getchar(); } }
Ciao, grazie mille! Ottieni quell'output perchè chiamato la funzione "stampa()" all'interno del ciclo, in questo modo ad ogni elemento che aggiungi stamperà tutta la lista fino a quel punto
nulla è verissimo quando dicono che sviluppando un programma la tua mente lo considera perfetto, soltanto che poi non si comporta come ci si aspetta. Eh la bisogna avere due teste e 4 occhi hahah grazie mille dell'aiuto 😆😆
grande!! è il video più chiaro che ho trovato sull'argomento :)
Complimenti miglior video in assoluto che ho trovato finora sul argomento, video curato in maniera incredibile le grafiche che hai realizzato aiutano tantissimo a capire i concetti!
Grazie mille, davvero gentilissimo❤️
molto d'aiuto, vedro' sicuramente gli altri video sulle liste
Grazie mille!
Complimenti! Spiegazione fatta molto molto bene
Grazie di cuore❤️
Video utilissimo grazie! Ma che programma stai usando? Visual Studio?
si
complimenti!🙂
Grazie mille!
Grazie, video molto utile, neanche il mio prof lo spiega cosi bene
Grazie mille caro💪🏼
hey scusa che compilatore hai usato in questo video? Grazie comunque, mi sei stato utile, da novizio dell'informatica mi risulta molto comodo vedere in atto questi meccanismi
Ciao, ti ringrazio molto! Io solitamente uso XCode e mi trovo molto bene, negli ultimi mesi con l'uni ho usato anche Clion e te lo consiglio
@@SebastianoMora grazie
Ciao, ascolta mi sapresti dire quale sia la differenza tra il C vecchio stile e il C11 ? Se dovessi programmare in C11 utilizzando un libro sulla vecchia versione del C per esempio il C89 o C99 potrei farlo?
Claudio sei grandicello per l'informatica ormai. datti all'ippica
Si, tutte le versioni del c sono retrocompatibili con le vecchie versioni
@@EdoardoSciutti quindi se io dovessi programmare in C11 usando le funzioni del C99 andrebbe ugualmente bene ? Posso compilare il tutto e mandarlo in esecuzione senza problemi ?
@@christiansoru2734 E tu datti alla zappa invece di provare ad emulare gli youtuber facendo video cringe sul tuo canale.
Ciao scusa ma nella prima esecuzione del while cosa stampa la funzione se io ho il puntatore che sarebbe la testa della lista quindi che non contiene alcun dato?
Ciao, il puntatore “testa” contiene l’informazione del primo nodo della lista, stamperà quello
A me da un errore nel for (nella tua linea 25) con visual studio community. Mi da impossibile assegnare un valore di tipo void * ad un entità di tipo nodo*
Ciao! Che strano, se non riesci a venirne a capo prova a mandarmi il codice su Instagram che gli do un occhio
Si, in visual studio da questo errore che in realtà puoi risolvere semplicemente facendo un casting prima di richiamare la funzione malloc. In questo caso ti suggerisco di scrivere:
nuovoElemento=(nodo*)malloc(sizeof(nodo)); Così facendo l'errore dovrebbe sparire. Spero di esserti stato d'aiuto.
al posto di malloc posso usare anche l'operatore new ?
Ciao, new è un comando di Java, in C "l'equivalente" è usare malloc
👏👏👏👏👏
Se ti pago mi fai un compito di informatica?
Ciao, ho scritto un codice un pò diverso dal tuo poiché permetto all'utente di scegliere quando e quanti elementi inserire nella lista e anche di effettuare ricerche tramite una chiave. Provo a inserire 2 elementi ma faccio una ricerca del 2 elemento, non funziona e non mi stampa i suoi dati poiché non entra nell'if in riga 96 ma va in quello in riga 84. Spero tu possa aiutarmi.
#include
#include
struct persona {
int eta;
char nome[50];
char cognome[15];
int matricola;
struct persona *next;
};
void inserire(struct persona * *inizio);
void inserire(struct persona * *inizio)
{
struct persona *nuovapersona;
nuovapersona=malloc(sizeof(struct persona));
if(nuovapersona==NULL)
{
printf("Allocazione memoria non riuscita
");
}
else
{
if(*inizio==NULL)
{
*inizio=nuovapersona;
nuovapersona->next=NULL;
printf("Inserisci nel seguente ordine nome, cognome, eta' e matricola
");
scanf("%s", nuovapersona->nome);
scanf("%s", nuovapersona->cognome);
scanf("%d", &(nuovapersona->eta));
scanf("%d", &(nuovapersona->matricola));
}
else
{
struct persona *q;
q=*inizio;
while(q!=NULL)
{
q=(q->next);
}
q=nuovapersona;
q->next=NULL;
printf("Inserisci nel seguente ordine nome, cognome, eta' e matricola
");
scanf("%s", q->nome);
scanf("%s", q->cognome);
scanf("%d", &(q->eta));
scanf("%d", &(q->matricola));
}
}
}
void ricerca(struct persona * *inizio, int matricola);
void ricerca(struct persona * *inizio, int matricola)
{
struct persona *q;
q=*inizio;
while( q!=NULL && (matricola)!=(q->matricola) )
{
q=(q->next);
}
if(q==NULL && (*inizio)!=NULL)
{
printf("Elemento non trovato
");
}
if(q==NULL && *inizio==NULL)
{
printf("La lista e' vuota
");
}
if(q!=NULL)
{
printf("%s %s %d %d
", q->nome, q->cognome, q->eta, q->matricola);
}
}
int main()
{
struct persona *inizio;
inizio=NULL;
char s;
printf("Scegli una tra le seguenti opzioni o digita f per terminare:
a. Aggiungi persona
b. Rimuovi persona
c. Ricerca persona tramite matricola
");
scanf("%s", &s);
while(s!='f')
{
if(s=='a')
{
inserire(&inizio);
}
if(s=='c')
{
printf("Inserisci matricola
");
int matricola;
scanf("%d", &matricola);
ricerca(&inizio, matricola);
}
printf("Scegli una tra le seguenti opzioni o digita f per terminare:
a. Aggiungi persona
b. Rimuovi persona
c. Ricerca persona tramite matricola
");
scanf("%s", &s);
}
}
Ciao!
Ho sistemato il codice, ora dovrebbe andare! Se hai dei dubbi sono qua
#include
#include
struct persona {
int eta;
char nome[50];
char cognome[15];
int matricola;
struct persona *next;
};
void inserire(struct persona **inizio){
struct persona *nuovapersona;
nuovapersona=malloc(sizeof(struct persona));
printf("Inserisci nel seguente ordine nome, cognome, eta' e matricola
");
scanf("%s", nuovapersona->nome);
getchar();
scanf("%s", nuovapersona->cognome);
getchar();
scanf("%d", &(nuovapersona->eta));
getchar();
scanf("%d", &(nuovapersona->matricola));
getchar();
nuovapersona->next = *inizio;
*inizio = nuovapersona;
}
void ricerca(struct persona *inizio, int matricola){
struct persona *q = inizio;
if (q == NULL){
printf("La lista e' vuota
");
}else{
while(q != NULL && matricola != q->matricola){
q = q->next;
}
if(q == NULL){
printf("Elemento non trovato
");
}else{
printf("%s %s %d %d
", q->nome, q->cognome, q->eta, q->matricola);
}
}
}
int main(){
struct persona *inizio = NULL;
char s;
printf("Scegli una tra le seguenti opzioni o digita f per terminare:
a. Aggiungi persona
b. Rimuovi persona
c. Ricerca persona tramite matricola
");
scanf("%c", &s);
getchar();
while(s!='f'){
if(s=='a'){
inserire(&inizio);
}else if (s=='c'){
printf("Inserisci matricola
");
int matricola;
scanf("%d", &matricola);
ricerca(inizio, matricola);
}
printf("Scegli una tra le seguenti opzioni o digita f per terminare:
a. Aggiungi persona
b. Rimuovi persona
c. Ricerca persona tramite matricola
");
scanf("%c", &s);
getchar();
}
}
ciao ho scritto il codice ma ottengo un output un po' strano...
- questo è il sorgente:
#include
#include
typedef struct elem{
int value;
struct elem* next;
}nodo;
void stampa(nodo* p);
int main(){
int i = 0;
nodo* head = NULL;
nodo* nelem = NULL;
for(i = 0; i value = i;
nelem->next = head;
head = nelem;
stampa(head);
}
}
void stampa(nodo* p){
while(p != NULL){
printf("
%d", p->value);
p = p->next;
}
}
l'output è il seguente:
0 1 0 2 1 0 3 2 1 0 4 3 2 1 0 5 4 3 2 1 0 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 10 9 8 7 6 5 4 3 2 1 0
sei molto esaustivo, bel video complimenti
Ciao, grazie mille! Ottieni quell'output perchè chiamato la funzione "stampa()" all'interno del ciclo, in questo modo ad ogni elemento che aggiungi stamperà tutta la lista fino a quel punto
nulla è verissimo quando dicono che sviluppando un programma la tua mente lo considera perfetto, soltanto che poi non si comporta come ci si aspetta. Eh la bisogna avere due teste e 4 occhi hahah
grazie mille dell'aiuto 😆😆