silverfox5010
05-02-2009, 11:01
Salve :) !
Ho problema a risolvere il seguente esercizio per quanto riguarda l' array di puntatori a struttura. Ho una struttura di tipo lago e un puntatore a lago next. Nel main viene passato il puntatore a lago head alla funzione crea_lista() che prende in input un file e un array di puntatori a lago. Come utilizzo il puntatore ad array per creare la lista ?
Grazie anticipatamente !
#include <stdio.h>
#include <stdlib.h>
typedef struct lago *next;
typedef struct lago
{
char nome[15];
int profond;
next succ;
}lago;
/*Prototipi di funzione*/
void crea_lista(FILE*, lago**);
void calcolo_max_prof(lago*, int**);
void scrivi_file(FILE*, lago*, int*);
int main(int argc, char *argv[])
{
lago *head;
FILE *input, *output;
int *max_profond;
input=fopen(argv[1],"r");
output=fopen(argv[2], "w");
crea_lista(input, &head);
calcolo_max_prof(head,&max_profond);
scrivi_file(output,head,max_profond);
return 0;
}
/*Crea una lista di record di tipo lago a partire da un file input
* (il cui nome viene passato sulla linea di comando con l'eseguibile)
* in cui sono contenuti dati del tipo (nome lago, profondita'),etc
* (Es. Bracciano 160 Garda 346 Trasimeno 6 Como 410 Maggiore 372).
* Ogni recordo creato dalla funzione conterra' nel campo nome il nome
* del lago, nel campo profond la profondita' e nel campo succ un puntatore
* al prossimo record(eventualmente NULL).La funzione NON restituisce il
* puntatore alla testa della lista che invece e' memorizzata nella variabile
* head passata per riferimento.*/
void crea_lista(FILE* input, lago** first)
{
}
/*Determina la profondita' massima dei laghi presenti nella lista. La funzione
* NON restituisce il puntatore alla testa della lista che invece e' memorizzato
* nella variabile head passata per riferimento.*/
void calcolo_max_prof(lago* first, int** max)
{
}
/*Stampa nel file output (il cui nome viene passato sulla linea di comando con
* l' eseguibile e il file input) il record (nome lago + profondita') relativo
* al lago di profondita' massima.*/
void scrivi_file(FILE* output, lago* first, int* max)
{
}
Io gestirei un array di puntatori nel seguente modo. Ma non sono sicuro se vada bene per l' esercizio sopra.
#include <stdio.h>
#include <stdlib.h>
typedef struct data
{
int value;
struct data *next;
}data;
int main()
{
int i;
data **d = calloc(3, sizeof(data));
for(i = 0; i < 3; i++)
{
d[i] = calloc(1, sizeof(data));
scanf("%d", &d[i]->value);
printf("d[%d]= %d\n", i, d[i]->value);
}
for(i = 0; i < 3; i++)
{
if(i<3)
d[i]->next = d[i+1];
}
for(i = 0; i < 3; i++)
{
if(d[i]->next != NULL)
printf("Successivo di d[%d]: %d\n", i, d[i]->next->value);
}
return 0;
}
Ho problema a risolvere il seguente esercizio per quanto riguarda l' array di puntatori a struttura. Ho una struttura di tipo lago e un puntatore a lago next. Nel main viene passato il puntatore a lago head alla funzione crea_lista() che prende in input un file e un array di puntatori a lago. Come utilizzo il puntatore ad array per creare la lista ?
Grazie anticipatamente !
#include <stdio.h>
#include <stdlib.h>
typedef struct lago *next;
typedef struct lago
{
char nome[15];
int profond;
next succ;
}lago;
/*Prototipi di funzione*/
void crea_lista(FILE*, lago**);
void calcolo_max_prof(lago*, int**);
void scrivi_file(FILE*, lago*, int*);
int main(int argc, char *argv[])
{
lago *head;
FILE *input, *output;
int *max_profond;
input=fopen(argv[1],"r");
output=fopen(argv[2], "w");
crea_lista(input, &head);
calcolo_max_prof(head,&max_profond);
scrivi_file(output,head,max_profond);
return 0;
}
/*Crea una lista di record di tipo lago a partire da un file input
* (il cui nome viene passato sulla linea di comando con l'eseguibile)
* in cui sono contenuti dati del tipo (nome lago, profondita'),etc
* (Es. Bracciano 160 Garda 346 Trasimeno 6 Como 410 Maggiore 372).
* Ogni recordo creato dalla funzione conterra' nel campo nome il nome
* del lago, nel campo profond la profondita' e nel campo succ un puntatore
* al prossimo record(eventualmente NULL).La funzione NON restituisce il
* puntatore alla testa della lista che invece e' memorizzata nella variabile
* head passata per riferimento.*/
void crea_lista(FILE* input, lago** first)
{
}
/*Determina la profondita' massima dei laghi presenti nella lista. La funzione
* NON restituisce il puntatore alla testa della lista che invece e' memorizzato
* nella variabile head passata per riferimento.*/
void calcolo_max_prof(lago* first, int** max)
{
}
/*Stampa nel file output (il cui nome viene passato sulla linea di comando con
* l' eseguibile e il file input) il record (nome lago + profondita') relativo
* al lago di profondita' massima.*/
void scrivi_file(FILE* output, lago* first, int* max)
{
}
Io gestirei un array di puntatori nel seguente modo. Ma non sono sicuro se vada bene per l' esercizio sopra.
#include <stdio.h>
#include <stdlib.h>
typedef struct data
{
int value;
struct data *next;
}data;
int main()
{
int i;
data **d = calloc(3, sizeof(data));
for(i = 0; i < 3; i++)
{
d[i] = calloc(1, sizeof(data));
scanf("%d", &d[i]->value);
printf("d[%d]= %d\n", i, d[i]->value);
}
for(i = 0; i < 3; i++)
{
if(i<3)
d[i]->next = d[i+1];
}
for(i = 0; i < 3; i++)
{
if(d[i]->next != NULL)
printf("Successivo di d[%d]: %d\n", i, d[i]->next->value);
}
return 0;
}