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

R. 43 - prośba o sprawdzenie zadania domowego

Ostatnio zmodyfikowano 2019-03-31 21:25
Autor Wiadomość
rottingham
Temat założony przez niniejszego użytkownika
R. 43 - prośba o sprawdzenie zadania domowego
» 2019-01-28 01:47:39
Cześć!

Udało mi się rozwiązać zadanie domowe z rozdziału 43. Mam ogromną prośbę o sprawdzenie czy wszystko jest wykonane poprawnie a przede wszystkim prosiłbym o jakiekolwiek uwagi dotyczące kodu.

Czy na obecnym poziomie mogę to zrobić z mniejszą ilością zmiennych?

C/C++
void sortuj( int * begin, int * end )
{
    int iElementow = end - begin;
   
   
    int i = 0;
    int j = 1;
    int k = 0;
    int l;
   
    while( j < iElementow )
    {
        if( *( begin + j ) < *( begin + i ) )
        {
            i = 0 + j;
        }
       
        j++;
       
        if( j == iElementow )
        {
            l = *( begin + i );
            *( begin + i ) = *( begin + k );
            *( begin + k ) = l;
            k++;
            i = k;
            j = k + 1;
        }
    }
}
P-173728
pekfos
» 2019-01-28 08:52:45
Czy na obecnym poziomie mogę to zrobić z mniejszą ilością zmiennych?
Wewnątrz sortuj() postaraj się uniknąć przechodzenia na wskaźnik na początek i ilość elementów.
Co znaczy nie używaj indeksów.
P-173729
rottingham
Temat założony przez niniejszego użytkownika
» 2019-01-30 17:01:07
Czyli nie można w ogóle używać dereferencji, która jest równoważna z operatorem indeksowania?
P-173808
pekfos
» 2019-01-30 18:12:56
Nie da się nic zrobić z danymi bez dereferencji. Gdy wyznaczasz ilość elementów, nie wykorzystujesz wiedzy o wskaźnikach. Używasz ich wtedy po prostu jak tablicy ze znanym rozmiarem. Zadanie nie mówi, żebyś nie używał operatora indeksowania, bo takie wymaganie można by łatwo oszukać, tak jak to zrobiłeś.
P-173809
rottingham
Temat założony przez niniejszego użytkownika
» 2019-01-30 18:23:02
Czyli muszę całkowicie przeformułować warunek pętli i ta linia kodu
int iElementow = end - begin;
nie ma prawa bytu w poprawnie wykonanym zadaniu?
P-173810
pekfos
» 2019-01-30 18:26:46
Jedyna zmienna int jest potrzebna do zamiany liczb miejscami.
P-173811
rottingham
Temat założony przez niniejszego użytkownika
» 2019-02-06 16:07:20
Cóż... Wracam do tematu od kilku dni i nie do końca rozumiem co i z czym. Udało mi się napisać funkcję, która znajduje najniższą liczbę.

Proszę tylko o jedną odpowiedź: czy idę dobry tropem?

C/C++
void sortuj( int * begin, int * end )
{
    int nLiczba = * begin;
   
    do
    {
       
        if( nLiczba > * end )
        {
            nLiczba = * end;
           
            * end = * begin;
           
            if( * begin < nLiczba ) //Zabezpieczenie: gdy pierwsza liczba jest najnizsza, aby nie byla pominieta
                 continue;
            else
                 * begin = nLiczba;
           
        }
        end--;
    } while( end != begin );
   
    cout << nLiczba << endl;
    cout << endl;
    for( int i = 0; i < 10; i++ )
         cout << begin[ i ] << endl;
   
}


int main()
{
    int tab[ 10 ] = { - 19, - 13, 6, 4, - 10, 7, 6, 3, 4, - 17 };
    sortuj( tab, tab + 10 );
}

EDIT.
Usunąłem z kodu zmienną int i jako niepotrzebną.
P-173890
pekfos
» 2019-02-06 17:26:09
Przekraczasz zakres tablicy, odwołując się do elementu po adresem end. Jak w sumie ma działać ten twój algorytm? Nie tracisz przypadkiem informacji przez te niepełne zamienianie elementów?

Udało mi się napisać funkcję, która znajduje najniższą liczbę.
I gdzie masz tę funkcję?
P-173891
« 1 » 2 3 4
  Strona 1 z 4 Następna strona