Poziom 5, Lekcja 43 - Wskaźniki
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Poziom 5, Lekcja 43 - Wskaźniki

AutorWiadomość
Temat założony przez niniejszego użytkownika
Poziom 5, Lekcja 43 - Wskaźniki
» 2019-06-26 19:14:09
Cześć udało mi się napisać PD lecz nie wiem czy o to do końca chodziło. Od dłuższego czasu uczę się C++, wcześniej C, lecz wskaźniki to dla mnie trochę pięta achillesowa

Oto mój kod:
C/C++
#include <iostream>

using namespace std;

void sortuj( int * begin, int * end )
{
    int size = end - begin;
    for( int i = 0; i < size; ++i ) {
        for( int j = 0; j < size - 1; j++ ) {
            if( begin[ j ] < begin[ j + 1 ] )
                 swap( begin[ j ], begin[ j + 1 ] );
           
        }
    }
}

void wypisz( int * begin, int size )
{
    while( size > 0 )
    {
        cout << * begin << ' ';
        begin++;
        size--;
    }
}

int main()
{
    int tab[ 10 ] = { 0, 9, 1, 3, 8, 2, 6, 7, 5, 4 };
    sortuj( tab, tab + 10 );
    wypisz( tab, 10 );
   
    cout << '\n';
   
    int tab2[ 16 ] = { 9, 7, 8, 6, 5, 4, 4, 0, 9, 6, 7, 1, 6, 3, 1, - 100 };
    sortuj( tab2, tab2 + 15 );
    wypisz( tab2, 15 );
}


*Edit
A i jeszcze taki mały mankament, funkcja sortuje od największej do najmniejszej, a w podanym wyniku od najmniejszej do największej, ale to już jest mały szczegół.
P-174838
» 2019-06-26 20:29:49
Do końca na pewno nie o to chodziło, w końcu było napisane
postaraj się uniknąć przechodzenia na wskaźnik na początek i ilość elementów.
Twoje rozwiązanie też jest poprawne, ale jak masz problemy ze wskaźnikami, to każda okazja jest dobra żeby ten problem rozwiązywać.
P-174839
Temat założony przez niniejszego użytkownika
Dobrze?
» 2019-06-27 16:39:38
O taką funkcje sortującą chodziło ?
C/C++
void sortuj( int * begin, int * end ) {
    int size = end - begin;
    for( int i = 0; i < size; ++i ) {
        for( int * p = begin; p != end - 1; p++ ) {
            if( * p < *( p + 1 ) )
                 swap( * p, *( p + 1 ) );
           
        }
    }
}
P-174844
» 2019-07-26 23:22:51
Funkcja nie przechodzi testu z liczbą -100 w tablicy...
Bardzo proszę wskazówki :)

C/C++
#include <iostream>
#include <ctime>
#include <cmath>
#include <cstring>
#include <time.h>
#include <windows.h>
using namespace std;

void sortuj( int * begin, int * end )
{
   
    int n = * end - * begin;
    int zm;
   
    for( int i = 0; i < n; i++ )
    {
        for( int * j = begin; j < end; j++ )
        {
            if( *( j + 1 ) <* j )
            {
                zm = * j;
                * j = *( j + 1 );
                *( j + 1 ) = zm;
            }
        }
    }
}



void wypisz( int * begin, int size )
{
    while( size > 0 )
    {
        std::cout << * begin << ' ';
        ++begin;
        --size;
    }
}
int main()
{
   
    int tab[ 10 ] = { 0, 9, 1, 3, 8, 2, 6, 7, 5, 4 };
    sortuj( tab, tab + 10 );
    wypisz( tab, 10 );
   
    std::cout << '\n';
   
    int tab2[ 16 ] = { 9, 7, 8, 6, 5, 4, 4, 0, 9, 6, 7, 1, 6, 3, 1, - 100 };
    sortuj( tab2, tab2 + 15 );
    wypisz( tab2, 15 );
   
   
    return 0;
   
}

P-174949
» 2019-07-27 00:31:28
Za dużo liczb sortujesz.
P-174950
» 2019-07-27 00:48:02
Niestety nie rozumiem podpowiedzi, kombinowałem z warunkami pętli i instrukcji if na różne sposoby, działa jak należy jak usunę minusa, próbowałem funkcją swap i efekt ten sam, zgłupiałem :)
P-174951
» 2019-07-27 01:02:25
działa jak należy jak usunę minusa
Nie działa jak należy. Co najwyżej nie możesz zaobserwować, że działa błędnie. -100 jest poza zakresem, który masz posortować.
P-174952
» 2019-07-27 09:55:29
@wojcioo
w funkcji void sortuj
C/C++
int n = * end - * begin;
//powinno byc
int n = end - begin;
w int main()
zobacz jak robisz z tab[ 10 ]
i to samo zrób z tab2[ 16 ]
P-174953
« 1 » 2
 Strona 1 z 2Następna strona