View Full Version : [c++]ordine numeri
ciao.
ho una rikiesta abbastanza elementare da farvi...sorry
se ho int a = 10; int b = 100; int c = 1000;
come faccio a stampare le tre variabili automaticamente decrescente?
avendo solo 3 numeri farei tranquillamente un paio di if
es
if(A>'B' && A>'C') {
etc etc
ma siccome potrei ritrovarmi centinaia di variabili nn so come fare.
thx
Tesinevb
11-01-2006, 05:35
devi usare matrici
sbatti tutto in un vettore, lo ordini nel modo che preferisci (se non conosci algoritmi di ordinamento dai un'occhiata qui (http://en.wikipedia.org/wiki/Sorting_algorithm) e/o googleggia un po') e lo stampi!
...sempre che nella sua semplicità non abbia frainteso la tua richiesta!
'iao
ciao..grazie per le risposte. ho da kiedervi un kiarimento.
potreste mica farmi un esempio di come si applica qsort() (appunto un algoritmo per ordinare) ad un vettore??
grazie tante ancora :D
AbuJaffa
11-01-2006, 15:54
eccolo qua un po di codice:
#include <stdio.h>
#include <stdlib.h>
int cmp (int a, int b)
{
return a-b;
}
int main ()
{
int numbers[]={4.8.6};
int n;
qsort (values, sizeof(numbers), sizeof(int), cmp);
}
l'ho scritto velocemnte senza testarlo. Ciao ciao :D ;)
Un'altra soluzione potrebbe essere usare STL (visto che usi C++)
#include <list>
#include <iostream>
int main(int argc, char** argv)
{
std::list<int> m_list;
m_list.push_back(5);
m_list.push_back(1);
m_list.push_back(9);
m_list.push_back(25);
m_list.push_back(50);
std::list<int>::iterator it;
m_list.sort();
for (it = m_list.begin(); it != m_list.end(); ++it)
std::cout << "Item = " << *it << std::endl;
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
void stampa(int *array, int size)
{
int i;
for (i = 0; i < size; ++i)
printf("%d ", array[i]);
putchar('\n');
}
int main()
{
int numbers[] = {4,8,6,1},
size = sizeof numbers/sizeof numbers[0];
stampa(numbers, size);
qsort(numbers, size, sizeof(int), cmp);
stampa(numbers, size);
return 0;
}
AbuJaffa
14-01-2006, 23:18
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
void stampa(int *array, int size)
{
int i;
for (i = 0; i < size; ++i)
printf("%d ", array[i]);
putchar('\n');
}
int main()
{
int numbers[] = {4,8,6,1},
size = sizeof numbers/sizeof numbers[0];
stampa(numbers, size);
qsort(numbers, size, sizeof(int), cmp);
stampa(numbers, size);
return 0;
}
non vedo la necessità della funzione stampa.
non vedo la necessità della funzione stampa.
Visto che e' un esempio, visualizzo il risultato dell'ordinamento.
Ma ti ci voleva davvero tanto ad arrivarci da solo? :confused:
AbuJaffa
15-01-2006, 11:41
Visto che e' un esempio, visualizzo il risultato dell'ordinamento.
Ma ti ci voleva davvero tanto ad arrivarci da solo? :confused:
Appunto, dato che è un esempio (per scyho) cerca di non incasinare il codice con inutili funzioni. :)
Appunto, dato che è un esempio (per scyho) cerca di non incasinare il codice con inutili funzioni. :)
Scusa, ma scritta da uno che ha postato del codice che si puo' tranquillamente definire spazzatura (non compila nemmeno!), mi viene solo da pensare: "Ma guarda da che pulpito!". :D
Comunque non capisco cosa c'entri tu: se scyho ha problemi ce lo dira'...
AbuJaffa
15-01-2006, 13:50
eccolo qua un po di codice:
#include <stdio.h>
#include <stdlib.h>
int cmp (int a, int b)
{
return a-b;
}
int main ()
{
int numbers[]={4.8.6};
int n;
qsort (values, sizeof(numbers), sizeof(int), cmp);
}
l'ho scritto velocemnte senza testarlo. Ciao ciao :D ;)
Impara a leggere e poi a giudicare. ;)
Il fatto che tu fossi a conoscenza che era probabilmente errato e' un'aggravante, non una giustificazione, ne' mi e' chiaro perche' pensi che del codice scritto in fretta e mai testato possa servire a qualcuno.
Comunque, io non ti giudico perche' non ti conosco.
Ma il codice che posti lo valuto eccome, e mi permetto di aggiungere che se il tuo livello e' questo, e non hai tempo/voglia/umilta' di verificare quello che scrivi, la cosa migliore che puoi fare e' di non inviarlo.
Pace e bene. :cool:
Ziosilvio
15-01-2006, 18:26
int cmp (int a, int b)
{
return a-b;
}
Questo va bene se a e b sono char.
Se invece sono int, a è grande e positivo e b è grande e negativo, allora a-b potrebbe essere negativo per via dell'overflow.
La forma corretta della funzione di confronto fra int quella "artigianale":
int cmp(int a, int b)
{
if (a>b) return 1;
else if (a<b) return -1;
else return 0;
}
EDIT: e poi, giustamente, c'è il fatto che, se cmp deve essere l'ultimo argomento di qsort, allora i suoi argomenti devono essere const void *, e non int... scusate, ogni tanto sbaglio anch'io.
Quindi, in questo caso, cmp diventa:
int cmp(const void *a, const void *b)
{
int n=*((int*)a), k=*((int*)b);
if (n>k) return 1;
else if (n<k) return -1;
else return 0;
}
AbuJaffa
15-01-2006, 20:39
Il fatto che tu fossi a conoscenza che era probabilmente errato e' un'aggravante, non una giustificazione, ne' mi e' chiaro perche' pensi che del codice scritto in fretta e mai testato possa servire a qualcuno.
Comunque, io non ti giudico perche' non ti conosco.
Ma il codice che posti lo valuto eccome, e mi permetto di aggiungere che se il tuo livello e' questo, e non hai tempo/voglia/umilta' di verificare quello che scrivi, la cosa migliore che puoi fare e' di non inviarlo.
Pace e bene. :cool:
Ma non ti sembra di esagerare? http://mastrocane.altervista.org/_altervista_ht/pazzo.gif Non siamo mica in un ufficio e non devo consegnare a nessuno, meno che a te, software efficente e pulito. Ho scritto velocemente quel codice giusto per dare un'idea sul da fare. Poi non ho letto più questa discussione fino alla tua insolente risposta di ieri.
Ma non ti sembra di esagerare? http://mastrocane.altervista.org/_altervista_ht/pazzo.gif Non siamo mica in un ufficio e non devo consegnare a nessuno, meno che a te, software efficente e pulito.
Per fortuna, direi.
Ho scritto velocemente quel codice giusto per dare un'idea sul da fare.
Sul da non fare, direi.
Senti riguardati il thread e fai chiarezza nella tua mente.
Poi non ho letto più questa discussione fino alla tua insolente risposta di ieri.
Non ci sono mie risposte a te in data di ieri. Potresti specificare meglio?
AbuJaffa
15-01-2006, 22:52
ciao..grazie per le risposte. ho da kiedervi un kiarimento.
potreste mica farmi un esempio di come si applica qsort() (appunto un algoritmo per ordinare) ad un vettore??
grazie tante ancora :D
Ho dato un' idea a SCYHO su come funziona il qsort con il codice che ho proposto. Ma scusa non capisco proprio cos'è che non ti va giù. Ti sei irritato perchè mi sono permesso di criticare la tua funzioncina? :rotfl: Se è così chiedo venia, non volevo.
Scusa, ma scritta da uno che ha postato del codice che si puo' tranquillamente definire spazzatura (non compila nemmeno!), mi viene solo da pensare: "Ma guarda da che pulpito!". :D
Comunque non capisco cosa c'entri tu: se scyho ha problemi ce lo dira'...
Dopo questa tua insolente risposta mi viene da pensare solo una cosa: sei un pivello da quattro soldi. Ora se permetti porto le ossa a letto. :D
Ho dato un' idea a SCYHO su come funziona il qsort con il codice che ho proposto.
Intendi quella cosa malscritta e piena di svarioni? Il tuo concetto di idea o suggerimento e' ben diverso dal mio. :rolleyes:
Ma scusa non capisco proprio cos'è che non ti va giù. Ti sei irritato perchè mi sono permesso di criticare la tua funzioncina? :rotfl: Se è così chiedo venia, non volevo.
Non ti preoccupare, non sei in grado di fare una critica seria... :D
Dopo questa tua insolente risposta mi viene da pensare solo una cosa: sei un pivello da quattro soldi. Ora se permetti porto le ossa a letto. :D
Figliolo, io a te non devo dimostrare nulla.
Buona notte e sogni d'oro. :cool:
Per favore...non litigate... Chiaritevi in privato...
Grazie ;)
AbuJaffa
16-01-2006, 20:44
Intendi quella cosa malscritta e piena di svarioni? Il tuo concetto di idea o suggerimento e' ben diverso dal mio. :rolleyes:
Non ti preoccupare, non sei in grado di fare una critica seria... :D
Figliolo, io a te non devo dimostrare nulla.
Buona notte e sogni d'oro. :cool:
:rotfl:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.