PDA

Visualizza la versione completa : [C] Inserimento in strutture dati di una lista


firas
08-01-2008, 21:32
salve mi vedete come posso stampare e compilare questo codice esattamente perche nn riesco ad inserire il pritf e il scanf perche ho delle strutture:
devo scrivere una funzione c definendo le opportune struture dati e inizializzazione tale da aggiudere n nuovo elemento ad una lista studenti in cui ogni studente è definito da na terna costtuita da numero matrizola e nome e cognome ,tale funzione dovra ricevere in input il puntatore alla lista esistente anche se essa è ancora vuota ed una terna relativa ad un nuovo studente e restituisce al chiamante il puntatore alla lista orginaria con l'aggiunta dellanuova terna la lista dovrà essere ordinata oer matricola crescente dello studente
nota:la lista non dovrà essere creatanessuna nuova lista d'appoggio non è permesso l'usi della libreria string

firas
08-01-2008, 21:33
io ho fatto questa soluzione: perche il problema di inserire l'input e output

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct studente {
int matricola;
char nome[20];
char cognome [20];
};
struct elemento {
struct studente info;
struct elemento *pun;
};
struct elemento *inserimento(struct elemento*,struct studente);


int main()
{
struct elemento *puntlista = NULL;
struct studente val;
int scelta = -1;
char pausa;
puntlista=inserimento(puntlista,val);


system("PAUSE");
return 0;
}
struct elemento *inserimento(struct elemento *p,struct studente x){
struct elemento *p0, *p1;
int posizione;
/*CREAZIONE ELEMENTO*/
p0= (struct elemento *)malloc(sizeof(struct elemento));
printf("\nInserire l'informazione studente : ");
scanf("%d", &p0->(x.matricola));
scanf("%c", &p0->(x.nome));
scanf("%c", &p0->(x.cognome));
/*VERIFICA SE LA LISTA è VUOTA*/
if(p==NULL){p=p0;
p->pun=NULL;}
else {if (p->(x.matricola) > p0->(x.matricola)){
p0->pun=p;
p=p0;}
else {p1=p;
posizione=0;
while(p1->pun!=NULL && posizione!=1){
if(p1->pun->(x.matricola)< p0->(x.matricola))
p1 = p1->pun;
else posizione=1;/*INTERROMPE SCANSIONE*/
}
p0->pun = p1->pun; /*CONNESSIONE ALL'ELEMENTO SUCCESSIVO*/
}
p1->pun = p0; /*CONNESSIONE DALL'ELEMENO PRECEDENTE*/
}
}
return(p);
}

firas
08-01-2008, 21:39
per favore vorrei la correzzione del mio codice e grazie mille

alka
08-01-2008, 22:20
Originariamente inviato da firas
per favore vorrei la correzzione del mio codice e grazie mille
Questo non è un servizio di consulenza a pagamento, ma un luogo gratuito in cui è possibile chiedere suggerimenti per la soluzione dei propri problemi di programmazione, rispettando il tempo libero degli altri utenti della community e i regolamenti vigenti.

Non esistono quindi discussioni urgenti, o almeno non esistono discussioni più urgenti di altre.

Ho corretto il titolo nel rispetto del Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887) di quest'area.

firas
09-01-2008, 00:59
ma mica ti ho detto una bestemia ho chiesto con tutto il rispetto e dicendo per favore se non sai leggere non è colpa mia
spero che sia chiaro
e poi infatti ho chiesto suggerimenti e ho messo il titolo cosi percke avevo bisogn o e non è per pagare .....spero k legga bn prima di rispondere alla gente...

alka
09-01-2008, 01:08
Originariamente inviato da firas
ma mica ti ho detto una bestemia


Originariamente inviato da firas
ho chiesto con tutto il rispetto e dicendo per favore

