View Full Version : [C] Aiuto ragazzi per favore
ragazzi dovrei svolgere questo programma in c pero nn so come fare mi potete aiutare?grazie
Data un matrice NxN progettare una function che restituisce tru se la somma di ogni riga è minore dellla somma della riga precedente e la somma di ogni colonna è maggiore o uguale della somma della colonna precedente,false altrimanti!!!
Ragazzi mi basta cola la funzione!!
é un esame che devo fare
isAlreadyInUse
20-01-2008, 16:14
Sono i compitini per domani?
no è un esame di programmazione ho fatto tutti gli esercizi tranne questo!!!quindi all orale me lo chiede di sicuro
isAlreadyInUse
20-01-2008, 16:36
Tattica strategia abnegazione forza
ehi allora puoi aiutarmi,ti ringrazio!!
http://www.hwupgrade.it/forum/showthread.php?t=1631648
In ogni caso puoi porvare a svolgere tu l'esercizio e poi eventualmente possiamo darti una mano.
La funzione è abbastanza semplice, bastano due for annidati per controllare in una direzione e due for annidati per controllare nell'altra, inoltre servono due variabili di appoggio per contenere la somma attuale e quella precedente.
MatRigCre(M, n, m)
for i to m
do A[i]<-0
for i to n
do { for j to m do A[i]=A[i]+M[i][j] }
for i to n
do { if A[i]>A[i+1] then return false }
return true
Questo è quello che ho pensato naturalmente solo per righe pero nn mi funziona mi sto scervellando da 2 giorni!!!!
Ma è in pseudolinguaggio quello vero ?
Non importa fare la somma di tutte le righe e tenerla nella matrice.
Basta tenerti due valori...somma della riga precedente e somma della riga attuale.
In sostanza:
Per le righe da 0 a N-1
{
corrente = fai_la_somma_della_riga_corrente;
se la_riga_corrente > 0 allora
{
se precedente < corrente allora ritorno falso;
}
precedente = corrente;
}
si è uno pseudolinguaggio tanto per capire come è organizzato l algoritmo,senti la tua funzione nn la puoi scrivere anche tu in un pseudolinguaggio perchè cosi nn l ho capita tanta bene,cmq ti ringrazio per la tua disponibilità
marko.fatto
20-01-2008, 18:53
si è uno pseudolinguaggio tanto per capire come è organizzato l algoritmo,senti la tua funzione nn la puoi scrivere anche tu in un pseudolinguaggio perchè cosi nn l ho capita tanta bene,cmq ti ringrazio per la tua disponibilità
quello è pseudolinguaggio :asd:
raga io sto uscendo pazzo aiutatemi un po!!
banryu79
21-01-2008, 10:33
raga io sto uscendo pazzo aiutatemi un po!!
Ti stanno aiutando: prova a implementare lo pseudocodice postato da cionci e a capire cosa fa.
Quello che devi fare non è complesso, e non richiede tanto tempo: mettiti d'impegno e affronta con calma ogni passaggio.
Parti dal post di cionci, studialo, prova a implementarci la tua soluzione e postala, vedrai che aiuti arriveranno.
Non vorrai mica la pappa pronta, no? :O
Cercherò di scriverlo un po' meglio:
int corrente;
int precedente;
int i;
Per i che va da 0 a N-1
{
corrente = fai_la_somma_della_riga(i);
se i > 0 allora
{
se precedente < corrente allora ritorno falso;
}
precedente = corrente;
}
Raga allora ho pensato questo vedete se va bene:
precendente:=0
corrente:=0
for i:=1 to N
forJ:=1 to N
corrente:=corrente+A(i,j)
end for
if precedente < corrente then
falso
else
precedente:= corrente
end if
end for
che ve ne pare?
Manca la condizione su i > 0 (> 1 nel tuo caso). Se la somma della prima riga è minore di zero il tuo ritorna falso.
Non serve l'else perché tanto esci dalla funzione.
perchè devo mettere la condizione su i nn l ho capito
banryu79
21-01-2008, 14:43
Così il tuo pseudocodice torna sempre FALSO se la somma della prima riga è zero o un numero negativo; questo succede perchè hai inizializzato "precedente" a zero e dopo il ciclo for annidato fai un controllo su "corrente" rispetto a "precedente" che non dovrebbe verificarsi per la somma della prima riga (cioè per la prima iterazione del for esterno)
precendente:=0
corrente:=0
for i:=1 to N
for j:=1 to N
corrente:=corrente+A(i,j)
end for
if precedente < corrente then
falso
else
precedente:= corrente
end if
end for
e quindi dove lo devo modificare
il programma che hai scritto esegue solo il controllo delle righe, e funziona solo se la prima riga (e quindi anche le altre) è negativa.
non hai specificato il tipo della matrice, in ogni caso devi inizializzare "precedente" col massimo valore rappresentabile dal tipo della matrice; in alternativa poi assegnare a "precedente" la somma della prima riga, e poi inizi l'iterazione.
O metti un'ulteriore condizione sul controllo in modo che venga effettuato solo se i è maggiore di 0, che mi sembra la soluzione più semplice.
ragazzi ora ho capito grazie quindi cosi funziona per le righe pero il mio esercizio mi dice dicontrollare anche le colonne!!quindi avevo pensato di fare prima le righe cosi e dopo invertevo i for per controllare le colonne,puo andar bene cosi?
Grazie ragazzi mi siete stati davvero d aiuto!!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.