|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
[C]Programma esame con le matrici in C
Salve a tutti,siccome tra pochi giorni dovrei fare l'esame di fondamenti d'informatica vorrei sapere se qualcuno di voi saprebbe aiutarmi con questo programma da fare:
In particolar modo potreste aiutarmi nei punti dove dice di riordinare la matrice e dove dice di calcolare la somma di tutti gli elementi delle righe di indice dispari e delle righe di indice pari. Per togliervi ogni dubbio vi posto la traccia completa...ringrazio tutti anticipatamente Si scriva un programma che soddisfi le seguenti specifiche: * - carica da un file di testo una matrice A di numeri reali; * - visualizza a video la matrice caricata A; * - riordina gli elementi della matrice A in ordine crescente rispetto * alla scansione per righe; in pratica dopo l'ordinamento i valori della * matrice dovranno soddisfare la seguente condizione: * A[0][0]<A[0][1]<...<A[0][N-1]<A[1][0]<...<A[1][N-1]<...<A[M-1][N-1] * - visualizza nuovamente a video la matrice A; * - calcola la somma di tutti gli elementi delle righe di indice dispari * (RD) e la somma di tutti gli elementi delle righe di indice pari (RP) * - crea una nuova matrice B con le stesse dimensioni della matrice A; * gli elementi della matrice B sono ottenuti a partire dagli elementi * della matrice A: * -sommando RD agli elementi i cui indici di riga e colonna sono pari * -sommando RP agli elementi i cui indici di riga e colonna sono dispari * -sommando RP-RD agli elementi il cui indice di riga è dispari e * l'indice di colonna è pari * -sommando RD-RP agli elementi il cui indice di riga è pari e l'indice * di colonna è dispari * - visualizza a video la matrice B; * * * Ulteriori specifiche: * - il caricamento della matrice deve essere effettuato chiedendo * all'utente di indicare le dimensioni della matrice (numero di righe M * e il numero di colonne N), quindi leggendo da un file, il cui nome è * anch'esso fornito dall'utente, M*N valori nel seguente ordine: * A[0][0] A[0][1] ... A[0][N-1] A[1][0] ... A[1][N-1] ... A[M-1][N-1] * nel caso in cui il numero di valori presenti nel file sia minore di * M*N il programma termina dando una segnalazione di errore all'utente * - la dimensione massima delle matrici gestite è pari a 100 * - oltre al main si scrivano una funzione per ognuna delle seguenti * operazioni da effettuare: * -> caricamento di una matrice da file * -> ordinamento crescente della matrice rispetto alla scansione per * righe * -> calcolo di RD e RP * -> creazione della matrice B a partire dalla matrice A * -> visualizzazione a video di una matrice Ultima modifica di scarface7 : 08-06-2006 alle 15:27. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
puoi farlo in qualsiasi linguaggio ? pare strano :confuso:
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
devo farlo in linguaggio C
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
se non t'aiuta qualcuno prima magari spiega meglio quali sono i tuoi dubbi. Cosa sai e non sai fare in C ciao |
|
|
|
|
|
|
#5 | |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
Quote:
In particolar modo potreste aiutarmi nei punti dove dice di riordinare la matrice e dove dice di calcolare la somma di tutti gli elementi delle righe di indice dispari e delle righe di indice pari. |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Codice:
int dis = 0, par = 0;
for (i = 0; i < n; ++i)
if (i&1)
for (j = 0; j < m; ++j) dis += mat[i][j]
else
for (j = 0; j < m; ++j) par += mat[i][j]
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers Ultima modifica di shinya : 08-06-2006 alle 16:49. |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
sai ordinare un array ? hai capito quello che t'ha scritto shinya ? io l'ordinamento di una matrice lo farei creando una array lungo righe*colonne, ordinando l'array con un semplice bubble sort e rimettendo i valori ordinati nella matrice. provi a farlo da solo ?
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Burago Molgora
Messaggi: 3991
|
secondo me lo fai con un bubble sort, immaginando che la tua matrice sia tutta su una unica riga... cioè scorri la matrice dalla prima posizione all'ultima... e poi riscrivi in un'altra matrice il risultato! forse nn è la sol migliore ma credo sia un buon modo...
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Feb 2003
Città: GE
Messaggi: 397
|
non è che vorrei rendermi antipatico...ma provare a studiare per fare gli esami non sarebbe una idea?????
__________________
La supposizione e' la madre di tutte le ca**ate! |
|
|
|
|
|
#11 | |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
Quote:
potreste dirmi come fare..per piacere |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Feb 2004
Città: Lecco/Milano
Messaggi: 2863
|
crei un array di dimensione righe*colonne
con 2 cicli for scorri la matrice e carichi i valori delle celle nell'array prendi l'array e lo ordini con un bubble sort reinserisci i dati nella matrice
__________________
C'era un moscerino sul tuo schermo |
|
|
|
|
|
#13 |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
allora ragazzi ho iniziato a scrivere una bozza della funzione ordina..correggetemi dove ho sbagliato:
void ordina(int m[][MAXCOL],int r1,int c1,int ord[][MAXCOL],int *r2,int *c2) { int i,j,temp; for(i=0;i<r1;i++) for(j=0;j<c1;j++){ if(m[i][j]>m[i+1][j+1]){ temp=m[i][j]; m[i][j]=m[i+1][j+1]; m[i+1][j+1]=temp; } } ord[i][j]=m[i][j]; *r2=r1; *c2=c1; } Ultima modifica di scarface7 : 11-06-2006 alle 16:29. |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
non stai lavorando o sperimentando o cazzeggiando ... ci hai chiesto, fino a qualche giorno fa, la soluzione di un problema per un esame, senza nessun tentativo, nessun inizio .. troppo facile così però adesso vedo che hai comiciato a provarci, bravo. Oggi non ero al lavoro (non ho le malattie pagate ma domani (se tutto va bene) un occhio ce lo diamo |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
(ovviamente le () = [] ) ma c'e' qualcosa di poco chiaro nella funzione immagino tu voglia ordinare i dati della matrice "m" e scriverli dentro "ord" ... ma i 2 puntatori finali r2 e c2 a che servono ? il codice dell'ordinamento e' giusto, il classico swap, ma Codice:
ord[i][j] = m[i][j]; Codice:
*r2 = r1; *c2 = c1; ti consiglio di postare il codice con il commento affianco che spiega quello che stai facendo es: Codice:
for( i = 0; i < r1; i++ ) // LOOP SULLE RIGHE
for( j = 0; j < c1; j++ ) // LOOP SULLE COLONNE
...
perche' senno' puoi ordinare direttamente "m" senza dover copiare tutto su "ord" dai che sei sulla buona strada scusa ma niente pappa pronta, se ci arrivi da solo la prossima volta questo argomento sara' un gioco da ragazzi per te |
|
|
|
|
|
|
#16 |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
putroppo ancora non ci riesco se per piacere mi dite come fare..perchè sto perdendo solo tempo e lunedi ho l'esame..grazie
|
|
|
|
|
|
#17 |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
ecco il nuovo codice
void ordina(int m[][MAXCOL],int r,int c)
{ int i,j,k,t,dim,temp; int v[MAXRIG]; for(i=0;i<r;i++) for(j=0;j<c;j++) v[i*j]=m[i][j]; for(k=1;k<(i*j);k++) for(t=0;t<((i*j)-i);t++) if(v[t]>v[t+1]){ temp=v[t]; v[t]=v[t+1]; v[t+1]=temp; m[i][j]=v[t]; m[i][j]=v[t]; } } peccato ke ancora nn funzioni..dov'è l'orrore??? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:46.



















