PDA

Visualizza la versione completa : Algoritmo "Eseguire H volte la procedura di spostamento e ogni volta aumentare il val


giovd1
02-04-2012, 17:33
ciao a tutti ,spero qualcuno possa aiutarmi,
ho davanti questo esercizio :

Allocare dinamicamente una matrice di interi didimensioni specificatedall’utente
in fase di esecuzione. Inizializzare tutti glielementi della matrice a zero.
Definire un puntatore all’elemento (0,0).
Scrivere un algoritmo che sposti il puntatore in posizione (i,j) , con i,j numeri
casuali non negativi e minori delle dimensioni della matrice). Eseguire H volte
(con H richiesto dall’ utente in fase di esecuzione) la procedura di spostamento
e ogni volta aumentare il valore della casella di (i+j). Stampare a video la matrice


ho utilizzato questa operazione per incrementare *(*(mat+i)+j)=i+j;
ma essendo Richiamato H volte , nel momento in cui si ripete lo stesso valore (i,j)
l elemento della matrice non si va a sommare con quello precedentemenet acquisto in quella determinata posizione.
ho provato sia con degli if che con dei while ,utilizzando dei nuovi paramentri temporani per memorizzare i valori di i e j per confrontarli e modificare l istruzione in
*(*(mat+i)+j)=(i+j)*2 ; ma non ci sono riuscito!

vi prego aiutatemi!

#include <stdlib.h>
#include <stdio.h>
#include<time.h>

int main()


{
int**mat,righe,colonne,r,c,H,k;


printf(" quante righe ha la matrice ? ");
scanf("%d",&righe);
printf(" quante colonne ha la matrice ? ");
scanf("%d",&colonne);
mat = (int**) malloc (righe *sizeof (int*)); /*allocamento*/
for (r=0; r<righe ; r++)
{ mat[r]= (int*)malloc (colonne* sizeof (int));}
printf("\n");


for(r=0;r<righe;r++)
{
for(c=0;c<colonne;c++)
{
mat[r][c]=0;}}

printf("la matrice ha tutti gli elementi a zero " );
printf("\n");
for(r=0;r<righe;r++){
for(c=0;c<colonne;c++){
printf("%3d", mat[r][c]);}
printf("\n");}

printf( "quante volte vuoi spostare il puntatore ? ");
printf("\n");
scanf("%d",&H);

srand(time(NULL));

for(k=0;k<H;k++)
{

int i=(int)((float)righe*rand()/RAND_MAX);
int j =(int)((float)colonne*rand()/RAND_MAX);

printf("\n");
printf(" il puntatore si e' spostato nella posizione %d %d ", i ,j);
printf("\n");


printf("la matrice nuova e' " );
printf("\n");


for(r=0;r<righe;r++)
{

for(c=0;c<colonne;c++){


*(*(mat+i)+j)=i+j;
printf("%3d",mat[r][c]);}
printf("\n");
};

}









for (r=0; r<righe ; r++)
free (mat[r]);
free (mat);
}

giovd1
04-04-2012, 14:11
HO RISOLTO DA SOLO....
posto la soluzione caso mai servisse a qualcuno......
grazie lo stesso a tutti quelli che hanno letto il post .


era na ca**ata......dalla serie a volte si pensano a 100 cose piu complicate piuttoste che ad una semplice...

pre = *(*(mat+i)+j) ;

*(*(mat+i)+j)=i+j+pre;

giovd1
04-04-2012, 14:20
....mi correggo......

w l aritmetica dei puntatori....
non serve l int pre....


*(*(mat+i)+j) += (i+j);

Loading