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

    [c] problema valori di ritorno funzione

    Salve a tutti, sto scrivendo questo piccolo programmino che mi serve da test per un programma più grande che devo svolgere. In pratica mi creo una matrice di interi, la inizializzo con tutti 0, e poi mi credo due interi random che funzionano da indici per aggiornare una cella della matrice impostando il valore 1 (anzichè 0)
    Il programma mi sembra senza errori, e in realtà funziona tutto bene...l'unico problema sono i valori che assume la struct indici quando "vado a capo" della matrice..a spiegare sembra complicato ma con un semplice run del programma ci si rende subito conto dei valori inattesi. Il problema è che l'importanza fondamentale del programmino è proprio ritornarmi in modo corretto i due interi della struct indici.
    Questo è il codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <time.h>  
    #define S 10
    #define K 15
    
    struct indici {
    
      int primo;
      int secondo;
    
    };
    
    typedef struct indici *TipoIndici;
    
    void printMatrix(int matrix[S][K]){
    
     int i,j;
      for(i=0;i<S;i++){
        for(j=0;j<K;j++){
          printf("%d ",matrix[i][j]);
        }
        printf("\n");
        }
    }
    
    TipoIndici insertMatrix(int matrix[S][K],int rand1,int rand2){
      TipoIndici z;
      int i,j,inserito=0;
      for (i=rand1;i<S && inserito==0;i++){
        for(j=rand2;i<K && inserito==0;j++){
          if(matrix[i][j]==0){
    	matrix[i][j]=1;
    	inserito=1;
            z = malloc(sizeof(struct indici));
            z->primo=i;
            z->secondo=j;
          }
        }
      }
      return z;
    }
    
    int main ()
    {
      TipoIndici z;
      int mat[S][K];
      int i,j;
      for(i=0;i<S;i++){
        for(j=0;j<K;j++){
          mat[i][j]=0;
          printf("%d ",mat[i][j]);
        }
        printf("\n");
        }
    
      int n1,n2,count=0;
      do{
      srand((unsigned)time(NULL));
      n1 = rand() % S;
      srand((unsigned)time(NULL));
      n2 = rand() % K;
      printf("\nNumeri Random: %d %d\n",n1,n2);
    
      z=insertMatrix(mat,n1,n2);
      printf("Matrice:\n");
      printMatrix(mat);
      printf("Indici Funzione: %d %d\n",z->primo,z->secondo);
      count++;
      }while(count<15);
      return 0;
    }
    Spero che qualcuno possa dirmi dove sbaglio!
    Grazie mille!

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>  
    #define S 10
    #define K 15
    
    typedef struct indici {
    
      int primo;
      int secondo;
    
    } indici;
    
    void printMatrix(int matrix[S][K]){
     int i,j;
      for(i=0;i<S;i++){
        for(j=0;j<K;j++){
          printf("%d ",matrix[i][j]);
        }
        printf("\n");
        }
    }
    
    indici insertMatrix(int matrix[S][K],int rand1,int rand2){
      indici z;
      matrix[rand1][rand2] = 1;
      z.primo = rand1;
      z.secondo = rand2;
      return z;
    }
    
    int main ()
    {
      srand((unsigned)time(NULL));
      indici z;
      int mat[S][K];
      int i,j;
      for(i=0;i<S;i++){
        for(j=0;j<K;j++){
          mat[i][j]=0;
          printf("%d ",mat[i][j]);
        }
        printf("\n");
      }
    
      int n1,n2,count=0;
      do{
      n1 = rand() % S;
      n2 = rand() % K;
      printf("\nNumeri Random: %d %d\n",n1,n2);
    
      z=insertMatrix(mat,n1,n2);
      printf("Matrice:\n");
      printMatrix(mat);
      printf("Indici Funzione: %d %d\n",z.primo,z.secondo);
      count++;
      }while(count<15);
      return 0;
    }
    Scusa ma non basta questo codice??

    Al massimo aggiungendo un controllo per vedere se una cella è già occupata puoi fare
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    #include <time.h>  
    #define S 10
    #define K 15
    
    typedef struct indici {
    
      int primo;
      int secondo;
    
    } indici;
    
    bool checkFree(int matrix[S][K], int x, int y) {
        return !matrix[x][y];
    }
    
    void printMatrix(int matrix[S][K]){
     int i,j;
      for(i=0;i<S;i++){
        for(j=0;j<K;j++){
          printf("%d ",matrix[i][j]);
        }
        printf("\n");
        }
    }
    
    indici insertMatrix(int matrix[S][K],int rand1,int rand2){
      indici z;
      matrix[rand1][rand2] = 1;
      z.primo = rand1;
      z.secondo = rand2;
      return z;
    }
    
    int main ()
    {
      srand((unsigned)time(NULL));
      indici z;
      int mat[S][K];
      int i,j;
      for(i=0;i<S;i++){
        for(j=0;j<K;j++){
          mat[i][j]=0;
          printf("%d ",mat[i][j]);
        }
        printf("\n");
      }
    
      int n1,n2,count=0;
      do{
      n1 = rand() % S;
      n2 = rand() % K;
      if(!checkFree(mat, n1, n2))
        continue;
      printf("\nNumeri Random: %d %d\n",n1,n2);
    
      z=insertMatrix(mat,n1,n2);
      printf("Matrice:\n");
      printMatrix(mat);
      printf("Indici Funzione: %d %d\n",z.primo,z.secondo);
      count++;
      }while(count<15);
      return 0;
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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 © 2024 vBulletin Solutions, Inc. All rights reserved.