Salve a tutti sono alla prese con un programma abbastanza complesso ed essendo alle prime armi con l'informatica sto avendo qualche problema.
Si chiede di scrivere un programma che legge dallo standard input, una sequenza i righe e stampa il corrispondente indice inverso. I dati sono codificati da numeri interi, e che uno 0 segnala la fine della riga.
( per esempio il programma riceve
7: 1, 2, 3, 0
4: 1,6,7,0
5: 2,3,6,0
e stampa:
1: 7,4
2: 7,5
3:7,5
6: 4, 5
7:7 )
La fine dei dati è rappresentata da una riga contente solo il numero 0. IL NUMERO DI RIGHE E IL NUMERO DI CODICI NON è FISSATO A PRIORI. Il programma non deve essere interattivo e nella fase di lettura si supponga che l'espressione sia scritta correttamente.
Allora spiego quello che ho pensato di usare io in linguaggio pseudo-codice per non dilungarmi troppo tra dichiarazioni e resto.
La mia idea si basa sull'uso delle liste concatenate che mi danno la possibilità attraverso la malloc di creare "spazi" grandi quanto si vuole.
Quindi dichiaro un record che ha un campo che rappresenta un elemento del codice e l'altro che è un puntatore che punto al record stesso:
struct elemento{
int x;
q=struct elemento * prox
}
A questo punto leggo il codice
if( elemento.x != 0 ){
scanf(elemento.x)
} else{
elemento*prox=NULL
}
Così dovrei essere riuscita a creare un algoritmo in cui ogni riga è formata da una lista concatenata di record e la macchina legge i campi x del record finchè non trova 0 dove finisce la lista.
E' giusto? Ha senso?
Il resto del programma mi crea ancora più problemi nel senso che immagino bisogni creare una funzione che cerca un certo valore nel codice e se lo trova mi stampa il primo numero della serie. Però non so come muovermi nelle liste, cioè come trattare i singoli elementi e come chiamarli in causa.