[c]passare matrice a funzione
ciao sto scrivendo un programma che dati il numero di giudici N e il numero di concorrenti K, scriva una matrice nella quale trovo i giudizi dati da ogni giudice ad ogni concorrente...tali giudizi devono essere un numero casuale da 0 a 5..
ho 2 dubbi:
-sul passaggio della matrice alla funzione
-come generare un numero da 0 a 5 con la rand
ho scritto il seguente codice:
qualcuno riesce a darmi qualche consiglio?
Grazie!
ho 2 dubbi:
-sul passaggio della matrice alla funzione
-come generare un numero da 0 a 5 con la rand
ho scritto il seguente codice:
#include <time.h> #include <stdio.h> #define GIUDIZIO 5 void crea_matrice(int *concorso,int N,int K); int main(void) { srand(time(NULL)); int N=0,K=0; printf("Inserire il Numero N di giudici presenti in commissione, e il numero K di candidati:\n"); scanf("%d %d",&N,&K); int concorso[N][K]; crea_matrice(concorso,N,K); } void crea_matrice(int *concorso,int N,int K) { int i=0,j=0; for(i=0;i<N;i++){ for(j=0;j<K;j++){ concorso[i][j]=rand()%GIUDIZIO; } } }
qualcuno riesce a darmi qualche consiglio?
Grazie!

Risposte
Se devi generare un numero da 0 a 5 devi usare rand() % 6. Non si può passare array di dimensione maggiore a uno ad una funzione (a meno di conoscerne la dimensione durante la compilazione). In generale si usa quindi un array di dimensione uno e si utilizza qualcosa come i*N + j (dove i va da 0 a K-1 e j va da 0 a N-1) per accedere ai singoli valori.
purtroppo non riesco a capire...significa che devo passargli un vettore? Ma poi come la scrivo la matrice? Non è possibile passarle in puntatore al primo elemento della matrice e le dimensioni che vengono definite come macro con le define?
Se definisci le definizioni con dei define (o usando valori costanti) puoi passargli la matrice. Tutto dipende da quali sono i tuoi obiettivi. A cosa ti serve insomma.. Passare un singolo vettore è comunque meno scomodo di quanto possa sembrare.
si infatti ho osservato che:
1)se setto le dimensioni con le define tutto è come per i vettori;
2)se invece conosco il numero di colonne posso agire come sopra e lasciare le [] vuote(righe) nel protipo e nella definizione;
3)se invece chiedo le dimensioni all'utente, c'è modo di far si che le dimensioni immesse siano considerabili come delle macro, e che quindi ci si possa comportare come nel caso 1?
nel caso in cui voglia usare il singolo vettore, a grandi linee che codice va scritto?
Grazie Apatriarca
1)se setto le dimensioni con le define tutto è come per i vettori;
2)se invece conosco il numero di colonne posso agire come sopra e lasciare le [] vuote(righe) nel protipo e nella definizione;
3)se invece chiedo le dimensioni all'utente, c'è modo di far si che le dimensioni immesse siano considerabili come delle macro, e che quindi ci si possa comportare come nel caso 1?
nel caso in cui voglia usare il singolo vettore, a grandi linee che codice va scritto?
Grazie Apatriarca

Quando tu utilizzi un array bidimensionale, il compilatore converte l'espressione che scrivi in quella che ti ho scritto sopra. Come vedi solo una delle due dimensioni è necessaria per scrivere tale formula e quella dimensione è quella che il compilatore richiede. Non puoi inserire solo l'altra dimensione. Ma la distinzione tra righe e colonne e semplicemente una convenzione e puoi sempre scambiare i ruoli se ti fa comodo (o semplicemente scambiare righe e colonne nella tua "immagine mentale" della tabella).
quindi gli passo qualcosa di questo tipo?
nel caso in cui N e K non siano note?
se invece chiedo le dimensioni all'utente, c'è modo di far si che le dimensioni immesse siano considerabili come delle macro, e che quindi ci si possa comportare come nel caso facile?
void crea_matrice(matrice[N]);
nel caso in cui N e K non siano note?
se invece chiedo le dimensioni all'utente, c'è modo di far si che le dimensioni immesse siano considerabili come delle macro, e che quindi ci si possa comportare come nel caso facile?