Proste zadania z programowania

Zadania z tematów:

Pliki i proste pętle

Zadanie 1

Dany jest plik wejściowy DANE.TXT. W pierwszym wierszu pliku znajdują się 2 liczby: n i m oddzielone spacjami. W każdym z kolejnych n wierszy znajduje się m liczb (typu Integer) oddzielonych spacjami. Mozna założyć, że liczby m i n nie przekraczają 100.

Napisz program, który wczyta z pliku wejściowego liczby do tablicy dwuwymiarowej T : array[1..100,1..100] of Integer. Następnie program powinien dla każdej kolumny tablicy (o numerze od 1 do m) obliczyc sume wczytanych do niej liczb. Obliczone sumy należy następnie wypisać do pliku WYNIK.TXT (tzn. wplik wynikowy powinien zawierac m liczb oddzielonych spacjami)

Zadanie 2

Tak jak powyżej ale z użyciem tablicy 1-wymiarowej T : array[1..100] od Integer zamiast 2-wymiarowej

Zadanie 3

Są dwa pliki zawierające ciągi liczb oddzielone spacjami: DANE1.TXT i DANE2.TXT. W każdym pliku liczby są uporządkowane, tzn każda kolejna liczba jest nie mniejsza od poprzedniej. Napisz program, który do pliku WYNIK.TXT wypisze wszystkie liczby z obu plików wejściowych ale też uporządkowane.

Zadanie 4

Napisz program, który wczyta z pliku wejściowego dwie liczby. Liczby są w kolejnych wierszach. Liczby mogą być bardzo długie, ale możesz założyć, że każda z nich ma nie więcej niż 1000 cyfr (każdą taką liczbę można reprezentować w pamięci komputera jako tablicę cyfr L : array[1..1000] of 0..9.

Twój program powinien wypisać do pliku WYNIK.TXT (a) sumę danych liczb i (b) iloczyn danych liczb.

Listy

Zadanie 5

Napisz program, który utworzy listę jednokierunkową zawierającą liczby (liczby, które mają być wstawione można wczytać z pliku wejściowego albo n. wylosować). Następnie napisz funkcję,
function Zawiera (glowa : PElListy; liczba : Integer) : Boolean
która zwróci True gdy lista podana przez wskaźnik do jej pierwszego elementu zawiera element przechowujący liczbę podaną w parametrze liczba. W przeciwnym przypadku funkcja zwróci False. Przetestuj działanie funkcji na utworzonej wcześniej liście.

Zadanie 6 (ciekawe)

Napisz procedurę, która sprawdzi, czy dane dwie listy mają wspólny element, (NIE chodzi o to czy przechowują tą samą liczbę!)

Zadanie 7 (ciekawsze)

Napisz procedurę, która znajdzie piwerszy taki wspólny element opisany w poprzednim zadaniu.

Zadanie 8

n osob gra w wyliczanke. Co k-ta osoba odpada. Kto zostanie na koncu? Napisz funkcje, która dla danych n i k zwróci numer osoby, która zostanie na koncu (osoby sa ponumerowane od 1 do n, zaczynamy wyliczac od osoby nr 1, tzn gdy n > k to jako pierwsza odpada osoba k). Funkcja powinna utworzyć jednokierunkowa liste cykliczna dlugosci n i usuwac odpowiednie jej elementy.

Drzewa

Zadanie 9

Dane (np. w pliku) n liczb uporzadkowanych. Zbudowac drzewo BST zawierajace te liczby. Glebokosc drzewa powinna byc mniejsza niż log n + 1 (tzn. drzewo powinno byc optymalne).

Zadanie 10

Typ PWierzcholek jest wskaznikiem do wierzchołka drzewa binarnego zdefiniowanego jako
TWierzcholek = record
  Liczba : Integer;
  Lewy, Prawy : ^TWierzcholek;
end;
Natomiast PElListy jest wskaznikiem do elementu listy jednokierunkowej zdefiniowanego jako
TElListy = record
  Liczba : Integer;
  Nast : ^TElListy;
end;
Napisz funkcje function Liscie (d : PWierzcholek) : PElListy, która dla drzewa danego jako wskaznik d do korzenia utworzy i zwróci liste zawierajaca liczby przechowywane w kolejnych lisciach (od lewej do prawej). Na przyklad dla drzewa:
       7
      / \
     9   4
    / \   \
   2   1   5
należy zwrócić listę zawierajaca kolejno 2, 1 i 5.