No, hai aperto una discussione senza preoccuparti di leggere il Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887), usando un titolo inappropriato, senza indicare il linguaggio di programmazione nel titolo come richiesto, definendo urgenza ciò che - come ti ho già spiegato e ribadisco - non lo è, inserendo ben 3 interventi separati nel tuo post nel giro di una mezz'ora (facendo quindi salire, senza che nessuno abbia ancora inserito una risposta, la discussione, e facendo quindi scalare le altre, e questo non è rispettoso nei confronti degli altri utenti).


Originariamente inviato da firas
se non sai leggere non è colpa mia

Chi non ha letto sei tu, e polemizzi inutilmente con chi ha la sola responsabilità di fartelo notare.


Originariamente inviato da firas
spero che sia chiaro

Spero che sia più chiaro ciò che ho scritto io.


Originariamente inviato da firas
e poi infatti ho chiesto suggerimenti e ho messo il titolo cosi percke avevo bisogn o e non è per pagare .....spero k legga bn prima di rispondere alla gente...
Il fine non giustifica i mezzi, qui, perché lo spazio è utilizzato anche da altri (motivo per cui dovresti anche evitare abbreviazioni, in modo da facilitare la lettura agli altri utenti).

Direi che è tutto.

Ifrit
09-01-2008, 07:20
Allora io non posso che dare tutta la ragione a alka
Vorrei ricordare che queste pagine vengono "percorse" da gente matura [almeno si spera], quindi non vedo per quale motivo bisogna accanirsi quando una persona fa presente che sono state violate delle regole.
Inoltre vorrei ricordare anche che non solo non e' affatto giusto accanirsi per motivi cosi banali, ma bisogna comunque tenere una certa moderatezza, dopotutto firas perdonami se te lo dico, ma tu non conosci alka come non lo conosco io, che diritto abbiamo di "aggredirlo"??

Comunque, per la serie Facciamo l'amore, non facciamo la guerra, cio' puo capitare e non dobbiamo farne un problema esistenziale....

Tornando IT [non so se qui si usa questa abbreviazione, significa InTopic], sono anche io uno studente dello stesso corso di fondamenti di informatica :) [non dico il nome del docente per evitare violazioni]

Ho letto il tuo codice e gli ho dato una "Regolata", c'erano molti errori di sintassi e altro.
Qui sotto ti posto quello corretto ma non ti consiglio di sostenere l'orale visto il compito.

Se vuoi sono anche disponibile a darti una spiegazione veloce sui motivi che hanno portato alle modifiche, mi trovi dalle 8 di questa mattina [9/gen/2008] nell'auletta di Azione Universitaria [piano 150, l'aula e ubicata vicino la porta che separa il corridoio delle associazione e la biblioteca] fino a orario da stabilire [non lo so, come mi gira]
Sono il ragazzo coi capelli lunghi e rossi [alcuni dicono biondi] che veste di nero [il metallaro insomma]
Ti aspetto :ciauz:
Matteo



#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>


struct studente
{
int matricola;
char nome[20];
char cognome [20];
};

struct elemento
{
struct studente info;
struct elemento *pun;
};

struct elemento *inserimento(struct elemento*);


int main()
{
system("color 0a");
struct elemento *puntlista = NULL;
int i;

do
{
system("cls");
puntlista=inserimento(puntlista);
printf("Vuoi inserire i dati di un nuovo alunno?: [1 SI/0 NO]: ");
scanf("%d",&i);
} while(i);

system("cls");
printf("\n\tLettura della lista\n\n");

while(puntlista!=NULL)
{
printf("Matricola: %d\n",puntlista->info.matricola);
printf("Nome: %s\n",puntlista->info.nome);
printf("Cognome: %s\n\n",puntlista->info.cognome);
puntlista = puntlista->pun;
}

system("pause");
return 0;
}

