PDA

View Full Version : help c++


terreldavis
19-02-2005, 11:30
ciao a tutti, è la prima volta che scrivo in questo forum. sono arrivato qui perche mi serve un aiuto . Sto preparando un esame di programmazione in c++ e mi sono incastrato con i puntatori :muro: nn riesco propio a capirli bene. vi riporto qui il programma che sto cercando di fare:

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <math.h>

void gena(int *);


main()
{
int a[100][100], i,j;

srand(time(NULL));

gena(a); /*qui mi da errore*/

for(i=0;i<=100;i++){
for(j=0;j<=100;j++)
printf("%3d",a[i][j]);}


system("PAUSE");
return EXIT_SUCCESS;
}

void gena(int *array)
{
void rand(int *);
int x,y;

for (x=0;x<=100;x++){
for(y=0;y<=100;y++)
rand(&array[x][y]);}
}

void rand(int *element)
{
*element=(rand()%10)+1;
}


in pratica ho una matrice 100*100 e vorrei passarla alla funzione gena in modo da riempirla con numeri casuali. quando vado a compilare mi dice "cannot convert `int (*)[100]' to `int (**)[100]' for argument `1' to `void gena(int (**)[100])' " alla riga 14 cioè quando invoco la funzione.....ma è possibile che nn capisce che gli sto passando un vettore multidimensionale? come faccio a farglielo capire??......vi prego di aiutarmi sicuramente ci sono altri errori vi prego di farmi capire dove sbaglio..

grazie in anticipo

Fenomeno85
19-02-2005, 12:53
#include <time.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

#define N 10

void gena(int array[N][N]);


int main(void)
{
int a[N][N], i,j;
srand(time(NULL));

gena(a); /*qui mi da errore*/

for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%3d",a[i][j]);
printf ("\n");
}


system("PAUSE");
return EXIT_SUCCESS;
}

void gena(int array[][N]) {
int x,y;
for (x=0;x<N;x++){
for(y=0;y<N;y++)
array[x][y] = rand()%10+1;
}
}


guarda adesso

~§~ Sempre E Solo Lei ~§~

terreldavis
19-02-2005, 13:11
cosi mi funziona grazie...:D .ma mi spieghi cosa sbagliavo? io nn ho capito come si fa a passare un puntatore di una array bidimensionale a una funzione. è inutile l'asterisco che avevo messo nella dichiarazione della funzione gena? e la funzione rand che avevo fatto era totalmente sbagliata? se puoi dammi qualche chiarimento sti cavolo di puntatori propio nn mi entrano in testa :confused: , nn capisco bene come si unsano con le array...cmq grazie mille

Fenomeno85
19-02-2005, 13:14
1) avevi bagliato a passare la matrice ... quel metodo va bene con un array semplice

2) nei cicli non ci vuole l'uguale

~§~ Sempre E Solo Lei ~§~

terreldavis
19-02-2005, 13:26
nn vorrei essere troppo rompipalle.....ma precisamente perche ho sbagliato a passare la matrice? noto la correzione che mi hai fatto pero nn riesco a capire il motivo.

Fenomeno85
19-02-2005, 14:15
gli array bidimensionali si passano in quel modo

~§~ Sempre E Solo Lei ~§~

tglman
20-02-2005, 22:11
un'altro paio di modi per passare un array bidimensionale magari anche senza conoscere preventivamente le dimensioni possono essere

void function (int * vect[]);
//oppure
void function (int **vect);


è una cosa un pò strana ma se pensi bene una matrice non è nient'altro che un vettore di puntatori.

Ciao....

Black imp
21-02-2005, 04:56
Originariamente inviato da tglman
un'altro paio di modi per passare un array bidimensionale magari anche senza conoscere preventivamente le dimensioni possono essere

void function (int * vect[]);
//oppure
void function (int **vect);


è una cosa un pò strana ma se pensi bene una matrice non è nient'altro che un vettore di puntatori.

Ciao....


a me sembra il secondo il più corretto di tutti quelli qui postati - tre se non sbaglio -

il primo suggerito è sporco perchè implica che si sappia che deve essere passata una matrice [][N] invece la matrice è [N][N] e quindi non c'è information hiding.

Fenomeno85
21-02-2005, 09:28
Originariamente inviato da Black imp
a me sembra il secondo il più corretto di tutti quelli qui postati - tre se non sbaglio -

il primo suggerito è sporco perchè implica che si sappia che deve essere passata una matrice [][N] invece la matrice è [N][N] e quindi non c'è information hiding.

scusa ma la dimensione della matrice la sai comunque se no non potresti lavorarci sopra.

Altra cosa scrivere



void funzione (int *array)
è identico che scrivere
void funzione (int array[])


così è lo stesso discorso per i bidimensionali con l'aggiunta però di del valore nel secondo.

~§~ Sempre E Solo Lei ~§~

tglman
22-02-2005, 16:19
Spesso definire gli array bidimensionali con dimensioni variabili è molto utile,
per esempio si può creare una funzione che cerchi una stringa in un vettore di stinge
del tipo
cerca(char *str,char *vetstr[],nstr_in_vett);

con questa funzione non devi sapere quando programmi il numero di stringhe su cui vai a lavorare ma te lo puoi calcolare mentre lo esegui senza limiti