Matura próbna - informatyka - gdzie jest błąd?

0

Witam, przejdę od razu do rzeczy. Polecenie brzmi następująco :

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?

Napisałem taki kod :

import java.io.File;
import java.io.FileNotFoundException;
import static java.lang.Integer.parseInt;
import java.util.ArrayList;
import java.util.Scanner;

public class ileSerii_1 {
    public static void main(String[] args) throws FileNotFoundException {
        ArrayList<String> list = new ArrayList<String>();
        Scanner binary = new Scanner(new File("..\\JavaApplication1\\build\\classes\\dziennik.txt"));
        while(binary.hasNextLine()){
            list.add(binary.nextLine());
        }
        int dlSerii=0;
        int ileSerii=0;
        for(int i = 0; i<list.size(); i++){
            if(parseInt(list.get(i))<parseInt(list.get(i++))){
                dlSerii++;  
            }
            else 
            if(parseInt(list.get(i))>=parseInt(list.get(i++))){
                if(dlSerii>3){
                    ileSerii++;
                }
                dlSerii=0;
            }
        }
        System.out.println("serii wiekszych niz 3: "+ileSerii);
        }
    }

Kod ten mi wypisuje tych serii 0, nie widzę kompletnie błędu, program też nic na czerwono nie pokazuje ani żadnych błędów. Czy mógłby mi ktoś powiedzieć gdzie leży problem?

0

A jakbyś zmienił int dlSerii=0; na int dlSerii=1; i potem dlSerii=0; na dlSerii=1; ?
No bo jednak przy serii dwóch dni twoja zmienna wykazuje że masz dlserii==1 co jest nieprawdą.

0

Coś takiego wyskrobałem, zwraca 4..

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner sc = new Scanner(new File("C:\\Users\\kacpe\\Desktop\\Dane_PR2\\dziennik.txt"));
        int last = 0;
        int last_c = 0;
        int ile = 0;
        while(sc.hasNextLine())
        {
            String r = sc.nextLine();
            if(last < Integer.parseInt(r)) {
                last = Integer.parseInt(r);
                last_c++;
            }
            else {
                last = 0;
                last_c = 0;
            }

            if(last_c > 3)
                ile++;
        }
        System.out.println(ile);
    }
}
0

Niestety to też nie działa, wpadłem jednak właśnie na rozwiązanie iż powinienem w linijkach if(parseInt(list.get(i))<parseInt(list.get(i++))) dac +1 zamiast ++, bo chodzi przecież o następną liczbę a nie jej powiększoną wartość o 1. Wtedy program działa. Odpowiedź to 2. Do zamknięcia ..

0

Tylko to zmieniles? ;> Mi tam dla przykladowych danych z zadania pokazuje ciagle 0 ;>

0

To i list.size() zmieniłem na list.size()-1, po tym wszystko działało już mi.

0

Z ciekawości, za ile pkt takie zadanie ?

0

Zarówno kod CeKa, jak i Enhansa (po wspomnianych poprawkach), nie podają prawdziwej wartości.
Jestem jeszcze cieniutki w JAVIE, ale wydaje mi się, że z grubsza powinno to wyglądać tak:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import static java.lang.Integer.parseInt;

public class Zadanie1
{
	public static void main(String[] args) throws FileNotFoundException 
	{
		ArrayList<String> listaSkokow = new ArrayList<String>();
		Scanner skaner = new Scanner(new File("D:/dziennik.txt"));
	    
		while (skaner.hasNextLine())
		{
		   listaSkokow.add(skaner.nextLine());
		}
		skaner.close();
		
		int dlugoscSerii = 1;
		int iloscSerii = 0;
		 
		for (int i=0; i<listaSkokow.size()-1; i++)
		{
			int danySkok = parseInt(listaSkokow.get(i));
			int nastepnySkok = parseInt(listaSkokow.get(i+1));
			boolean koniecSprawdzania = (i == listaSkokow.size()-2);
		
			if (danySkok < nastepnySkok)
			{
			    dlugoscSerii++;
				if (koniecSprawdzania == true)
				{
					if (dlugoscSerii > 3)
					{
				       iloscSerii++;
					}
				}
			}
			else if (danySkok >= nastepnySkok)
			{
				if (dlugoscSerii > 3)
				{
				   iloscSerii++;
				   dlugoscSerii = 1;
				}
				else if (dlugoscSerii <= 3)
				{
				   dlugoscSerii = 1;
				}
			}
		}
		System.out.println("Ilość pozytywnych serii treningowych: " + iloscSerii);		
	}
}

Dopisanie zera na końcu listy pozwoliłoby uprościć kod, ale jeśli dobrze zrozumiałem treść zadania, nie możemy nic dopisywać.

0

CeKa, nie mam pliku dziennik.txt z tego zadania z 310 liczbami. Próbowałem na stworzonym przez siebie pliku.

0

Podsyłam.

0

U mnie wskazuje 11. Zaraz ręcznie policzę, czy się zgadza.

0

Zgadza się.

1 użytkowników online, w tym zalogowanych: 0, gości: 1