Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - indice c
Forum - C/C++ - indice c

Avatar
Lello90 (Normal User)
Newbie


Messaggi: 15
Iscritto: 13/01/2010

Segnala al moderatore
Postato alle 19:54
Domenica, 30/05/2010
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!!!

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 20:11
Domenica, 30/05/2010
:-?

PM Quote
Avatar
Lello90 (Normal User)
Newbie


Messaggi: 15
Iscritto: 13/01/2010

Segnala al moderatore
Postato alle 20:15
Domenica, 30/05/2010
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 = (char *)malloc(sizeof(char)*(max+1));
      scanf("%s", stringhe);
      }
    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);
    j=str_lenght - p_lenght;
    suffix=malloc(p_lenght * sizeof(char));
    k=0;
    for(h=j ; h<str_lenght ; h++){
      suffix[k]=dictionary[h];
      k++;
      }
    if ((strcmp(pattern,suffix)==0) && !included(dictionary,L))
      L=insert(dictionary,L);
    }
    
  curr=L;
  while(curr!=NULL){
    printf("%s\n",curr->str);
    curr=curr->next;
    }
  
  return 0;
  }
  
  

Ultima modifica effettuata da Lello90 il 30/05/2010 alle 20:17
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6382
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:34
Domenica, 30/05/2010
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 nessuno il 30/05/2010 alle 21:58


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 21:49
Domenica, 30/05/2010
...oppure usare il tag code :)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6382
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:58
Domenica, 30/05/2010
Testo quotato

Postato originariamente da TheKaneB:

...oppure usare il tag code :)



Esatto ... ma sembra una cosa difficile perchè sono pochissimi quelli che lo usano ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 2:46
Lunedì, 31/05/2010
ma no... basta fare un piccolo video da 3 minuti, che spieghi passo passo come usare il forum! Se loro ( http://www.youtube.com/watch?v=1ZS8HqOGTbA ) riescono ad imprimere i concetti in modo chiaro ed indelebile nella mente di milioni di persone, possiamo riuscirci anche noi con poche centinaia :D

PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 10:57
Lunedì, 31/05/2010
great, amazing, beautiful, incredible, code, /code, ...

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 13:33
Lunedì, 31/05/2010
Testo quotato

Postato originariamente da Alfonso:

great, amazing, beautiful, incredible, code, /code, ...



esatto XDD dici che così se lo ricordano? :cheer:

PM Quote