Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-05-2009, 12:43   #1
tookie
Member
 
L'Avatar di tookie
 
Iscritto dal: Apr 2009
Messaggi: 50
[C]ordinamento in c

Ciao a tutti
ho un piccolo problema con questo programma c...premetto che il programma completo è molto più complesso, visto che devo fare tante altre operazioni oltre a quelle che vedete qui...perciò potrei aver dimenticato di cancellare qualcosa del codice

Codice:
#include <stdio.h>
#include <stdlib.h>

int main(int argc,int **argv[]){

int c,i;
void sort(int array[], int dim);

/*dichiarazione vettore*/
int array[c];

/*Inserisco i valori nell'array*/

for(i=0;i<=c;i++){
  array[i]=(int)argv[i+1];
}

/*ordina dal piu piccolo al piu grande*/
sort(array,c);

for (i=0; i<c; i++) {
    printf ("Il %d numero e' = %s\n",i+1,(char *)array[i]);
  }   
   

exit(0);
}

  for (i = (dim - 1); i >= 0; i--) {
    for (j = 0; j < i; j++)   {
      if (array[j] > array[i])     {
        k = array[j];
        array[j] = array[i];
        array[i] = k;
      }
    }
  }
}
Comunque il mio problema è che il metodo sort non ordina i gli interi che gli passo dalla riga di comando. Ho provato con diversi algoritmi insertionSort, bubblesort ecc ma sembra non voler andare, e mi stampa semplicemente i numeri come gli ho inseriti

$ ./nsort 2 1 4
Il 1 numero e' = 2
Il 2 numero e' = 1
Il 3 numero e' = 4

mentre ovviamente dovrebbe stampare

$ ./nsort 2 1 4
Il 1 numero e' = 1
Il 2 numero e' = 2
Il 3 numero e' = 4
tookie è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 13:04   #2
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Ho fatto una prova su un array piccolo ed il sort funziona bene, piuttosto è quel cast a char* che usi nella printf che mi suona abbastanza bruttino (e che tra l'altro, pur compilando, si spacca a runtime con codeblocks). Sostanzialmente, lì stai utilizzando un puntatore ma non hai allocato preventivamente memoria.
Non puoi stampare semplicemente l'intero, senza castarlo a stringa ?
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 13:07   #3
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
Quote:
int main(int argc,int **argv[])
Ma che è sta roba.
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 13:19   #4
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Quote:
Originariamente inviato da ||ElChE||88 Guarda i messaggi
Ma che è sta roba.
Effettivamente...

Inoltre, sta attento agli indici degli array. Se dichiari un array di dimensione c, gli indici effettivamente andranno da 0 a c-1. Il comportamenteo che ottieni utlizzando anche il c-esimo elemento (array[c]) è imprevedibile.
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 13:42   #5
tookie
Member
 
L'Avatar di tookie
 
Iscritto dal: Apr 2009
Messaggi: 50
il problema è che inizialmente avevo fatto cosi

Codice:
int main(int argc,int argv[]){
..........
for (i=0; i<=c; i++)
  {
    printf ("Il %d numero e' = %d\n",i+1,array[i]);
  }   
 .......
}
solo che la stampa veniva

$ ./nsort 7 6 4 9 0 9
Il 1 numero e' = -1080998059
Il 2 numero e' = -1080998057
Il 3 numero e' = -1080998055
Il 4 numero e' = -1080998053
Il 5 numero e' = -1080998051
Il 6 numero e' = -1080998049

e sul momento la soluzione che avevo trovato era quella di fargli il cast e stamparlo come stringa....solo che come hai visto si è rifiutato di ordinare gli input
tookie è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 13:57   #6
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
..
Codice:
#include <stdio.h>
#include <stdlib.h>

void sort(int *array, int length)
{
    int i, j, k;

    for (i = length - 1; i >= 0; --i)
    {
        for (j = 0; j < i; ++j)
        {
            if (array[j] > array[i])
            {
                k = array[j];
                array[j] = array[i];
                array[i] = k;
            }
        }
    }
}

int main(int argc, char** argv)
{
    int c = argc - 1, i;

    int *array = malloc(c * sizeof(int));

    for (i = 0; i < c; ++i)
    {
        array[i] = atoi(argv[i + 1]);
    }

    for (i = 0; i < c; ++i)
    {
        printf("Il %d numero e' = %d\n", i + 1, array[i]);
    }

    sort(array, c);

    for (i = 0; i < c; ++i)
    {
        printf("Il %d numero e' = %d\n", i + 1, array[i]);
    }

    free(array);
    return 0;
}
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 14:28   #7
tookie
Member
 
L'Avatar di tookie
 
Iscritto dal: Apr 2009
Messaggi: 50
grazie mille scusa ma puoi spiegarmi un attimo cosa fa questa riga?

Codice:
 free(array);
tookie è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 14:37   #8
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
Quote:
Originariamente inviato da tookie Guarda i messaggi
grazie mille scusa ma puoi spiegarmi un attimo cosa fa questa riga?

Codice:
 free(array);
Serve a liberare la memoria allocata con
Codice:
int *array = malloc(c * sizeof(int));
In realtà avrei potuto anche fare
Codice:
int array[argc - 1];
ma non tutti i compilatori supportano gli array dinamici (introdotti nel C99) e visto che dichiari le variabili ad inizio funzione immagino il tuo sia tra questi...

Ultima modifica di ||ElChE||88 : 06-05-2009 alle 14:39.
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 14:50   #9
tookie
Member
 
L'Avatar di tookie
 
Iscritto dal: Apr 2009
Messaggi: 50
ah ok, ancora grazie mille;-)
tookie è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Samsung conferma l'arrivo di tre variant...
Sottile, veloce e con un'ottima autonomi...
Il top di gamma compatto di OnePlus &egr...
Modificare l'indirizzo Gmail è finalment...
Perché le GeForce RTX con pi&ugra...
Più tempo online non equivale a più disa...
Amazon Weekend: iPhone 17 Pro, robot asp...
TV OLED 65'' top di gamma al 50%: 144Hz,...
Londra si prepara al terremoto 'intellig...
Scope elettriche in offerta su Amazon: f...
iPhone 17 Pro a un nuovo minimo storico ...
DJI Mini 4 Pro Fly More Combo a 859€ su ...
Roborock in offerta su Amazon: QV 35A e ...
Crisi della RAM: Intel rassicura sul mer...
Dreame taglia i prezzi su Amazon: L40 Ul...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:56.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v