Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - 2 vettori paralleli e ordinati: lower&upper values
Forum - C/C++ - 2 vettori paralleli e ordinati: lower&upper values

Avatar
dimxasinteger (Normal User)
Rookie


Messaggi: 43
Iscritto: 10/11/2007

Segnala al moderatore
Postato alle 15:05
Martedì, 28/10/2008
ho 2 vettori paralleli (codicestudente e votostudente) e li ho ordinati col bubble sort e ora devo trovare l'elemento piu alto e piu basso, con gli eventuali copioni, se tipo ci sn 2 voti uguali e tutti e 2 sn i piu alti devo stamparli tt e 2..è possibile? dveo farlo sia con i piu alti che i piu bassi che ovviamente saranno i primi e gli ultimi elementi dei 2 vettori visto che sono ordinati..

un aiutino raga eheh ce sto a impazzì:D
avevo pensato di usare altri 2 vettori per ogni routine così:

Codice sorgente - presumibilmente C++

  1. //ROUTINE RICERCA DEI MINIMI VOTI
  2. void MIN(int vot[],int codice[],int bound)
  3. {
  4. int k,minn=0,minimi[100],codmin[100];
  5.  
  6. return;
  7. }
  8.  
  9. //ROUTINE RICERCA DEI MASSIMI VOTI
  10. void MAX(int vot[],int codice[],int bound)
  11. {
  12. int k,maxx=0,massimi[100],codmax[100];
  13.  
  14. return;
  15. }



dove bound corrisponde al limite massimo del vettore e k è l'indice da usare in un eventuale for :k:


-grazie risolto con po d ingegno e senza usare altri vettori- basta il cervello eheh ma velo giuro ero in depressione da mancanza di codice !!

Ultima modifica effettuata da dimxasinteger il 29/10/2008 alle 0:33


Visual Basic 6 & Ansi C Student
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6112
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 10:08
Mercoledì, 29/10/2008
Sarebbe interessante vedere come lo hai risolto. Puoi postarci il codice?


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
dimxasinteger (Normal User)
Rookie


Messaggi: 43
Iscritto: 10/11/2007

Segnala al moderatore
Postato alle 11:58
Mercoledì, 29/10/2008
TENENDO CONTO CHE I VETTORI SONO STATI ORDINATI CON BUBBLE SORT:
Codice sorgente - presumibilmente C++

  1. //ROUTINE RICERCA DEI MASSIMI VOTI
  2. void MAX(int vot[],int codice[],int bound)
  3. {
  4. int k,flag=0,massimi=0,codmax=0;
  5. massimi=vot[bound];
  6. codmax=codice[bound];
  7. printf("\nGli Alunni Relativi Ai Codici: ");
  8. for(k=bound;k>=0;k=k-1)
  9.         {
  10.     if(vot[k]<massimi)
  11.                 {break;}
  12.         else if(vot[k]==massimi)
  13.                 {printf("{%d}",codice[k]);
  14.                 flag=1;
  15.         }
  16. }
  17. if(flag==1)
  18.         {printf("\n Hanno Preso Tutti: %d",vot[bound]);}
  19. return;
  20. }
  21.  
  22. //ROUTINE RICERCA DEI MINIMI VOTI
  23. void MIN(int vot[],int codice[],int bound)
  24. {
  25. int k,minimi,codmin,flag=0;
  26. minimi=vot[0];
  27. codmin=codice[0];
  28. printf("\nGli Alunni Relativi Ai Codici: ");
  29. for(k=0;k<=bound;k++)
  30. {        
  31. if(minimi==vot[k])
  32. {
  33. printf("{%d}",codice[k]);
  34. flag=1;
  35. }
  36. else if(vot[k]>minimi)
  37. {break;}
  38. }
  39. if(flag==1)
  40. {printf("\n Hanno Preso Tutti: %d",vot[0]);}
  41. return;
  42. }



il ragionamento è: per i massimi parto dall'ultimo e cerco TUTTI quelli uguali all'ultimo (e quindi piu alto valore del vettore) finche non è minore (vot[k]<massimi) lo so che si poteva fare con un while ed era piu bellino sinceramente, e come vedete l'ho fatto con un for al contrario (dall'ultimo al primo) e per quanto riguarda i minimi del vettore ho fatto il contrario dei massimi: dal primo impostato come "il minimo piu basso" cerco tutti quelli uguali finche non ne trovi uno piu alto (anche questo si poteva fare con un while, ma infatti ora lo cambio) vediamo 1po come rompercisi la testa, tanto ho 3 ore stasera e le dedico totalmente al programmino in questione :D a proposito ciao piero e grazie di essere passato dal mio topic
:D:k:


-una volta fatto anche con il while, vuoi che posto pure quello?-

