• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanko z c++ problemik

42 Warsaw Coding Academy
0 głosów
167 wizyt
pytanie zadane 11 grudnia 2018 w C i C++ przez Padoski Użytkownik (990 p.)

Siemka, chcialem napisac program na wskaznikach w ktorym uzytkownik wpisuje  10 cyfr a nastepnie program wypisuje z nich najwiekszą i najmniejszą. Czy robie to dobrze na wskaznikach, czy mozna inaczej. ? Cos w kodzie nie dziala(kompiluje się) ponieważ wypisuje mi randomowe liczby. Czy warunek jest dobry ?

#include <iostream>

using namespace std;

void najliczba(double *x);

int main()
{
    double tab[10];
    cout << "Podaj 10 liczb: " << endl;
    for(int i=0;i<10;i++)
    {
        cin>>tab[i];
    }
    najliczba(tab);
    return 0;
}
void najliczba(double *x)
{
    double maxymalna, minimalna;
    for(int i=0;i<10;i++)
    {
        if(x[i]<x[i+1])
        maxymalna=x[i+1];
    }
    cout<<"Najwieksza liczba sposrod podanych to: "<<maxymalna<<endl;
    for(int i=0;i<9;i++)
    {
        if(x[i]<x[i+1])
        maxymalna=x[i+1];
    }
    for(int j=0;j<9;j++)
    {
        if(x[j]>x[j+1])
        minimalna=x[j+1];
    }
    cout<<"Najmniejsza liczba sposrod podanych to: "<<minimalna<<endl;

}

 

 

1 odpowiedź

0 głosów
odpowiedź 11 grudnia 2018 przez PlusPlus Nowicjusz (220 p.)

 

  • int j=0;j<9;j++

    a w innym miejscu 10 zamiast 9. Wiesz, że numerujemy od zera, ale chyba chwilowo zapomniałeś

  • Ta druga pętla to chyba nieskasowana kopia?

  • Kluczowe, program podaje błędne wyniki względem oczekiwanych, ponieważ algorytm szukania minimum i maksimum jest troszkę inny. Spróbuj przeanazlizować co sie dzieje w tych pętlach, a zobaczysz, że te liczby które ci wyskakują mają pewną zasade - tylko, że inną niż chciałeś uzyskać. Klasyczny błąd - sam go osobiście przerabiałem podczas nauki c++

Podpowiem ci: dla liczb 1,1,1,4,1,1,1,2,1,1 otrzymasz "maksimum" 2, bo nadpisujesz wartość 4 (porównujesz wyłącznie z jedynką ignorując co było wcześniej).

Rozwiązanie: Przed pętlą robisz max=x[0], a później porównujesz kolejne elementy ze zmienną max i gdy znajdziesz coś większego, to wtedy zapisać to pod zmienną max

Z minimum będzie podobnie

komentarz 11 grudnia 2018 przez Padoski Użytkownik (990 p.)

dzieki zrozumialem, mam jeszcze pytanko, czy cos tutaj wiecej da sie zrobic na wskaznikach, ponieważ w poleceniu mam by wykonac to zadanie na wskaznikach dla tablicy 10 elementowej. Czy cos na wskaznikach oplacalo by sie czy wystarczy to co zrobilem? wyslam kod

#include <iostream>

using namespace std;

void najliczba(double *x);

int main()
{
    double tab[10];
    cout << "Podaj 10 liczb: " << endl;
    for(int i=0;i<10;i++)
    {
        cin>>tab[i];
    }
    najliczba(tab);
}
void najliczba(double *x)
{
    double maxymalna = x[0], minimalna = x[0];

    for(int i=0;i<10;i++)
    {
           if(maxymalna < x[i])
    {
        maxymalna = x[i];
    }
            if(minimalna > x[i])
            {
                minimalna = x[i];
            }
    }
    cout<<"Liczba najwieksza to: "<<maxymalna<<endl;
    cout<<"Liczba najmniejsza to: "<<minimalna<<endl;
}

 

