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

Zadanko z c++ problemik

Object Storage Arubacloud
0 głosów
118 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ź 335 wizyt
pytanie zadane 2 lipca 2022 w C i C++ przez polandonion Mądrala (7,040 p.)
0 głosów
1 odpowiedź 315 wizyt
pytanie zadane 6 czerwca 2022 w C i C++ przez kacper1445 Gaduła (4,880 p.)
0 głosów
1 odpowiedź 352 wizyt
pytanie zadane 12 stycznia 2021 w C i C++ przez grzecho123 Początkujący (450 p.)

92,572 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...