-dubbio: se esiste i++, esiste pure i-- per il decremento?-

Ultima modifica effettuata da dimxasinteger il 29/10/2008 alle 12:32


Visual Basic 6 & Ansi C Student
PM Quote
Avatar
dimxasinteger (Normal User)
Rookie


Messaggi: 43
Iscritto: 10/11/2007

Segnala al moderatore
Postato alle 12:48
Mercoledì, 29/10/2008
Questa NON la capisco..
ho fatto la routine dei massimi col while, e mi si sono scambiate... :S quella dei massimi funge coi minimi e viceversa..bah !

STATO ATTUALE:
Codice sorgente - presumibilmente C++

  1. //ROUTINE RICERCA DEI MASSIMI VOTI
  2. void MIN(int vot[],int codice[],int bound)
  3. {
  4. int k,flag=0,massimi=0,codmax=0;
  5. massimi=vot[bound];
  6. codmax=codice[bound];
  7. printf("\nGli Alunni Relativi Ai Codici: ");
  8. k=bound;
  9. do
  10. {
  11.      printf("{%d}",codice[k]);
  12.      flag=1;
  13.      k=k-1;
  14. }
  15. while(vot[k]==massimi);
  16. if(flag==1)
  17.         {printf("\n Hanno Preso Tutti: %d",vot[bound]);}
  18. return;
  19. }
  20.  
  21. //ROUTINE RICERCA DEI MINIMI VOTI
  22. void MAX(int vot[],int codice[],int bound)
  23. {
  24. int k,minimi,codmin,flag=0;
  25. minimi=vot[0];
  26. codmin=codice[0];
  27. printf("\nGli Alunni Relativi Ai Codici: ");
  28. for(k=0;k<=bound;k++)
  29. {        
  30. if(minimi==vot[k])
  31. {
  32. printf("{%d}",codice[k]);
  33. flag=1;
  34. }
  35. else if(vot[k]>minimi)
  36. {break;}
  37. }
  38. if(flag==1)
  39. {printf("\n Hanno Preso Tutti: %d",vot[0]);}
  40. return;
  41. }



quando ho tempo provo a fare anche ql dei minimi col while magari ritornano ognuno al suo posto :rotfl:

INFATTI SE VEDETE HO SCAMBIATO SOLO I NOMI DELLE ROUTINE

P.P.S.: non si potrebbe fare tutto con un unica routine dando solo se cercare all'insu o all'ingiù? help :D

Ultima modifica effettuata da dimxasinteger il 29/10/2008 alle 12:53


Visual Basic 6 & Ansi C Student
PM Quote
Avatar
dimxasinteger (Normal User)
Rookie


Messaggi: 43
Iscritto: 10/11/2007

Segnala al moderatore
Postato alle 12:55
Mercoledì, 29/10/2008
ho riprogettato la routine unica, ma se potete darmi una mano sulle 2 postate sopra, siete dei grandi.

ora posto il codice "base" per la routine unica:
Codice sorgente - presumibilmente C++

  1. void RICERCA(int ,int ,int choose)
  2. {
  3. switch(choose)
  4. {
  5. case 2:
  6. //MASSIMI
  7. break;
  8. case 3:
  9. //MINIMI
  10. break;
  11. }
  12. }
  13.  
  14. }



dove al posto del commento andrebbero i codici valevoli per tutti i casi, dando come flag se andare all'ingiu o all'insu la varabile "choose" che se vale 2 deve trovare i massimi e se vale 3 i minimi..help :-? help!!

P.P.P.S. (tra poco finisco le P)
però il mio pensiero è: se ci metto lo switch case siamo punto e a capo: servono 2 routine separate!

Ultima modifica effettuata da dimxasinteger il 29/10/2008 alle 12:58


Visual Basic 6 & Ansi C Student
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6112
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 15:07
Mercoledì, 29/10/2008
1. Si, esiste anche l'operatore di decremento

Codice sorgente - presumibilmente C/C++

  1. int c = 5;
  2. c--;
  3. // c == 4



2. Che guazzabuglio, complicata e poco comprensibile. Perchè non scrivere qualcosa di più semplice come:

Codice sorgente - presumibilmente C++

  1. void Max(int vot[],int codice[],int bound)
  2. {
  3. int max = vot[bound];
  4.  
  5. printf("Gli alunni relativi ai codici: %d",codice[bound]);
  6. for (register int c = bound-1; c >= 0 && vot[c] == max; c--){
  7.   printf("%d ",codice[c]);
  8. }
  9. printf ("hanno tutti preso %d",max);
  10. }



3. In C non si chiamano routine (brrr, mi sà di codice basic), si chiamano funzioni.


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote