Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    Allocazione dinamica matrice

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <math.h>
    
    void creamatrice(float **M, int COLUMNS, int ROWS);
    void StampMatrix(float **M, int COLUMNS, int ROWS);
    void InserisciDaTastiera(char *stringa, int Max);
    
    main()
    {
          float **M;
          char *str;
          char c;
          int COLUMNS, ROWS;
          
          printf("Inserisci il numero di righe:\n");
          InserisciDaTastiera(str, 100);
          ROWS=atoi(str);
          printf("NUM RIGHE: %d\n", ROWS);
          
          printf("Inserisci il numero di colonne:\n");
          InserisciDaTastiera(str, 100);
          COLUMNS=atoi(str);
          printf("NUM COLONNE: %d\n", COLUMNS);
         
          creamatrice(M, COLUMNS, ROWS);
          StampMatrix(M, COLUMNS, ROWS);  
          
          system("PAUSE");    
          
    }
    
    void creamatrice(float **M, int COLUMNS, int ROWS){
    
          int i, j, k;
          
          M = (float**)calloc(ROWS,sizeof(float*));
          
          for (i=0; i<ROWS; i++)
              M[i] = (float*)calloc(COLUMNS,sizeof(float));
              
          for (k=0; k<ROWS; k++)
          {
              for (j=0; j<COLUMNS; j++)
              {
                  // (float)rand()/(float)30
                  M[i][j]=1.5;
              }
          }
    }
    
    /*==========================================
     * Function per stampare una matrice
     *========================================*/
    void StampMatrix(float **M, int COLUMNS, int ROWS)
    {
        int i, j;
        
        for ( i=0; i < ROWS; i++ )
        {
             printf("%d", i);
             for ( j=0; j < COLUMNS; j++ )
             {
                    printf(" | ", M[i][j]);
             }
        }
    }
    
    /* =============================================
    ** Function per leggere una stringa di caratteri
    ** da tastiera
    ** ---------------------------------------------*/
    void InserisciDaTastiera(char *stringa, int Max)
    {   
        int i;
        
        fgets(stringa, Max, stdin);
        
        for ( i=0; stringa[i] < 0 || stringa[i] > 31; i++);
        stringa[i]=0;
        
        fflush(stdin);
    }
    Quando eseguo il programma si blocca ma non capisco il perchè!

    Grazie anticipatamente
    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Tu passi ed utilizzi un puntatore str senza allocare lo spazio necessario per usarlo nella fgets.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Ho risolto così:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <math.h>
    #include <time.h>
    
    void creamatrice(float **M, int COLUMNS, int ROWS);
    void StampMatrix(float **M, int COLUMNS, int ROWS);
    void InserisciDaTastiera(char *stringa, int Max);
    float RandomFloat();
    
    main()
    {
          float **M;
          char *col, *row;
          char c;
          int COLUMNS, ROWS, i;
          
          printf("Inserisci il numero di righe:\n");
          scanf("%d", &ROWS);
          printf("NUM RIGHE: %d\n", ROWS);
          
          printf("Inserisci il numero di colonne:\n");
          scanf("%d", &COLUMNS);
          printf("NUM COLONNE: %d\n", COLUMNS);
          
          M = (float**)calloc(ROWS,sizeof(float*));
          
          for (i=0; i<ROWS; i++)
              M[i] = (float*)calloc(COLUMNS,sizeof(float));      
         
          creamatrice(M, COLUMNS, ROWS);
          StampMatrix(M, COLUMNS, ROWS);  
          
          system("PAUSE");    
          
    }
    
    void creamatrice(float **M, int COLUMNS, int ROWS){
    
          int j, k;
              
          for (k=0; k<ROWS; k++)
          {
              for (j=0; j<COLUMNS; j++)
              {
                  M[k][j]=RandomFloat();
              }
          }
    }
    
    /*==========================================
     * Function per stampare una matrice
     *========================================*/
    void StampMatrix(float **M, int COLUMNS, int ROWS)
    {
        int i, j;
        
        for ( i=0; i < ROWS; i++ )
        {
             printf("%d", i);
             for ( j=0; j < COLUMNS; j++ )
             {
                    printf(" | %f", M[i][j]);
             }
        }
    }
    
    /* =============================================
    ** Function per leggere una stringa di caratteri
    ** da tastiera
    ** ---------------------------------------------*/
    void InserisciDaTastiera(char *stringa, int Max)
    {   
        int i;
        
        fgets(stringa, Max, stdin);
        
        for ( i=0; stringa[i] < 0 || stringa[i] > 31; i++);
        stringa[i]=0;
        
        fflush(stdin);
    }
    
    float RandomFloat()
    {
          float num = (float)(rand()%30) + (float)rand() / (float)RAND_MAX;
          return num;
    }
    Anche se vorrei sostituire gli scanf, come posso fare?
    Con i sogni possiamo conoscere il futuro...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ad esempio con la fgets e una atoi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.