Oppure

Loading
30/05/10 17:54
Lello90
Buonasera a tutti.
Sto facendo qualche esercizio per l'università, per un corso di strutture dati del primo anno (potete immaginare il quoziente di difficoltà;). Ho un problema con un programmino (di cui posto codice e testo dell'esercizio). Analizzandolo con DDD noto che l'indice "k", dichiarato alla riga 96, e richiamato poi alle righe 116, 118 e 119, viene inizializzato correttamente a 0, ma dopo la prima iterazione del for acquisisce il valore "116"... a causa della mia modesta esperienza di programmatore, questa cosa mi si rivela alquanto inspiegabile... chiedo ancora una volta il vostro aiuto... più che altro gradisco le spiegazioni, per vedere se riesco a completare l'esercizio da solo!! Grazie mille!!!
aaa
30/05/10 18:11
TheKaneB
:-?
aaa
30/05/10 18:15
Lello90
si, è vero sono un idiota... non ho postato il codice... che tuttavia ora funziona!!!
Scrivendo il post ho notato che il valore assunto dall'indice era il numero progressivo della sua riga!!! stranissimo... ho provato a spostarlo con qualche "a capo", a ricompilare, a cancellare di nuovo gli "a capo" e a ricompilare ed adesso funziona. Posto comunque il codice, perchè non mi va la funzione di inserimento "ordinato in una lista"... se qualcuno mi da un'occhiata...

/*
    Esercizio del suffisso
    
    Scrivere un programma che legga da tastiera una stringa P ,
    un intero N e una sequenza S di N stringhe. Il programma deve
    stampare in ordine lessicografico tutte le stringhe distinte
    in S che hanno P come suffisso. L’input è formattato nel seguente
    modo: la prima riga contiene la stringa    P mentre la seconda riga
    contiene l’intero N . Seguono N righe contenenti una stringa
    ciascuna. L’output a video deve contenere solo e soltanto le
    stringhe distinte che soddisfano la condizione sopra ordinate
    lessicograficamente e stampate una per riga. Si può assumere che
    le stringhe contengano soltanto caratteri alfanumerici ciascuna
    di esse sia lunga al più 100 caratteri.
        
    Esempio
    
     Input
     to
     9
     pluto
     abra
     pippo
     raba
     pluto
     baar
     oppip
     lupto
     paperino
    
     Output
     lupto
     pluto
*/


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 100

//defining complex types and struct
typedef struct node_{
char * str;
struct node_ * next;
}node;

typedef node * list;

//defining function to read strings in input and create an array
char **leggi(int *N){
int i;
char **stringhe;
scanf("%d", N);
stringhe = (char **)malloc(sizeof (char *) * (*N));
for ( i = 0; i < *N; i++ ) {
stringhe[i] = (char *)malloc(sizeof(char)*(max+1));
scanf("%s", stringhe[i]);
}
return stringhe;
}

//defining function to insert (sorty) element in a list
list insert(char * s,list L){
node * new=malloc(sizeof(node));
new->str=s;
if (L==NULL){
new->next=NULL;
L=new;
}
else{
list curr=L;
while((curr->next!=NULL) && (strcmp(s,curr->next->str)<=0))
curr=curr->next;
new->next=curr->next;
curr->next=new;
}
return L;
}

//defining function to check if an element is included in a list
int included(char * s,list L){
list curr=L;
int flag=0;
while((curr!=NULL) && (flag==0)){
if (strcmp(s,curr->str)==0) flag=1;
curr=curr->next;
}
return flag;
}


//Main
int main(){

int N,p_lenght,i,j,h,k,str_lenght;
char ** dictionary;
char * pattern;
char * suffix;
list L,curr;

//reading pattern
pattern=malloc((max+1) * sizeof(char));
scanf("%s",pattern);
p_lenght=strlen(pattern);

//creating dictionary
scanf("%d",&N);
dictionary=leggi(&N);

L=NULL;

for(i=0 ; i<N ; i++){
str_lenght=strlen(dictionary[i]);
j=str_lenght - p_lenght;
suffix=malloc(p_lenght * sizeof(char));
k=0;
for(h=j ; h<str_lenght ; h++){
suffix[k]=dictionary[i][h];
k++;
}
if ((strcmp(pattern,suffix)==0) && !included(dictionary[i],L))
L=insert(dictionary[i],L);
}

curr=L;
while(curr!=NULL){
printf("%s\n",curr->str);
curr=curr->next;
}

return 0;
}

Ultima modifica effettuata da Lello90 30/05/10 18:17
aaa
30/05/10 19:34
Probabilmente c'è un (subdolo) errore che corrompe lo stack e che si presenta in determinati casi.

Ma se il tuo programma utilizza un indice i tra parentesi quadre, come

[ i ]

purtroppo viene interpretato male dal forum e non si legge nulla.

Per evitare il problema e farci leggere il sorgente devi inserire gli spazi come ho fatto io ...
Ultima modifica effettuata da 30/05/10 19:58
30/05/10 19:49
TheKaneB
...oppure usare il tag code :)
aaa
30/05/10 19:58
Postato originariamente da TheKaneB:

...oppure usare il tag code :)


Esatto ... ma sembra una cosa difficile perchè sono pochissimi quelli che lo usano ...
31/05/10 0:46
TheKaneB
ma no... basta fare un piccolo video da 3 minuti, che spieghi passo passo come usare il forum! Se loro ( youtube.com/… ) riescono ad imprimere i concetti in modo chiaro ed indelebile nella mente di milioni di persone, possiamo riuscirci anche noi con poche centinaia :D
aaa
31/05/10 8:57
Alfonso
great, amazing, beautiful, incredible, code, /code, ...
aaa