komentarz 12 grudnia 2018 przez PlusPlus Nowicjusz (220 p.)

Przy wcześniejszej odpowiedzi faktycznie zignorowałem wzkaźniki.

Tylko powstaje pytanie co nim chcesz uzyskać? Aktualnie masz gwiazdkę która ostatecznie niczego nie zmienia. Gdybyś wysłał tablice poza funkcje i później jej użył np. do wypisania elementów w funkcji main lub funkcji uruchamianej z poziomu funkcji main to tu masz przypadek praktycznego użycia wzkaźnika.

Inna moja interpretacja to by wysłać wartość minimalną i maksymalną przy użyciu wzkaźnika do funkcji głównej i wysłać komunikat użytkownikowi właśnie z poziomu funkcji main. W ten sposób odseparować kod funkcji najliczba() (logika programu) od wypisywania komunikatu (widok)

Aczkolwiek powyższe lepiej zrobić przez referencję. Uczyliście się referencji? Jeśli nie to prawdopodobnie na najbliższych zajęciach poznasz to rozwiązanie, które ma podobieństwa do wzkaźników (bo na pewnym poziomie jest to jego wyszczególniony przypadek)

 

PS: Oglądałeś tutorial Pana Mirosława Zelenta? http://miroslawzelent.pl/kurs-c++/wskazniki-alokowanie-pamieci

komentarz 12 grudnia 2018 przez Padoski Użytkownik (990 p.)

Hej, znaczy ogolnie zadanko ma byc zrobione na wskaznikach, ja sie jeszcze w nie dopiero zagłebiam i stworzyłem coś takiego, czy to ma sens ?

#include <iostream>

using namespace std;

    void najliczba(double *x);

int main()
{
    double tab[10];
    double *wsk = tab;
    cout << "Podaj 10 liczb: " << endl;
    for(int i=0;i<10;i++)
    {
        cin >>*(wsk+i);
    }
    najliczba(wsk);
}
    void najliczba(double *x)
{
    double maximum =*x , minimum = *x;
    for(int i=0;i<10;i++)
    {
        if(*(x+i)>maximum)
        maximum = *(x+i);
    }
    cout<<"Najwieksza wartosc sposrod podanych to:"<<maximum<<endl;

    for(int i=0;i<10;i++)
    {
        if(*(x+i)<minimum)
        minimum = *(x+i);
    }
    cout<<"Najmniejsza wartosc sposrod podanych to: "<<minimum<<endl;
}

Ogladalem Mirka, ale jeszcze musze troszke poogarniac :) dlatego pytam Pozdrawiam

komentarz 12 grudnia 2018 przez PlusPlus Nowicjusz (220 p.)
Sens jakiś ma. Sprawdź sam czy prawidłowo działa natomiast nie wiem co miało znaczyć by zrobić to na wskaźnikach. Powyższy kod pokazuje, że umiesz w wzkaźniki, ale to trochę sztuka dla sztuki.

Zauważ, że mógłbyś zwrócić tablice przez return i uzyskać to samo, a kod byłby czytelniejszy bez nadmiaru gwiazdek. Dlatego wydaje mi się, że większy sens miałoby użycie wzkaźników do wysłania zmiennych minimum i maksimum i komunikat wypisać w funkcji głównej, bo tego przy użyciu return tak po prostu się nie da, więc to daje wartość dodaną.

Podobne pytania

0 głosów
1 odpowiedź 574 wizyt
pytanie zadane 2 lipca 2022 w C i C++ przez polandonion Dyskutant (7,630 p.)
0 głosów
1 odpowiedź 388 wizyt
pytanie zadane 6 czerwca 2022 w C i C++ przez kacper1445 Mądrala (5,050 p.)
0 głosów
1 odpowiedź 657 wizyt
pytanie zadane 12 stycznia 2021 w C i C++ przez grzecho123 Początkujący (450 p.)

93,379 zapytań

142,380 odpowiedzi

322,533 komentarzy

62,734 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...