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

Pomoc przy sortowaniu tablicy

Ostatnio zmodyfikowano 2010-12-19 15:57
Autor Wiadomość
Marys
Temat założony przez niniejszego użytkownika
Pomoc przy sortowaniu tablicy
» 2010-12-12 16:30:18
Witam,
proszę o pomoc w pewnym programie. Program ma zamieniać pierwszy element parzysty z pierwszym nieparzystym, drugi element parzysty z drugim nieparzystym i tak dalej. Prezentuje to co udało mi się do tej pory zrobić:
C/C++
/*---------------------------------------------------------------*/
/*  Program wczytuje n elementoów ciągu liczb całkowitych {A}    */
/*  i zanienia pierwszy element parzysty z nieparzystym, drugi   */
/*  drugi parzysty z nieparzystym itd.                           */
/*  Program wyswietla wczytany oraz zmodyfikowany ciągi          */
/*---------------------------------------------------------------*/
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
/*---------------------------------------------------------------*/
const int n_max = 15;
void czyt_dane( int & n, int Tab[] );
void pisz_tab( int n, int Tab[] );
void zamiana( int n, int Tab[] );
/*---------------------------------------------------------------*/
int main()
{
    int n, A[ n_max ];
    czyt_dane( n, A );
    clrscr();
    cout << "Wczytany ciag elementów:\n\n";
    pisz_tab( n, A );
    zamiana( n, A );
    cout << "\n\nZmodyfikowany ciag elementow:\n\n";
    pisz_tab( n, A );;
    getch();
    return 0;
}
/*---------------------------------------------------------------*/
void czyt_dane( int & n, int Tab[] )
{
    int i;
    cout << "Podaj rozmiar tablicy: "; cin >> n;
    cout << "\nPodaj elementy ciagu:\n\n";
    for( i = 0; i < n; i++ )
    {
        cout << "A[" << setw( 2 ) << i << "] = ";
        cin >> Tab[ i ];
    }
}
/*---------------------------------------------------------------*/
void zamiana( int n, int Tab[] )
{
    int i, Tab_2[ n_max ], tym;
    int i_p = 0, i_np = n - 1, l_p = 0, l_np = 0;
    for( i = 0; i < n; i++ )
    {
        if( Tab[ i ] % 2 == 0 )
        {
            Tab[ i_p ] = Tab[ i ];
            cout << Tab[ i_p ] << '\t' << l_p << '\n';
           
        }
        else {
            Tab[ i_np ] = Tab[ i ];
            cout << Tab[ i_np ] << '\t' << l_np << '\n';
        }
    }
    i_p = 0;
    i_np = n - 1;
    if( l_p >= l_np )
    for( i = 1; i <= l_p; i++ )
    {
       
    }
    else
    for( i = 1; i <= l_np; i++ )
    {
       
    }
}
/*---------------------------------------------------------------*/
void pisz_tab( int n, int Tab[] )
{
    int i;
    for( i = 0; i < n; i++ )
    {
        cout << "A[" << setw( 2 ) << i << "] = " << Tab[ i ] << endl;
    }
}
Mam problem z l_p i l_np bo jak zrobię w sprawdzaniu parzystości l_p=i oraz l_np=i to zwróci mi ostatnią wartość jakie otrzymało i. Nie wiem może to było dobrze... Siedzę na tym już drugi dzień i brakuje mi pomysłów. Proszę, POMOCY![/i]
P-25092
malan
» 2010-12-12 18:49:50
Wstaw kod w [cpp][/cpp], a potem pogadamy.
P-25104
DejaVu
» 2010-12-13 01:56:39
Program ma zamieniać pierwszy element parzysty z pierwszym nieparzystym, drugi element parzysty z drugim nieparzystym i tak dalej.
C/C++
for( int i = 0; i < rozmiarTablicy - 1; i += 2 )
     zamien( tablica[ i ], tablica[ i + 1 ] );

Jeżeli masz na myśli indeksy parzyste/nieparzyste, a nie wartości to powyższa pętla Ci to załatwia.
P-25123
Marys
Temat założony przez niniejszego użytkownika
» 2010-12-13 02:48:59
Hmmmm... z indeksami byłoby za prosto. W funkcji zamień trzeba coś tam dopisać.
P-25124
DejaVu
» 2010-12-13 03:00:12
Wiesz... ja Ci napisałem de'facto dokładnie to co sformułowałeś w pierwszym poście. Równie dobrze mógłbym napisać tak:
C/C++
#include <vector>
#include <algorithm>

int main()
{
    std::vector < int > dane;
    //...
    for( long i = 0; i < static_cast < long >( dane.size() ) - 1; i += 2 )
         std::swap( dane[ i ], dane[ i + 1 ] );
   
    return 0;
}
i to wszystko. Dokładnie to napisałeś, że chcesz aby Twój program zrealizował. Fakt - nie sortuje to danych - zmienia tylko ich porządek, jednak jest to dokładnie to co chciałeś uzyskać.
P-25125
Marys
Temat założony przez niniejszego użytkownika
» 2010-12-19 15:57:17
Dobra zaktualizowałem trochę kod:
C/C++
zamiana( n, A );
cout << "\n\nZmodyfikowany ciag elementow:\n\n";
pisz_tab( n, A );;
getch();
return 0;
}
/*---------------------------------------------------------------*/
void czyt_dane( int & n, int Tab[] )
{
int i;
cout << "Podaj rozmiar tablicy: "; cin >> n;
cout << "\nPodaj elementy ciagu:\n\n";
for( i = 0; i < n; i++ )
{
    cout << "A[" << setw( 2 ) << i << "] = ";
    cin >> Tab[ i ];
}
}
/*---------------------------------------------------------------*/
void zamiana( int n, int Tab[] )
{
int i, Tab_2[ n_max ], tym;
int i_p = 0, i_np = n - 1, l_p = 0, l_np = 0;
for( i = 0; i < n; i++ )
{
    if( Tab[ i ] % 2 == 0 )
    {
        Tab_2[ i_p ] = i;
        i_p++;
        l_p++;
    }
    else {
        Tab_2[ i_np ] = i;
        i_np--;
        l_np++;
    }
}

i_p = 0;
i_np = n - 1;
if( l_p >= l_np )
for( i = 1; i <= l_p; i++ )
{
    //CO TU WSTAWIĆ?
}
else
for( i = 1; i <= l_np; i++ )
{
   
}
}
/*---------------------------------------------------------------*/
void pisz_tab( int n, int Tab[] )
{
int i;
for( i = 0; i < n; i++ )
{
    cout << "A[" << setw( 2 ) << i << "] = " << Tab[ i ] << endl;
}
}

i teraz w funkcji zamiana muszę jakoś zamieniać pierwszy element parzysty z drugim nieparzysty i nie mam pomysłu :/
P-25336
« 1 »
  Strona 1 z 1