PDA

View Full Version : [C] Aiuto ragazzi per favore


Davilde
20-01-2008, 16:13
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?

Davilde
20-01-2008, 16:22
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

Davilde
20-01-2008, 16:55
ehi allora puoi aiutarmi,ti ringrazio!!

cionci
20-01-2008, 17:15
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.

Davilde
20-01-2008, 17:22
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!!!!

cionci
20-01-2008, 17:31
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;
}

Davilde
20-01-2008, 17:49
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:

Davilde
21-01-2008, 10:21
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

cionci
21-01-2008, 10:38
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;
}

Davilde
21-01-2008, 11:07
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?

cionci
21-01-2008, 11:22
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.

Davilde
21-01-2008, 14:34
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

Davilde
21-01-2008, 18:47
e quindi dove lo devo modificare

Furla
21-01-2008, 23:58
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.

cionci
22-01-2008, 01:06
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.

Davilde
22-01-2008, 08:55
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?

cionci
22-01-2008, 09:04
Certo che va bene.

Davilde
22-01-2008, 09:50
Grazie ragazzi mi siete stati davvero d aiuto!!!!