PDA

View Full Version : Matrice quadrata


Misagi
17-02-2005, 17:12
Salve, volevo sapere...come posso riempire una matrice quadrata a banda con un indice di sparsità dell'80% con il linguaggio c ?
:muro:

Misagi
17-02-2005, 17:33
Up :muro: :muro: :muro: è mlto urgente....:cry:

Fenomeno85
17-02-2005, 17:36
ehm se mi spieghi cosa vuoi fare in maniera + semplice ti posso aiutare.

Cmq per dichiarare e scorre una matrice guarda il codice che ti ho postato


#include <stdio.h>

const N 10

int main (void){
int MatrQ [N][N];
for (int i=0;i<N;i++){ //scorri le righe
for (int j=0;j<Nj++){ //scorri le colonne
MatrQ [i][j] = valore;
}
}
return (0);
}


~§~ Sempre E Solo Lei ~§~

Misagi
17-02-2005, 17:39
Deve essere riempita a caso e i numeri diversi da zero devono esserne solo l'80 %

Fenomeno85
17-02-2005, 17:58
capito lo faccio 10 min e te lo posto

~§~ Sempre E Solo Lei ~§~

Misagi
17-02-2005, 18:06
Okey grazie MILLE ;) ;) ;)

Fenomeno85
17-02-2005, 18:28
#include <stdio.h>
#include <windows.h>
#include <time.h>

#define N 5

int main (void){
int iReg = N*N*0.8; //indici di sparsità del 80%
int iApp=0; //variabile di appoggio per sapere quanti zero si sono inseriti
int MatrQ [N*N]; // matrice quadrata
int iVal;
srand(time(NULL));

/* riempimento dell'array con valori casuali */
for (int i=0;i<N*N;i++){
MatrQ [i] = rand ();
if (MatrQ [i]== 0){
if (iApp == iReg){ /* abbiamo già inserito iReg 0 */
do{
MatrQ[i] = rand();
}while (MatrQ[i] != 0);
}
else iApp++;
}
}

/* inserimento dei rimanenti zeri */
while (iApp < iReg){
iVal = rand()%(N*N);
if (MatrQ [iVal] != 0){
MatrQ [iVal] =0;
iApp++;
}
}

i=1;
for (int j =0;j<N*N;j++){
printf ("%d\t",MatrQ[j]);
if (j == N*i-1){
i++;
printf ("\n");
}
}


system ("PAUSE");
return (0);
}


~§~ Sempre E Solo Lei ~§~

Fenomeno85
17-02-2005, 18:33
ho lavorato su un array per semplificare di molto il problema

~§~ Sempre E Solo Lei ~§~

Misagi
17-02-2005, 18:56
Non sò come ringraziarti......GRAZIE MILLEEEEEEEEEEE :)

Fenomeno85
17-02-2005, 18:59
una birra va + che bene :D

scherzo buon lavoro :)

se hai problemi o dei dubbi chiedi pure ;)

~§~ Sempre E Solo Lei ~§~

Fenomeno85
18-02-2005, 08:51
ho apportato una modifica cioè se vuoi che gli elementi siano compresi tra tra il valore -VAL e + VAL


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

#define N 10
#define VAL 30 // range dei valori

int expo (int exp){
if (exp % 2 == 0) return 1;
return -1;
}


int main (void){
int iReg = N*N*0.8; //indici di sparsità del 80%
int iApp=0; //variabile di appoggio per sapere quanti zero si sono inseriti
int MatrQ [N*N]; // matrice quadrata
int iVal;
srand(time(NULL));

/* riempimento dell'array con valori casuali */
for (int i=0;i<N*N;i++){
iVal = rand()%VAL;
MatrQ [i] = expo(iVal) * iVal;
if (MatrQ [i]== 0){
if (iApp == iReg){ /* abbiamo già inserito iReg 0 */
do{
MatrQ[i] = rand();
}while (MatrQ[i] != 0);
}
else iApp++;
}
}

/* inserimento dei rimanenti zeri */
while (iApp < iReg){
iVal = rand()%(N*N);
if (MatrQ [iVal] != 0){
MatrQ [iVal] =0;
iApp++;
}
}

i=1;
for (int j =0;j<N*N;j++){
printf ("%d\t",MatrQ[j]);
if (j == N*i-1){
i++;
printf ("\n");
}
}


system ("PAUSE");
return (0);
}


~§~ Sempre E Solo Lei ~§~