May 1, 2025, Thursday, 120

PP 2017 Kolokwium 1

From Łukasz Graczykowski

(Difference between revisions)
Jump to: navigation, search
 
(36 intermediate revisions not shown)
Line 1: Line 1:
-
Proszę napisać program, który wczyta do tablicy typu double wyniki pomiaru czasu przebiegnięcia maratonu (w minutach) przez zawodników.<br>
+
Proszę napisać program, który wczyta do tablicy typu double wyniki pomiaru czasu uzyskane przez zawodników PZU Maratonu Warszawskiego 2016 (w minutach).  
-
Następnie, po utworzeniu tablicy, ukazuje się menu użytkownika, w którym do wyboru powinny być następujące opcje:
+
* Plik z wynikami: [http://www.if.pw.edu.pl/~lgraczyk/PP2017/kol1/wyniki.txt wyniki.txt]
-
1. Wpisanie danych  do tablicy<br>
+
* Przykładowy program: [http://www.if.pw.edu.pl/~lgraczyk/PP2017/kol1/program program]
-
2. Wypisanie zadanej liczby tablicy na ekran<br>
+
Następnie, po utworzeniu tablicy '''i jej posortowaniu''' (patrz '''Uwagi 1 i 2'''), użytkownikowi ukazuje się menu użytkownika, w którym do wyboru powinny być następujące opcje (menu wyświetla się za każdym razem po zrealizowaniu danej opcji):
-
3. Wypisanie największej wartości z tablicy na ekran<br>
+
* Wypisanie najlepszego czasu
-
4. Wypisanie najmniejszej wartości z tablicy na ekran<br>
+
* Wypisanie najgorszego czasu
-
5. Dodanie podanej przez użytkownika liczby do każdego elementu tablicy<br>
+
* Wypisanie średniego czasu uzyskanego przez wszystkich zawodników
-
6. Zakończenie programu.<br>
+
* Wypisanie zadanej liczby najlepszych wynikow (wymagana posortowana tablica)
-
Program powinien działać w pętli do momentu podania przez użytkownika opcji 6 (lub dowolnej innej niż 1-5).<br>
+
* ('''Dodatkowo''') Wypisanie zadanej liczby najgorszych wynikow (wymagana posortowana tablica)
 +
* Zakończenie programu
 +
Program powinien działać w pętli do momentu podania przez użytkownika opcji kończącej program.<br>
<br>
<br>
-
'''Uwaga!''' Musimy dwa razy przeczytać plik tekstowy (najpierw by zliczyć ilość zawodników w celu zadeklarowania rozmiaru tablicy, następnie w celu jej wypełnienia).<br>
+
'''Uwaga 1!''' Musimy dwa razy przeczytać plik tekstowy (najpierw by zliczyć ilość zawodników w celu zadeklarowania rozmiaru tablicy, następnie w celu jej wypełnienia).<br>
<br>
<br>
 +
'''Uwaga 2!''' Aby zrealizować wypisanie najlepszych i najgorszych wyników, musimy po wczytaniu tablicę '''posortować'''. Jak posortować tablicę? Pokazuje to poniższy przykład najprostszego algorytmu, tzw. "sortowanie bąbelkowe" (bubble sort):
 +
 +
<html>
 +
<embed src="http://eduinf.waw.pl/inf/alg/003_sort/flash/004_01.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="obj2" quality="AutoHigh" bgcolor="#ffffff" menu="false" height="200" width="250">
 +
</html>
 +
 +
Lista kroków (przykład dla n-elementowej tablicy):<br>
 +
'''K01:''' Dla <code>j = 0,1,2,...,n-1</code>: wykonuj '''K02''' <br>
 +
'''K02:''' Dla <code>i = 0,1,2,...,n-1</code>: jeśli <code>tablica[i] > tablica[i+1]</code>, to zamień <code>tablica[i]</code> z <code>tablica[i+1]</code><br>
 +
'''K03:''' Zakończ
 +
 +
'''Uwagi go stylu:''' Pamiętamy o wcięciach, nawiasach, i generalnie o uporządkowanym kodzie. Kod powinien być tak napisany, by był zrozumiały dla osoby go czytającej.<br>
<br>
<br>
-
Etapy rozwiązania:<br>
+
Na koniec wysyłamy program na mój adres e-mail: [mailto:lgraczyk@if.pw.edu.pl lgraczyk@if.pw.edu.pl]
-
Instrukcje preprocesora i funkcja main().<br>
+
<!--
-
Wczytanie z klawiatury rozmiaru tablicy.<br>
+
FILE *plik = fopen(nazwa_pliku,"r"); //otwarcie pliku
-
Stworzenie tablicy o podanym rozmiarze i ustawienie domyślnych wartości na 0. 0.5 pkt.<br>
+
if(!plik) //sprawdzy, czy sie otworzyl
-
Stworzenie menu użytkownika. 1 pkt.<br>
+
  {
-
Wprowadzenie liczb do tablicy. 0.5 pkt<br>
+
    printf("Nie moge odczytac pliku %s!\n",nazwa_pliku);
-
Wypisanie tablicy na ekran. 0.5 pkt.<br>
+
    return 0;
-
Znalezienie najmniejszej i największej wartości w tablicy i wypisanie ich na ekran. 1 pkt.<br>
+
  }
-
Dodanie podanej z klawiatury liczby do każdego elementu tablicy. 0.5 pkt<br>
+
int rozmiar = 0;
-
Działanie programu w pętli i opcja kończąca program. 1 pkt.<br>
+
double wynik = 0;
-
Obowiązkowo:<br>
+
while(fscanf(plik,"%lf",&wynik) != EOF)
-
Zrozumienie i analiza treści zadania, poprawność językowa, estetyka kodu.<br>
+
  {
 +
    rozmiar++;
 +
  }
 +
 +
 +
printf("Ilosc zawodnikow to: %d\n",rozmiar);
 +
double czas[rozmiar];
 +
fclose(plik);
 +
 +
FILE *plik2 = fopen(nazwa_pliku,"r"); //otwarcie pliku
 +
if(!plik2) //sprawdzy, czy sie otworzyl
 +
  {
 +
    printf("Nie moge odczytac pliku %s!\n",nazwa_pliku);
 +
    return 0;
 +
  }
 +
int i = 0;
 +
while(fscanf(plik2,"%lf",&wynik) != EOF)
 +
  {
 +
    czas[i] = wynik;
 +
    i++;
 +
  }
 +
fclose(plik2);
 +
-->

Latest revision as of 19:02, 27 March 2017

Proszę napisać program, który wczyta do tablicy typu double wyniki pomiaru czasu uzyskane przez zawodników PZU Maratonu Warszawskiego 2016 (w minutach).

Następnie, po utworzeniu tablicy i jej posortowaniu (patrz Uwagi 1 i 2), użytkownikowi ukazuje się menu użytkownika, w którym do wyboru powinny być następujące opcje (menu wyświetla się za każdym razem po zrealizowaniu danej opcji):

  • Wypisanie najlepszego czasu
  • Wypisanie najgorszego czasu
  • Wypisanie średniego czasu uzyskanego przez wszystkich zawodników
  • Wypisanie zadanej liczby najlepszych wynikow (wymagana posortowana tablica)
  • (Dodatkowo) Wypisanie zadanej liczby najgorszych wynikow (wymagana posortowana tablica)
  • Zakończenie programu

Program powinien działać w pętli do momentu podania przez użytkownika opcji kończącej program.

Uwaga 1! Musimy dwa razy przeczytać plik tekstowy (najpierw by zliczyć ilość zawodników w celu zadeklarowania rozmiaru tablicy, następnie w celu jej wypełnienia).

Uwaga 2! Aby zrealizować wypisanie najlepszych i najgorszych wyników, musimy po wczytaniu tablicę posortować. Jak posortować tablicę? Pokazuje to poniższy przykład najprostszego algorytmu, tzw. "sortowanie bąbelkowe" (bubble sort):

Lista kroków (przykład dla n-elementowej tablicy):
K01: Dla j = 0,1,2,...,n-1: wykonuj K02
K02: Dla i = 0,1,2,...,n-1: jeśli tablica[i] > tablica[i+1], to zamień tablica[i] z tablica[i+1]
K03: Zakończ

Uwagi go stylu: Pamiętamy o wcięciach, nawiasach, i generalnie o uporządkowanym kodzie. Kod powinien być tak napisany, by był zrozumiały dla osoby go czytającej.

Na koniec wysyłamy program na mój adres e-mail: lgraczyk@if.pw.edu.pl