struct elemento *inserimento(struct elemento *p)
{
struct elemento *p0, *p1;
int posizione;

p0= (struct elemento *)malloc(sizeof(struct elemento));
p0->pun=NULL;

printf("\n\tInserire l'informazione studente\n\n");

printf("Matrivola: ");
scanf("%d", &(p0->info.matricola));

printf("Nome: ");
scanf("%s", p0->info.nome);

printf("Cognome: ");
scanf("%s", p0->info.cognome);

if(p==NULL) p=p0;
else
{

if (p->info.matricola > p0->info.matricola)
{
p0->pun=p;
p=p0;
}
else
{
p1=p;
posizione=0;
while(p1->pun!=NULL && posizione!=1)
{
if(p1->pun->info.matricola < p0->info.matricola) p1 = p1->pun;
else posizione=1;
}
p0->pun = p1->pun;
p1->pun = p0;
}
}
return(p);
}

firas
10-01-2008, 01:17
adesso non entriamo k è mica sn qui per sapere k è,giusto solo per dirlo e grazie per la sua discussione

visto il tuo codice
mi piaceva come soluzione,pero ci manca un parametro formale nella fz di inserimento
perche deve avere un parametro k mi indica il puntatore a testa lista ed altro parametro per l'elemento k inserisco

per il tuo consiglio per non presentarmi all'orale,ti ringrazio lo stesso pero mi sono presentato e già superato l'esame e menomale k nn ho preso del consiglio,,,, :ciapet:

Ifrit
10-01-2008, 04:29
Alzo le mani e ti chiedo scusa, ti ho consigiato di non presentarti perche' ho visto un grave errore nel programma che hai postato.

allora come primo il tuo codice sorgente fa agganciare 2 puntatori a 2 strutture, rispettivamente una struttura di tipo elemento e una di tipo studente:


struct elemento *inserimento(struct elemento *p, struct studente x)

successivamente crei una struttura di tipo elemento e cerchi di inserire dei dati in questo modo:


scanf("%c", &p0->(x.nome));

cioe' non so se e' chiaro, dichiarando p0 in questo modo:


struct elemento *p0;
p0= (struct elemento *)malloc(sizeof(struct elemento));

si alloca a p0 uno spazio di memoria definito come elemento

struct elemento
{
struct studente info;
struct elemento *pun;
};

quindi mi spieghi da dove viene fuori quella x?
e' un errore gravissimo, x e' una struttura di tipo studente che hai passato fra gli argomenti della funzione, non centra assolutamente niente con il puntatore p0.
comunque se vuoi posso continuare a elencare tutti gli errori presenti nel tuo codice sogete, dai piu' banali a quelli da infarto......

Ti faccio ancora i miei complimenti per aver superato l'esame, spero che continui cosi.
Saluti Matteo.

p.s.


Originariamente inviato da firas
adesso non entriamo k è mica sn qui per sapere k è,giusto solo per dirlo e grazie per la sua discussione
Eh? traduzione?



Originariamente inviato da firas
mi piaceva come soluzione,pero ci manca un parametro formale nella fz di inserimento
perche deve avere un parametro k mi indica il puntatore a testa lista ed altro parametro per l'elemento k inserisco
[list=1]
Puntatore alla testa della lista[Alias: Root]:

struct elemento *inserimento(struct elemento *p)
Puntatore all'elemento da inserire:
Mi spieghi a cosa serve se hai inserito degli scanf nella funzione per aquisire le info?
Se vuoi ti rifaccio il sorgente impiegando questa soluzione[fra le altre cose e' la soluzione cui ho optato per la mia prova].
Basta cancellare quegli scanf nella funzione e spostare i dati passati dalla funzione nelle info del puntatore p0[/list=1]




Originariamente inviato da firas
e menomale k nn ho preso del consiglio,,,, :ciapet:

A questo punto mi autoquodo

Originariamente inviato da ifrit
...
Vorrei ricordare che queste pagine vengono "percorse" da gente matura [almeno si spera],
...

firas
11-01-2008, 12:34
grazie per il tuo impegno
per il prof che voleva 2 dati in input e non sono io
lo so che era il mio sbaglio nel definire :struct studente x
e l'ho aggiustato e funziona tutto bene
grazie per tutto capo

Loading