Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Primo Anno
 Programmazione
 Aiuto esercizio progr (partizionamento array)

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista Inserisci Faccine
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Smilies
Approvazione [^] Arrabbiato [:(!] Bacio [:X] Bevuta [:273]
Caldo [8D] Compiaciuto [8)]    
compleanno [:269]
Davvero Felice [:D] Diavoletto [}:)] Disapprovazione [V] Domanda [?]
Felice [:)] Fumata [:29] Goloso [:P] Imbarazzato [:I]
Infelice [:(] Morte improvvisa da [:62]
Morto [xx(] Occhio Nero [B)] Occhiolino [;)] Palla 8 [8]
pc [:205]    
Riproduzione [:76]
Scioccato [:O]      

   Allega file
  Clicca qui per inserire la tua firma nel messaggio.
Clicca qui per sottoscrivere questa Discussione.
    

V I S U A L I Z Z A    D I S C U S S I O N E
easley Inserito il - 17/12/2014 : 16:48:41
Salve avrei alcuni problemi con l'output del vettore partizionato,in pratica non avviene. Si accettano anche consigli su miglioramenti o eventuali errori commessi. Di seguito ho postato il codice in c. Grazie in anticipo

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


using namespace std;


int main(){
printf("Pratizionamento array \n\n");

int n,num,temp;

printf("quanti numeri vuoi inserire? ");
scanf("%d",&n);

int a[n];

printf("inserisci valori array \n");
for(int i=0;i<n;i++){
printf("valore %d :",i+1);
scanf("%d",&a[i]);
}


printf("Inserisci numero per creare partizione ");
scanf("%d",num);

int i=0,j=n;

do {

while(a[i]<=num) i=i++;
while(a[j]>num) j=j--;
if(i<=j){
temp=a[i];
a[i]=a[j];
a[j]=temp;

i=i++;
j=j--;}
}while(i<=j);

for(int k=0;k<n;k++){
printf(" %d ",a[k]);
}
system("pause");
}
7   U L T I M E    R I S P O S T E    (in alto le più recenti)
easley Inserito il - 20/12/2014 : 10:25:32
perfetto,grazie mille per la tua gentilezza!
genius Inserito il - 19/12/2014 : 15:17:51
Nel tuo programma i due cicli di scorrimento di i e j potevano incrociarsi ed inoltre se non si incrociavano, il programma andava in loop (o in crash) per l'assenza di verifiche sui limiti dell'array.

Comunque, essendo 'found' una variabile booleana, accetta qualsiasi valore booleano, sia che direttamente si tratti di un true o di un false, sia che si utilizzi una funzione o un'espressione che ritorni un valore booleano. In questo caso l'espressione "a[j] <= num" resistuisce true se a[j] è minore o uguale a num, false altrimenti.

diciamo che scrivere
found = a[j] <= num;
equivale a scrivere

if(a[j] <= num)
    found = true;
else
    found = false;
easley Inserito il - 19/12/2014 : 10:54:15
grazie mille per il tuo tempo ed il tuo aiuto! Ho capito tutto del tuo programma,solo che ancora non capisco cosa c'era di sbagliato nel mio xD

solo una cosa,nella parte di codice :
bool found = false;
for(int j = n - 1; j > i && !found; j--) {
found = a[j] <= num;
}

if(found==true ) ...

solo "found = a[j] <= num;" non mi è tanto chiaro
genius Inserito il - 18/12/2014 : 16:08:35
Citazione:
Messaggio inserito da easley

In pratica: dato un array di elementi inserito da tastiera(a[n]), viene chiesto un valore (sia interno che esterno all'array) "num",secondo il quale viene effettuata una partizione,non necessariamente ordinata in modo crescente o decrescente,dove a sinistra vengono specificati i valori minori e a destra quelli maggiori,o anche,avevo pensato successivamente,in due output diversi(tipo: "numeri maggiori:..numeri minori:..")



Ho rivisto e corretto il tuo codice. In fase di visualizzazione uso il numero pivot (num) per suddividere visivamente le due parti dell'array.

Chiedi pure se qualcosa non ti è chiara.


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


using namespace std;


int main(){
    printf("Pratizionamento array \n\n");

    int n,num,temp;

    printf("quanti numeri vuoi inserire? ");
    scanf("%d",&n);

    int a[n];

    printf("inserisci valori array \n");
    for(int i=0;i<n;i++){
        printf("valore %d :",i+1);
        scanf("%d",&a[i]);
    }


    printf("Inserisci numero per creare partizione ");
    scanf("%d",&num);

    unsigned int i = 0;
    unsigned int j = n - 1;

    for(; i < j; i++) {
        if (a[i] > num) {
            bool found = false;
            for(; !found && j > i; j--) {
                found = a[j] <= num;
            }

            if(found) {
                temp = a[i];
                a[i] = a[j + 1];
                a[j + 1] = temp;
            }

        } 
    }

    unsigned int k = 0;
    for(; a[k] <= num && k < n; k++){
        printf("%d ",a[k]);
    }
    printf("<%d> ", num);
    for(; k < n; k++){
        printf("%d ",a[k]);
    }
    printf("\n");
}
easley Inserito il - 17/12/2014 : 20:58:02
In pratica: dato un array di elementi inserito da tastiera(a[n]), viene chiesto un valore (sia interno che esterno all'array) "num",secondo il quale viene effettuata una partizione,non necessariamente ordinata in modo crescente o decrescente,dove a sinistra vengono specificati i valori minori e a destra quelli maggiori,o anche,avevo pensato successivamente,in due output diversi(tipo: "numeri maggiori:..numeri minori:..")
easley Inserito il - 17/12/2014 : 20:53:37
Sisi,esatto. Mi scuso per non aver chiarito bene il funzionamento
genius Inserito il - 17/12/2014 : 17:49:11
Ciao, posso chiederti cosa intendi per partizionamento?

update:
ho provato a compilare ed eseguire il codice. Come consiglio ti direi di rivedere per bene i "bound check" sull'array (i potrebbe superare la dimensione dell'array sia nel ciclo interno ("while(a[i]<=num)") sia in quello esterno ("while(i<=j") così come j può assumere valori negativi. Inoltre j è inizializzato a un valore di indice "out of bound".

per il resto intuisco che il partizionamento per te è basato su un pivot, per cui tutti gli elementi iniziali del vettore sono minori o uguali ad esso, e tutti quelli finali sono maggiori. corretto?

Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,05 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000