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

    [C] Aiuto Caricamento di una matrice a spirale

    Salve,
    stavo progettando questo programma che carica una matrice da un file seguendo un andamento degli indici "a spirale".

    Il programma, però, anche se mi sembra logicamente corretto, non funziona...

    Create un file e riempitelo così:
    codice:
    4
    1 8 7 2 3 4 9 1 5 7 3 2 5 4 7 8
    Questo, invece, è il codice:
    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #define M 20

    int caricaSpirale(int mat[][M]);
    void stampaMatrice(int mat[][M], int dim);

    int main()
    {
        
    int dim;
        
    int mat[M][M];
        
        
    dim=caricaSpirale(mat);
        if (
    dim==-1)
        {
            
    printf("Errore\n");
            
    system("PAUSE");
            exit(
    1);
        }
        else
        {
            
    stampaMatrice(mat,dim);

            
    printf("\n");
            
    system("PAUSE");
        }
    }

    int caricaSpirale(int mat[][M])
    {
        
    FILEf;
        
    int dim,est,dimOLD,j,i,temp;
        
    char nomeFile[M];
        
    printf("\nInserisci nome file:\t");
        
    scanf("%s"nomeFile);
        
    f=fopen(nomeFile,"r");
        
        if (
    f==NULL)
        {
            
    fclose(f);
            return -
    1;
        }
        else
        {
        
    fscanf(f,"%d",&dimOLD);
        
    dim=dimOLD-1;
        
        for (
    i=0i<dimi++)
            for (
    j=0j<dimj++)
                
    mat[i][j]=0;
        
    printf("OK");
        
        
        for (
    est=0est<=dim/2est++)
        {
            for (
    j=estj<=dim-estj++)
            {
                
    fscanf(f"%d"temp);
                
    mat[est][j]=temp;
    //            printf("%d %d\n", est, j);
            
    }
            for (
    i=est+1i<=dim-esti++)
            {
                
    fscanf(f"%d"temp);
                
    mat[i][dim-est]=temp;
    //            printf("%d %d\n", i, dim-est);
            
    }
            for (
    j=dim-est-1j>=estj--)
            {
                
    fscanf(f"%d"temp);
                
    mat[dim-est][j]=temp;
    //            printf("%d %d\n", dim-est, j);
            
    }
            for (
    i=dim-est-1i>=est+1i--)
            {
                
    fscanf(f"%d"temp);
                
    mat[i][est]=temp;
    //            printf("%d %d\n", i, est);
            
    }
        }
        
    fclose(f);
        return 
    dim;
        }
    }

    void stampaMatrice(int mat[][M], int dim)
    {
        
    int i,j;
        
        
    printf("\n");
        for (
    i=0i<dimi++)
        {
            for (
    j=0j<dimj++)
                
    printf("%d\t"mat[i][j]);
            
    printf("\n");
        }

    Grazie degli eventuali aiuti.

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [C] Aiuto Caricamento di una matrice a spirale

    Originariamente inviato da MaLaKiAn.SP
    Salve,
    stavo progettando questo programma che carica una matrice da un file seguendo un andamento degli indici "a spirale".
    Definisci "andamento degli indici 'a spirale'".

    Originariamente inviato da MaLaKiAn.SP
    Questo, invece, è il codice:
    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #define M 20

    int caricaSpirale(int mat[][M]);
    void stampaMatrice(int mat[][M], int dim);

    int main()
    {
        
    int dim;
        
    int mat[M][M]; 
    Grazie degli eventuali aiuti.
    Il codice è tutto qui?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Scusate, mi sono sbagliato a inserire il codice..
    Ecco il codice completo:
    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #define M 20

    int caricaSpirale(int mat[][M]);
    void stampaMatrice(int mat[][M], int dim);

    int main()
    {
        
    int dim;
        
    int mat[M][M];
        
        
    dim=caricaSpirale(mat);
        if (
    dim==-1)
        {
            
    printf("Errore\n");
            
    system("PAUSE");
            exit(
    1);
        }
        else
        {
            
    stampaMatrice(mat,dim);

            
    printf("\n");
            
    system("PAUSE");
        }
    }

    int caricaSpirale(int mat[][M])
    {
        
    FILEf;
        
    int dim,est,dimOLD,j,i,temp;
        
    char nomeFile[M];
        
    printf("\nInserisci nome file:\t");
        
    scanf("%s"nomeFile);
        
    f=fopen(nomeFile,"r");
        
        if (
    f==NULL)
        {
            
    fclose(f);
            return -
    1;
        }
        else
        {
        
    fscanf(f,"%d",&dimOLD);
        
    dim=dimOLD-1;
        
        for (
    i=0i<dimi++)
            for (
    j=0j<dimj++)
                
    mat[i][j]=0;
        
    printf("OK");
        
        
        for (
    est=0est<=dim/2est++)
        {
            for (
    j=estj<=dim-estj++)
            {
                
    fscanf(f"%d"temp);
                
    mat[est][j]=temp;
    //            printf("%d %d\n", est, j);
            
    }
            for (
    i=est+1i<=dim-esti++)
            {
                
    fscanf(f"%d"temp);
                
    mat[i][dim-est]=temp;
    //            printf("%d %d\n", i, dim-est);
            
    }
            for (
    j=dim-est-1j>=estj--)
            {
                
    fscanf(f"%d"temp);
                
    mat[dim-est][j]=temp;
    //            printf("%d %d\n", dim-est, j);
            
    }
            for (
    i=dim-est-1i>=est+1i--)
            {
                
    fscanf(f"%d"temp);
                
    mat[i][est]=temp;
    //            printf("%d %d\n", i, est);
            
    }
        }
        
    fclose(f);
        return 
    dim;
        }
    }

    void stampaMatrice(int mat[][M], int dim)
    {
        
    int i,j;
        
        
    printf("\n");
        for (
    i=0i<dimi++)
        {
            for (
    j=0j<dimj++)
                
    printf("%d\t"mat[i][j]);
            
    printf("\n");
        }

    Grazie degli aiuti..

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ancora non hai spiegato cosa intendi con "andamento degli indici 'a spirale'"...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Originariamente inviato da Alex'87
    Ancora non hai spiegato cosa intendi con "andamento degli indici 'a spirale'"...
    Intendo che la matrice viene riempita facendo un percorso simil "spirale"... Cioè, vengono riempiti prima i lati esterni e poi si passa a quelli più interni. L'immagine chiarirà meglio cosa intendo:

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.