Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [C++]Ordinare array

  1. #1

    [C++]Ordinare array

    Cia a tutti.
    Una domanda:
    Io ho una matrice e voglio ordinare le sue righe secondo un certo criterio
    .Tutto ciò è possibile(immagino proprio di si)??,come??

    Io faccio una funzione del tipo:

    quicksort(int X[][],int sx,int dx){
    int y=sx,j=dx;
    int *p=*(X+((sx+dx)/2));
    in *tmp;

    do{
    while((*y>calcola_somma(*(X+i)))&&(i<dx))i++;
    while((calcola_somma(*(X+i))<*y)&&(j>sx))j--;

    if(i<=j){
    tmp=*(X+i);
    //inizializzo un punatore in modo che punti alla riga X[i]
    *(X+i)=*(X+j);
    //qui vorreii che le 2 righe si scambiassero
    *(X+j)=tmp;
    i++;
    j--;
    }
    }while(i<=j);


    etc....
    Gli errori dati sono questi...
    In function `void ordina(int (*)[10], int, int)':
    ISO C++ forbids assignment of arrays
    non-lvalue in assignment

    mi viene fin da dire CHIARAMENTE!!
    So benissimo i tipi di errori che ho fatto,ma la domanda è come potrei farlo,perche veramente non ne salto fuori.


    Grazie,Ciao
    Pausaciccha :tongue:

  2. #2
    usa l'algo standard sort(beg, end) incluso in <algorithm>!
    E 100 % bug-free
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  3. #3
    grazie per la risposta
    Pero essendo dei programmi di "prova" volevo implementarli io,cosi ,tanto per imparare e avere piu dimenstichezza :tongue:
    Ciao,Pausaciccha

  4. #4
    ehm...invece di passare l'array...potresti passare il puntatore all'array

  5. #5
    alla funzione viene gia passato il puntatore all'array :master:
    il problema è che cerco di cambiare gli indirizzi di due puntatori ad array.Che è sbagliatissimo(almeno credo!!! :gren: ).Non so proprio come implementare sta funzione!!


    Ti ho spedito qua quel mandrillo di aserena???

    Ciao e grazie,
    Pausaciccha :tongue:

  6. #6
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    33
    come saprai vettori vengono memorizzati per righe. quindi per ordinare un array devi usare l'algoritmo bubbleshort come segue:

    int scambia(in&a, int&b){
    int c = a;
    a = b;
    b = a;
    }

    int bubbleshort(int v[],int n){
    for(int i = n-1;i>0; i--) //ordinamento crescente
    for(int i = n-1; i>0 ; i--)
    for(int j = 0; j<i ; j++)
    if(v[j]>v[j+1])
    scambia (v[j],v[j+1]);
    }


    int main(){
    const int MAX = 10;
    int v[MAX],int nelem;
    cout<<"quanti elementi?";
    cin>>nelem
    bubbleshort(v, nelem);
    cout<<'\n';
    }

  7. #7
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    33
    c'è un for (int i= n-1; ..........) DI TROPPO

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    141
    io ho provato modificandolo in modo tale da immettere io i 10 valori ma non va!!!!!!!!

    #include <iostream>
    using namespace std;


    int scambia(int &a, int &b){
    int c = a;
    a = b;
    b = a;
    }

    int bubbleshort(int v[],int n){
    for(int i = n-1;i>0; i--) //ordinamento crescente
    for(int j = 0; j<i ; j++)
    if(v[j]>v[j+1])
    scambia (v[j],v[j+1]);
    }


    main(){
    int v[10];
    cout<<"digita";
    for(int i=0;i<10;i++)
    cin>>v[i];
    bubbleshort(v,10);
    for(int i=0;i<10;i++)
    cout<<v[i];
    cout<<'\n';
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    141
    TROVATO L'ERRORE!!!!

    #include <iostream>
    using namespace std;


    int scambia(int &a, int &b){
    int c = a;
    a = b;
    b = c; // qui era sbagliato !!!!
    }

    int bubbleshort(int v[],int n){
    for(int i = n-1;i>0; i--) //ordinamento crescente
    for(int j = 0; j<i ; j++)
    if(v[j]>v[j+1])
    scambia (v[j],v[j+1]);
    }


    main(){
    int v[10];
    cout<<"digita";
    for(int i=0;i<10;i++)
    cin>>v[i];
    bubbleshort(v,10);
    for(int i=0;i<10;i++)
    cout<<v[i];
    cout<<'\n';
    }

  10. #10
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    33
    si hai ragione mi sono sbagliato nello scambia . errore di distrazione :adhone:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.