Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    AIUTATEMI ! ! ! ! ! ! ! ! ! ! ! ! !



    Non so più che pesci prendere con un esercizio di C dell'università,c'è qualcuno che mi può aiutare?
    praticamente io ho una matrice di 10 righe per dieci colonne di char, che ho scaricato da file. Poi richiedo all'utente di inserire una parola da cercare nella griglia. Io la cerco e poi devo stampare tutte le diverse alternative: esempio

    La griglia è la seguente:

    afdghnisco
    zqplimdove
    scovscovrr
    mcisyverrr
    xdcoryrhyy
    mvqvqyptyh
    yoejbwxuqu
    rrrrmjpuyt
    rrrpyiscov
    eryeryyrek

    Inserire la parola da cercare: discovery

    Soluzioni trovate:

    ......ISC.
    ......DO..
    .......V..
    ......ER..
    ........Y.
    ..........
    ..........
    ..........
    ..........
    ..........


    ......ISC.
    ......DO..
    .......V..
    ......E...
    .....YR...
    ..........
    ..........
    ..........
    ..........
    ..........


    ......ISC.
    ......DO..
    .......V..
    ......E...
    ......R...
    .....Y....
    ..........
    ..........
    ..........
    ..........


    ..........
    ..........
    ..........
    ..IS......
    .DCO......
    ...V......
    Y.E.......
    .R........
    ..........
    ..........


    ..........
    ..........
    ..........
    ..IS......
    .DCO......
    ...V......
    ..E.......
    ...R......
    ....Y.....
    ..........

    ecco, la prima parte è ok, poi la mia funzione fa cilecca... ecco il mio codice, vi prego, AIUTATEMIIIIIIIIII

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #define DIM 10

    int k=0,righe=0,colonne=0,t=0;

    typedef enum {FALSE,TRUE} bool;

    void stampa(char lista[DIM][DIM]){
    int m = 0,n = 0;
    printf("\n\n");
    while(m<DIM){
    while(n<DIM){
    printf("%c",lista[m][n]);
    n++;
    }
    m++;
    n=0;
    printf("\n");
    }
    printf("\n\n\n");
    }

    void array_da_file(char nomeFile[],char griglia[DIM][DIM]){
    FILE* fp;
    int i=0,j=0;
    char trash;
    fp = fopen(nomeFile,"r");
    while(!feof(fp)){
    if(j>DIM-1)
    {
    i++;
    j=0;
    fscanf(fp,"%c", &trash);
    }
    else{
    fscanf(fp,"%c", &griglia[i][j]);
    j++;
    }

    fflush(stdout);
    }
    fclose(fp);
    printf("\n\n");
    }

    void cerca_aux(char parola[100],int m,int lung,char griglia[DIM][DIM],int i,int j){
    while(m < lung){ //printf ("\n Sono dentro il while...");
    if((i!=0)&&(j!=0)&&(griglia[i-1][j-1] == parola[m])) {
    m++; i--; j--;
    cerca_aux(parola,m,lung,griglia,i,j);
    //printf("%C",griglia[i][j]);
    }
    else //printf (".");
    if((i!=0)&&(griglia[i-1][j] == parola[m])) {
    m++; i--;
    cerca_aux(parola,m,lung,griglia,i,j);
    //printf("%C",griglia[i][j]);
    }
    else //printf (".");
    if((j<DIM)&&(i!=0)&&(griglia[i-1][j+1] == parola[m])) {
    m++;i--;j++;
    cerca_aux(parola,m,lung,griglia,i,j);
    //printf("%C",griglia[i][j]);
    }
    else //printf (".");
    if((j<DIM)&&(griglia[i][j+1] == parola[m])) {
    m++;j++;
    cerca_aux(parola,m,lung,griglia,i,j);
    //printf("%C",griglia[i][j]);
    }
    else //printf (".");
    if((i<DIM)&&(j<DIM)&&(griglia[i+1][j+1] == parola[m])) {
    m++;i++;j++;
    cerca_aux(parola,m,lung,griglia,i,j);
    //printf("%C",griglia[i][j]);
    }
    else //printf (".");
    if((i<DIM)&&(griglia[i+1][j] == parola[m])) {
    m++;i++;
    cerca_aux(parola,m,lung,griglia,i,j);
    //printf("%C",griglia[i][j]);
    }
    else //printf (".");
    if((i<DIM)&&(j!=0)&&(griglia[i+1][j-1] == parola[m])) {
    m++;i++;j--;
    cerca_aux(parola,m,lung,griglia,i,j);
    //printf("%C",griglia[i][j]);
    }
    else //printf (".");
    if((j!=0)&&(griglia[i][j-1] == parola[m])) {
    m++;j--;
    cerca_aux(parola,m,lung,griglia,i,j);
    //printf("%C",griglia[i][j]);
    }
    else //printf (".");
    m=lung;
    printf("%C",griglia[i][j]);
    }
    }

    void cerca(char parola[100],char griglia[DIM][DIM],int k,int righe,int colonne){
    int lung = strlen(parola);
    for(righe; righe<DIM; righe++){
    //printf ("\n");
    for(colonne; colonne<DIM; colonne++){ //cicla sulla matrice
    if(griglia[righe][colonne] == parola[k]){
    k++;
    cerca_aux(parola, k, lung, griglia, righe, colonne);
    //printf("%C",griglia[righe][colonne]);
    k = 0;
    }
    else printf("."); //stampo il puntino
    }
    colonne = 0;
    printf("\n");
    }
    }

    int main(int argc, char *argv[])
    {
    char griglia[DIM][DIM];
    char search[100];
    char nomeFile[15];
    printf("\nInserisci il nome del file dal quale scaricare la griglia\n\n");
    scanf("%s",&nomeFile);
    array_da_file(nomeFile,griglia);
    stampa(griglia);

    printf("\nInserisci la parola da cercare nella griglia\n\n");
    scanf("%s",&search);
    cerca(search,griglia,0,0,0);



    system("PAUSE");
    return 0;
    }
    Davide!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Ciao,
    innanzitutto ti invito a leggere il Regolamento del forum.

    Devi specificare il linguaggio di programmazione anche nel titolo della discussione e soprattutto renderlo più significativo: è normale che chi scrive abbia bisogno di aiuto.

    Questa discussione la correggo io. Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    aggiungo al buon vecchio ALKA che il codice cosi' risulta illeggibile..

    per indentarlo scrivilo su notepad con le tabulazioni e copialo

    incollalo sul forum e all' inizio scrivi [ code ],
    e alla fine [ / code ] (senza spazi)
    esempio
    codice:
    int main(void){
       printf("hello, World!");
    }
    inoltre indica la parte che cresi ti generi problema ,
    non siamo dei debbugger

  4. #4

    [C] stampa ricorsiva

    come compilatore uso DevC++
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #define DIM 10
    
    int k=0,righe=0,colonne=0,t=0;
    
    typedef enum {FALSE,TRUE} bool;
    
    void stampa(char lista[DIM][DIM]){
      int m = 0,n = 0;
      printf("\n\n");
      while(m<DIM){
        while(n<DIM){
          printf("%c",lista[m][n]);
          n++;
        }
        m++;
        n=0;
        printf("\n");
      }
      printf("\n\n\n");
    }
    
    void array_da_file(char nomeFile[],char griglia[DIM][DIM]){
      FILE* fp;
      int i=0,j=0;
      char trash;
      fp = fopen(nomeFile,"r");
      while(!feof(fp)){
        if(j>DIM-1)
        {
            i++;
            j=0;
            fscanf(fp,"%c", &trash);
        }
        else{
            fscanf(fp,"%c", &griglia[i][j]);
            j++;
        }
        
        fflush(stdout);
      }
      fclose(fp);
      printf("\n\n");
    }
    
    void cerca_aux(char parola[100],int m,int lung,char griglia[DIM][DIM],int i,int j){
      while(m < lung){ //printf ("\n Sono dentro il while...");
        if((i!=0)&&(j!=0)&&(griglia[i-1][j-1] == parola[m])) {
          m++; i--; j--;
          cerca_aux(parola,m,lung,griglia,i,j);
          //printf("%C",griglia[i][j]);
        }
        else //printf (".");
        if((i!=0)&&(griglia[i-1][j] == parola[m])) {
          m++; i--;
          cerca_aux(parola,m,lung,griglia,i,j);
          //printf("%C",griglia[i][j]);
        }
        else //printf (".");
        if((j<DIM)&&(i!=0)&&(griglia[i-1][j+1] == parola[m])) {
          m++;i--;j++;
          cerca_aux(parola,m,lung,griglia,i,j);
          //printf("%C",griglia[i][j]);
        }
        else //printf (".");
        if((j<DIM)&&(griglia[i][j+1] == parola[m])) {
          m++;j++;
          cerca_aux(parola,m,lung,griglia,i,j);
          //printf("%C",griglia[i][j]);
        }
        else //printf (".");
        if((i<DIM)&&(j<DIM)&&(griglia[i+1][j+1] == parola[m])) {
          m++;i++;j++;
          cerca_aux(parola,m,lung,griglia,i,j);
          //printf("%C",griglia[i][j]);
        }
        else //printf (".");
        if((i<DIM)&&(griglia[i+1][j] == parola[m])) {
          m++;i++;
          cerca_aux(parola,m,lung,griglia,i,j);
          //printf("%C",griglia[i][j]);
        }
        else //printf (".");
        if((i<DIM)&&(j!=0)&&(griglia[i+1][j-1] == parola[m])) {
          m++;i++;j--;
          cerca_aux(parola,m,lung,griglia,i,j);
          //printf("%C",griglia[i][j]);
        }
        else //printf (".");
        if((j!=0)&&(griglia[i][j-1] == parola[m])) {
          m++;j--;
          cerca_aux(parola,m,lung,griglia,i,j);
          //printf("%C",griglia[i][j]);
        }
        else //printf (".");
        m=lung;
        printf("%C",griglia[i][j]);
      }
    }
    
    void cerca(char parola[100],char griglia[DIM][DIM],int k,int righe,int colonne){
      int lung = strlen(parola);
      for(righe; righe<DIM; righe++){
      //printf ("\n");
        for(colonne; colonne<DIM; colonne++){ //cicla sulla matrice
          if(griglia[righe][colonne] == parola[k]){
            k++;
            cerca_aux(parola, k, lung, griglia, righe, colonne);
            //printf("%C",griglia[righe][colonne]);
            k = 0;
          }
          else printf("."); //stampo il puntino
        }
        colonne = 0;
        printf("\n");
      }
    }      
    
    int main(int argc, char *argv[])
    {
      char griglia[DIM][DIM];
      char search[100];
      char nomeFile[15];
      printf("\nInserisci il nome del file dal quale scaricare la griglia\n\n");
      scanf("%s",&nomeFile);
      array_da_file(nomeFile,griglia);
      stampa(griglia);
      
      printf("\nInserisci la parola da cercare nella griglia\n\n");
      scanf("%s",&search);
      cerca(search,griglia,0,0,0);
      
    
      
      system("PAUSE");	
      return 0;
    }
    Scusatemi se non sono molto esperto, ma la fretta e l'incasinamento dell'ultima ora in questo esercizio........ :maLOL:

    Confido in voi!

    La parte dove dà problemi l'esercizio è quando nel main richiamo la funzione cerca(parametri...). Praticamente non riesco ad aggiustare la stampa delle varie alternative che si riescono a trovare nelle 8 caselle contigue. La ricerca viene effettuata dalle funzioni cerca e cerca_aux, che teoricamente dovrebbero trovare la prima lettera della parola inserita dall'utente e poi ricorsivamente trovare tutte le alternative, e stamparle come avevo scritto nel primo messaggio.
    Cioè con un puntino al posto delle lettere che non fanno parte della parola e le lettere della parola maiuscole...
    Spero di esser stato un po' più chiaro, in caso contrario perdonate la mia inesperienza!
    Davide!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.