Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie alfabetyczne

Ostatnio zmodyfikowano 2018-01-14 18:50
Autor Wiadomość
fenoloftaleina
Temat założony przez niniejszego użytkownika
Sortowanie alfabetyczne
» 2018-01-14 16:10:50
Cześć, mam problem z sortowaniem alfabetycznym po nazwisku danych zapisanych w strukturze. Mianowicie chodzi o to, że zamiast sortować od A-Z sortuje od Z-A. Poniżej kod:

C/C++
const int ilosc_kontaktow = 4;
for( int i = 0; i < ilosc_kontaktow; i++ ) // sortowanie alfabetyczne po nazwisku
{
    if( kontakty[ i ].nazwisko[ 0 ] < kontakty[ i + 1 ].nazwisko[ 0 ] )
    {
       
        numbers Tmp = kontakty[ i ];
        kontakty[ i ] = kontakty[ i + 1 ];
        kontakty[ i + 1 ] = Tmp;
       
       
    }
   
    cout << kontakty[ i ].imie << " ";
    cout << kontakty[ i ].nazwisko << " ";
    cout << kontakty[ i ].numer << endl;
   
}

}


Zmiana tej lini:
if (kontakty.nazwisko[0] < kontakty[i+1].nazwisko[0]) na
if (kontakty.nazwisko[0] > kontakty[i+1].nazwisko[0]) powoduje, że program przestaje sortować alfabetycznie i w dodatku nie wyświetla ostatnich danych tylko 0.
Męczę się z tym już któryś dzień i sam nie potrafię nic już wymyślić. Będę wdzięczny za wszelkiego rodzaju rozwiązanie lub wskazówki.
P-168708
nanoant20
» 2018-01-14 16:53:38
bardzo dużo do poprawienia
od warunków if począwszy i jeżeli się nie mylę to powinny być dwie pętelki
Piszę z palca więc nie jestem pewny do końca, ale mniej więcej to powinno iść tak.
C/C++
if( kontakty[ i ].nazwisko > kontakty[ j ].nazwisko )
{
    temp = kontakty[ i ].nazwisko;
    kontakty[ i ].nazwisko = kontakty[ j ].nazwisko;
    kontakty[ j ].nazwisko = temp;
}
P-168711
fenoloftaleina
Temat założony przez niniejszego użytkownika
» 2018-01-14 17:21:34
Poprawiłem:
C/C++
for( int j = 1, i = 0; j < ilosc_kontaktow; j++, i++ ) // sortowanie alfabetyczne po nazwisku
{
    if( kontakty[ i ].nazwisko[ 0 ] > kontakty[ j ].nazwisko[ 0 ] )
    {
        string temp = kontakty[ i ].nazwisko;
        kontakty[ i ].nazwisko = kontakty[ j ].nazwisko;
        kontakty[ j ].nazwisko = temp;
    }
   
    cout << kontakty[ j ].nazwisko;
   
   
}

Tylko teraz w ogóle nie sortuje.
P-168713
nanoant20
» 2018-01-14 17:49:07
napisałem Ci coś takiego
C/C++
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;
const int MAX = 3;

//deklaracja struktury
struct user {
    string nazwisko;
    int numer;
};

int main()
{
    //Tworzenie obiektu struktury i wypeġnianie------- tablica struktur
    user kontakty[ MAX ] =
    {
        { "Smith", 33 },
        { "Nowak", 35 },
        { "Kowalski", 1 },
    };
    cout << "Wyswietlam strukture user lokalnie" << endl;
    for( int i = 0; i < MAX; i++ )
    {
        cout << "Nazwisko: " << kontakty[ i ].nazwisko;
        cout << " Nr: " << kontakty[ i ].numer << "\n";
    }
    cout << endl << "Sortowanie po nazwisku" << endl;
   
    int j;
    string temp;
    for( int i = 0; i < MAX; i++ )
    {
        for( j =( i + 1 ); j < MAX; j++ ) //testuje pare liczb
        {
            if( kontakty[ i ].nazwisko > kontakty[ j ].nazwisko )
            {
                temp = kontakty[ i ].nazwisko;
                kontakty[ i ].nazwisko = kontakty[ j ].nazwisko;
                kontakty[ j ].nazwisko = temp;
            }
           
        }
        cout << "Nazwisko: " << kontakty[ i ].nazwisko;
        cout << " Nr: " << kontakty[ i ].numer << "\n";
    }
    cout << endl << endl;
   
    return 0;
}
Przeanalizuj sobie
P-168715
fenoloftaleina
Temat założony przez niniejszego użytkownika
» 2018-01-14 18:07:10
Wielkie dzięki, sortowanie działa super. Jeszcze jeden szczególik. Chce wyświetlić po sortowaniu przy nazwisku odpowiednie imie i numer tel. Coś takiego:
C/C++
int j;
string temp;
for( int i = 0; i < ilosc_kontaktow; i++ )
{
    for( j =( i + 1 ); j < ilosc_kontaktow; j++ ) //testuje pare liczb
    {
        if( kontakty[ i ].nazwisko > kontakty[ j ].nazwisko )
        {
            temp = kontakty[ i ].nazwisko;
            kontakty[ i ].nazwisko = kontakty[ j ].nazwisko;
            kontakty[ j ].nazwisko = temp;
        }
       
    }
    cout << kontakty[ i ].imie << " ";
    cout << kontakty[ i ].nazwisko << " ";
    cout << kontakty[ i ].numer << endl;
wyświetla posortowane nazwiska, ale nie właściwie przypisane imię i numer tel
P-168717
nanoant20
» 2018-01-14 18:29:01
pytałeś jak sortować po nazwusku więc napisałem tak. ale to nie problem
zamiast
C/C++
//string temp;
//trzeba stworzyć strukture tymczasową
struct user temp;
dodać jeszcze jeden warunek do if'a powiedzmy tak
C/C++
if(
( kontakty[ i ].nazwisko > kontakty[ j ].nazwisko )
||
( kontakty[ i ].numer > kontakty[ j + 1 ].numer )
)
posortować strukture
C/C++
temp = kontakty[ i ];
kontakty[ i ] = kontakty[ j ];
kontakty[ j ] = temp;
i na końcu  wyswietlić strukture


P-168720
fenoloftaleina
Temat założony przez niniejszego użytkownika
» 2018-01-14 18:50:05
Rzeczywiście, może nie do końca jasno sie określiłem, ale myślałem, że z wypisanie na końcu już dam sobie rade. Tak czy inaczej, po zastosowaniu sie do wskazówek działa jak należy. Dzięki za pomoc :)
P-168722
« 1 »
  Strona 1 z 1