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

Matura 2014 Grudzien

Cloud VPS
+1 głos
1,761 wizyt
pytanie zadane 12 lutego 2017 w C i C++ przez silnyjakzubr Nowicjusz (240 p.)
edycja 12 lutego 2017 przez silnyjakzubr

Witam,
Mam problem z zadaniem 5.1 z matury próbnej 2014/2015:

Mateusz cały rok przygotowuje się do zawodów sportowych w skoku w dal. Codziennie
trenuje, a wynik – długość najdłuższego skoku podaną w centymetrach – zapisuje w pliku
tekstowym dziennik.txt. W pliku tym znajduje się 310 liczb odpowiadających
długościom najlepszych skoków Mateusza w kolejnych dniach treningowych. Każda liczba
jest zapisana w osobnym wierszu.

Przykład:
436
571
569
435

Pozytywną serią treningową Mateusz nazywa każdy ciąg kolejnych dni treningowych,
w czasie których uzyskuje on każdego następnego dnia treningu lepszy rezultat niż dnia
poprzedniego i którego to ciągu nie można przedłużyć (jest to ostatni zanotowany wynik albo
wynik z następnego dnia jest gorszy).

Przykład:
478 475 470 480 481 481 475 477 480 482 470
W tym przypadku najdłuższa pozytywna seria treningowa (podkreślona) trwała 4 dni,
a Mateusz w jej trakcie poprawił swój wynik o 482–475=7 centymetrów.

W wybranym przez siebie języku programowania napisz program, za pomocą którego
uzyskasz odpowiedzi na poniższe pytania.

Zadanie 5.1.
Ile Mateusz miał pozytywnych serii treningowych dłuższych niż 3 dni?

Napisalem taki kod:

#include <iostream>
#include <fstream>
using namespace std;


int main()
{
    int a[310];
    int licznik1=1;
    int licznik2=0;
    ifstream dane;
    dane.open("dziennik.txt");
    for(int i=0;i<310;i++)
    {
        dane>>a[i];
    }
    for(int i=0;i<310;i++)
    {
        if(a[i]<a[i+1])
        {
            licznik1++;
            continue;
        }
        if(licznik1>3)
        {
            licznik2++;
            licznik1=1;
        }
        else
        {
            licznik1=1;
        }
    }
    cout<<licznik2;
}

 

Wychodzi 11, a w odpowiedziach jest 14. 

 

Link do danych: DANE

komentarz 12 lutego 2017 przez Ehlert Ekspert (215,050 p.)

Polecam Ci nie deklarowac statycznych tablic na maturze. Zdaza się że w "sprawdzonym" pliku są puste linie albo po ostatniej z danymi jest jeszcze \n. 

Używaj std::vector

2 odpowiedzi

0 głosów
odpowiedź 12 lutego 2017 przez Knayder Nałogowiec (37,640 p.)
Nie jest to raczej bezpośredni powód błędu ale:

for(int i=0;i<310;i++)
{
    if(a[i]<a[i+1])
    ...
}

W momencie w którym i==309, czyli największa możliwa wartość w tej pętli to:
if(a[309] < a[309+1]) sprawia że odwołujesz się do elementu 310 tablicy, której ostatnim elementem jest 309.
Pozdrawiam
0 głosów
odpowiedź 13 lutego 2017 przez silnyjakzubr Nowicjusz (240 p.)
Sprawdziłem klucz z innej strony i wynik to 11, czyli rozwiazanie zdaje sie prawidłowe. Zamykam

Podobne pytania

0 głosów
2 odpowiedzi 3,629 wizyt
pytanie zadane 1 lutego 2016 w C i C++ przez Drakusman Nowicjusz (150 p.)
0 głosów
5 odpowiedzi 1,621 wizyt
pytanie zadane 19 marca 2016 w C i C++ przez Hannn Nowicjusz (190 p.)
0 głosów
1 odpowiedź 802 wizyt
pytanie zadane 9 kwietnia 2021 w C i C++ przez Pawolo122 Początkujący (330 p.)

93,469 zapytań

142,404 odpowiedzi

322,712 komentarzy

62,852 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

Kursy INF.02 i INF.03
...