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

Program który znajdzie najwyższą i najniższą wartość w tablicy 10 elementowej, metodą dziel i zwyciężaj.

VPS Starter Arubacloud
0 głosów
398 wizyt
pytanie zadane 22 października 2020 w C i C++ przez Mateusz Mariasik Początkujący (330 p.)

Dzień dobry, jestem dosyć nowy i programy tworze amatorsko, koleżanka poprosiła mnie, abym stworzył program, który znajdzie najwyższą i najniższą wartość w tablicy 10 elementowej. Po napisaniu kodu wyskakuje mi błąd

error: too many arguments to function, o to kod

#include <iostream>

using namespace std;

int m;
float tab[9];

float najwieksza();
float najmniejsza();
int main()
{
    cout << "podaj 10 liczb po enterze: " << endl;
    for (int i=0;i++;i>9)
    {
        cin>>tab[i];
    }
    cout << "najwyzsza wartosc"<<najwieksza(tab);
    cout << "najnizsza wartosc"<<najmniejsza(tab);
    return 0;
}
float najwieksza(float *tab)
    {
       for(int i=0;i++;i>9)
        {
        m=*tab;
        tab++;
        if (*tab>m) m=*tab;
        }
        return m;
    }
float najmniejsza(float *tab)
    {
       for(int i=0;i++;i>9)
        {
        m=*tab;
        tab++;
        if (*tab<m) m=*tab;
        }
        return m;
    }



 

Proszę o poprawienie mi tego, powiedzenia gdzie błędy i w czym, oraz co mogę zrobić lepiej. Mam 16 lat zaczynam z IT i liczę na dobrą pomoc

komentarz 22 października 2020 przez Whiskey_Taster Pasjonat (15,610 p.)
Zacząłbym od porządnej książki i opanowania podstaw. Patrz na to: tworzysz prototyp funkcji - fajnie, tak trzeba robić, dobrze jest od początku tak robić i niech wchodzi w krew - ale nie podajesz nigdzie argumentów tej funkcji. Z kolei sama definicja funkcji już posiada swoje argumenty. Więc tak naprawdę napisałeś prototyp funkcji, która nie ma swojej definicji, a pod funkcją main() napisałeś kod innej funkcji, która nie jest dostępna dla funkcji main(), bo jej deklaracja jak i definicja nie obejmują funkcji main().

1 odpowiedź

0 głosów
odpowiedź 22 października 2020 przez Whiskey_Taster Pasjonat (15,610 p.)
wybrane 22 października 2020 przez Mateusz Mariasik
 
Najlepsza

No dobra, popatrzyłem na ten kod i po prostu muszę Cię skarcić, żeby Ci na dobre wyszło laugh

Pierwsza sprawa już omówiona w komentarzu - tworzysz prototypy funkcji, które nie mają definicji, a następnie definiujesz funkcje, które nie mają w swoim zasięgu funkcji main(). Jak to poprawić? 
 

float najwieksza(float *tab);
float najmniejsza(float *tab);

Taki powinien być prototyp. Zasada jest prosta - zawsze w prototypie jak i w definicji muszą być jednakowe argumenty. 

Druga sprawa - Twoja pętla ma złą składnię. 
 

for (int i=0;i++;i>9)

Poprawna składnia to
 

for (int i = 0; i < 9; i++)

Poprawiłem od razu bezsensowny zapis i > 9. Przecież pętla wykonuje się do czasu, dopóki warunek daje nam prawdę. Ale skoro i = 0 na starcie, a Ty sprawdzasz, czy i > 9, to oczywistym jest, że wartość logiczna tego wyrażenia to fałsz. Wobec tego pętla nie wykona się ani razu. W dodatku błąd powieliłeś w funkcjach. Tak się nie robi. 

Trzecia sprawa - chcesz, aby użytkownik podał 10 liczb, ale deklarujesz tablicę dziewięcioelementową. W dodatku lepiej ją deklarować w funkcji main(), przynajmniej do czasu poznania różnicy między deklaracją wewnątrz funkcji main(), a na zewnątrz funkcji. 

Czwarta sprawa - funkcje nie mają sensu. Patrz w pętli, co masz. Inicjalizujesz m wartością *tab. Potem zwiększasz wskaźnik i przechodzisz na kolejny element tablicy, a następnie porównujesz m z wartością tego wskaźnika. Niby okej, ale pętla przechodzi dalej i co robi? Znowu przypisuje do zmiennej m wartość wskaźnika *tab. No ale chwila, przecież jeśli m > *tab, to nie chcemy przypisywać tego (co już sprawdzaliśmy wcześniej). Więc ostatecznie porównujesz tak naprawdę dwie ostatnie wartości tablicy. 

Jest tu dużo, dużo błędów i program na pewno pisałeś przy pomocy jakiegoś poradnika. Widać to na pierwszy rzut oka, bo same wskaźniki są dość abstrakcyjne, a Ty ich użyłeś w programie, jednakże jednocześnie nie zaznajomiłeś się do końca z poprawną budową pętli oraz warunkami. Stąd taki mój mały wniosek. 

Ogółem jeśli dopiero zaczynasz, to szczerze polecam zakupić jakąś książkę do samodzielnej nauki. Na rynku jest wiele dobrych książek, które faktycznie nauczą Cię dobrych nawyków i wytłumaczą działanie wszystkiego od podstaw. Nawet chyba ostatnio tu na forum ktoś pytał o materiały do nauki z C++, więc warto sobie tam zajrzeć. 

komentarz 22 października 2020 przez Mateusz Mariasik Początkujący (330 p.)
Co do pętli to poprostu missclick, nie chciałem tak zrobić. A reszta no to masz rację, próbowałem swoich sił w napisaniu czegoś łącząc różne filmu z kursu z yt, niestety się nie udało. Co do tablicy to nie było tak, że pierwsze jest 0, i od 0 do 9 jest w sumie 10 cyfr. Więc dzięki za pomoc i polecenie jakiejś książki, napewno przemyślę to!
komentarz 22 października 2020 przez Whiskey_Taster Pasjonat (15,610 p.)

Tak, tak się liczy elementy z tablicy. Ale nie dotyczy to deklaracji tablicy :)
Mały przykład: 
 

int tab[10] // tablica 10-cio elementowa
tab[0] // pierwszy element tablicy
tab[9] // dziesiąty element tablicy

Jako bonus dorzucam Ci link, ktoś w poście niedawno pytał o jakieś przystępne książki. Więc poszukaj TUTAJ

1
komentarz 23 października 2020 przez VBService Ekspert (251,250 p.)

Podobne pytania

0 głosów
1 odpowiedź 475 wizyt
pytanie zadane 4 stycznia 2016 w Algorytmy przez Ciri Gaduła (3,380 p.)
0 głosów
1 odpowiedź 184 wizyt
pytanie zadane 17 maja 2020 w C i C++ przez KenoGamer12 Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 1,395 wizyt

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...