piątek, 5 października 2012

Cyfry z matury maj 2012 cz. 1

Cześć,
Postanowiłem zrobić tego bloga dla maturzystów jak też dla osób lubiących programować.
Razem przejdziemy przez zadania maturalne z programowania.

Pierwsze zadanie brzmi następująco:
W kolejnych wierszach pliku cyfry.txt znajduje się 1000 liczb naturalnych, mniejszych
niż 10 do 9 (jeden miliard), po jednej liczbie w każdym wierszu.
Napisz program, który da odpowiedzi do poniższych podpunktów. Każdą odpowiedź zapisz
w pliku zadanie4.txt, poprzedzając ją oznaczeniem odpowiedniego podpunktu. 
a)  Ile liczb parzystych jest w pliku cyfry.txt?
b)  Podaj liczbę z pliku cyfry.txt, której suma cyfr jest największa oraz liczbę z tego
pliku, której suma cyfr jest najmniejsza. W obu przypadkach jest tylko jedna taka liczba.
Przykład:
Dla danego zbioru liczb:
121324
66562
675100
1187010
odpowiedzią są liczby: 66562  oraz 121324, ponieważ suma cyfr liczby 66562 jest
równa 25 (6+6+5+6+2) i jest największą taką sumą, zaś suma cyfr liczby 121324
(1+2+1+3+2+4) jest równa 13 i jest najmniejszą taką sumą.
c)  Wypisz wszystkie liczby z pliku cyfry.txt, których cyfry tworzą ciąg rosnący.
Przykład:
Cyfry liczby 123579 tworzą ciąg rosnący, ponieważ 1<2<3<5<7<9.
Cyfry liczby 1232 nie tworzą ciągu rosnącego, ponieważ ostatnia cyfra (2) nie jest
większa od przedostatniej (3).
Cyfry liczby 34556 nie tworzą ciągu rosnącego, ponieważ cyfra trzecia (5) i cyfra
czwarta (5) są sobie równe.
Zadanie nie wydaje się być trudne, ale na nim możemy ustalić podstawowe zasady rozwiązywania.

Pierwsze co robimy to dokładnie zapoznajemy się jak mają wczytać się dane, a dokładniej który wiersz co oznacza. W naszym przypadku danymi są liczby to liczby do 1 miliarda tak więc potrzebujemy zmiennej całkowitej czyli int, dodatkowo wiemy, że są one naturalne tak więc zaczynają się od 0 oraz są całkowite, tak więc potrzebujemy zmiennej większej od int, wystarczy dodać do niej przedrostek long oraz wiedząc, że nie mamy liczb ujemnych dajemy przedrostek unsigned.
unsigned long int liczba; 
Czemu tylko jedna zmienna a nie np. tablica? Po prostu chodzi o efektywność, mimo, że nie jest wymagana na maturze to dobry nawyk, by dążyć to optymalizacji kodu.

Załatwiliśmy sprawę wejścia, zajmijmy się wyjściem:
  • w podpunkcie a wyjściem będzie jedna liczba określająca ilość liczb parzystych tak więc początkowo możemy stworzyć zmienną
unsigned long int parzyste
  • w podpunkcie b na wyjściu będą 2 liczby których suma ich cyfr jest największa oraz najmniejsza(WAŻNE! Jeżeli mamy w jednym wierszu napisać 2 zmienne nie pomylmy kolejności tj. w tym  przypadku musimy podać największą i najmniejsza a nie najmniejszą i największą). Skoro są to 2 liczby mamy wybór: Możemy stworzyć 2 zmienne lub stworzyć tablicę. Wybór należy do was, ja akurat stworzę tablicę(pamiętajmy, że tablice indeksujemy od 0):
unsigned long int punktB[1]
  • w podpunkcie c nie mamy określonej ilości liczb na wyjściu wiemy, że ich liczba jest mniejsza bądź równa 1000. Dobrze jest w tym przypadku zrobić tablicę dynamiczną:
tworzymy wskaźnik tablicy: unsigned long int * rosnie;
tworzymy tablicę wykorzystując wskaźnik:  rosnie = new unsigned long int[1000];
Na dzisiaj to tyle. Podsumujmy:
  • stworzyliśmy zmienną przechowującą kolejne cyfry;
  • stworzyliśmy 3 zmienne przechowujące dane na wyjściu;
Mimo, że wygląda to na mało znaczące ale musimy pamiętać, że  dzięki stworzeniu optymalnych zmiennych nasze programy będą działać efektywniej, oraz wyeliminujemy błędy możliwe przy wczytaniu większej liczby niż to możliwe do zmiennej.

W następnej części określimy co nasz program ma robić oraz przystąpimy do podpunktów a i b;


2 komentarze:

  1. Dobre dobre, no ale sam bym lepiej napisał ;D

    OdpowiedzUsuń
  2. OOo już widzę, że masz pierwszy komentarz. Ale Ci się powodzi, dość popularny ten blog ;)

    OdpowiedzUsuń