Algorytmizacja i programowanie

Zadania z semestru zimowego
  1. Napisać program wyświetlający plik tekstowy. Nazwa pliku pobierana jest od użytkownika. Jeżeli pliku nie da się wyświetlić (np. nie istnieje), to program kończy działanie z odpowiednim komunikatem.
  2. Napisać program służący do kopiowania pojedynczego pliku. Plik do skopiowania podany jest pierwszym argumentem wiersza poleceń, a plik docelowy – drugim. Jeżeli docelowy plik istnieje, to program nadpisuje go. Jeżeli program nie ma wystarczającej liczby argumentów, to nazwy plików pobierane są od użytkownika. Jeżeli pliku nie nie da się skopiować (np. nie istnieje, plik docelowy istnieje i nie da się go nadpisać), to program kończy działanie z odpowiednim komunikatem.
  3. Napisać program czytający kolejne wiersze danych z jednego pliku i zapisujący wiersz z wynikami do drugiego pliku. Wiersz z danymi składa się z dowolnej dodatniej liczby  liczb zmiennoprzecinkowych pooddzielanych od siebie dowolnymi ciągami spacji (spacje mogą być też na początku i końcu wiersza). Wynikiem jest wiersz zawierający poddzielane od siebie spacjami średnie arytmetyczne liczb z każdego wiersza. Wybrać dowolny sposób pobierania przez program nazw plików (np. dialog z użytkownikiem, argumenty wiersza poleceń).
  4. Zmodyfikować poprzedni program tak, żeby wykrywał błędy w pliku z danymi. W razie napotkania błędnego wiersza (zawierającego inne dane niż liczby i spacje) program wyświetla komunikat o numerze błędnego wiersza i wiersz ten jest pomijany w wynikach.
  5. Napisać program kopiujący plik tekstowy, ale z zamianą wszystkich tabulatorów na liczbę spacji zadaną argumentem wiersza poleceń. Nazwy pliku źródłowego i docelowego pobierane są od użytkownika.
  6. Praca domowa (termin oddania: 31 marca 2009)
    Napisać program kopiujący plik tekstowy zawierający kod źródłowy programu w języku Pascal, ale z wycięciem komentarzy (tekst pomiędzy„{” i „}”, tekst pomiędzy„(*” i „*)”, tekst od „//” do końca wiersza). Pamiętać o nie wycinaniu dyrektyw kompilatora („$” bezpośrednio po „{” lub po „(*”). Nazwy pliku źródłowego i docelowego pobierane są od użytkownika.
    Pracę (tylko kod źródłowy) należy wysłać na adres e-mail podany na zajęciach.
  7. Napisać program wyświetlający ocenzurowaną zawartość pliku tekstowego. Cenzurowanie polega na zastąpieniu wybranych niecenzuralnych wyrazów odpowiednią liczbą gwiazdek (znaków „*”) – taką jak długość wyrazu. Niecenzuralne wyrazy zadane są argumentami wiersza poleceń. Nazwa pliku pobierana jest od użytkownika. Np. w przypadku pliku o zawartości
    Na UMCS-ie uczymy się programować, a język programowania,
    którego uzywamy to Pascal.
    
    przykładowe wywołanie programu może wyglądać tak:
    C:\programy\pascal> cenzuruj.exe UMCS program Pacal
    Na ****-ie uczymy się *******ować, a język *******owania,
    którego uzywamy to ******.
    
  8. Napisać program wczytujący od użytkownika informacje o ocenach uczniów. Program najpierw prosi użytkownika o podanie liczby uczniów oraz liczbę ocen (każdy uczeń ma tyle samo ocen), a następnie pobiera od użytkownika imię, nazwisko i oceny każdego z uczniów. Oceny są liczbami całkowitymi z zakresu 1..6. Program wymusza na użytkowniku podawanie poprawnych danych.
    Po wczytaniu wszystkich zestawów ocen program wyświetla informacje o dwóch uczniach: z najwyższą i z najniższą średnią. Jeżeli najwyższa bądź najniższa średnia została uzyskana przez więcej niż jednego ucznia, to wyświetlane są informacje o tym, którego dane wczytane zostały najwcześniej.
  9. Zdefiniować typ _Q reprezentujący liczby wymierne (para dwóch liczb całkowitych – licznik i mianownik).
    Zaimplementować następujące podprogramy:
    • procedure Dodaj(a, b: _Q; var suma: _Q);
      { suma := a + b }
    • procedure Odejmij(a, b: _Q; var roznica: _Q);
      { roznica := a - b }
    • procedure Pomnoz(a, b: _Q; var iloczyn: _Q);
      { iloczyn := a * b }
    • function Podziel(a, b: _Q; var iloraz: _Q): boolean;
      { iloraz := a / b; zwraca informację o tym, czy dało się podzielić. }
    Ułamek reprezentowany przez wynik działania ma być spełniać następujące warunki:
    • licznik i mianownik są względnie pierwsze,
    • mianownik jest dodatni,
    • jeżeli licznik ma wartość zero, to mianownik ma wartość jeden.
    Poprawnymi wynikami nie są na przykład: 4/6 (powinno być 2/3), -3/-4 (3/4), 25/-15 (-5/3), 0/12 (0/1). Ułamki będące argumentami działań mogą być dowolnej postaci, ale można założyć, że są poprawnymi liczbami wymiernymi, czyli mianownik jest różny od zera.
  10. Napisać prosty kalkulator umożliwiający wykonywanie działań na liczbach wymiernych. Kalkulator ma umożliwiać wykonywanie dodawania, odejmowania, mnożenia i dzielenia dwóch liczb wymiernych. Kalkulator udostępnia dwie komórki pamięci nazwane M1M2, w których można przechowywać wyniki obliczeń.
    Program w pętli wyświetla menu z operacjami możliwymi w danym momencie do wykonania, pobiera od użytkownika operację do wykonania i wykonuje ją. W menu są następujące opcje:
    + - dodawanie
    - - odejmowanie
    * - mnożenie
    / - dzielenie
    1 - zapamiętaj wynik ostatniego działania w M1
    2 - zapamiętaj wynik ostatniego działania w M2
    c - wyczyść pamięć
    q - koniec programu
    
    Opcja c nie jest wyświetlana jeżeli w pamięci jeszcze nic nie ma albo została wyczyszczona, opcje 12 nie są wyświetlane jeżeli użytkownik nie wykonał jeszcze żadnego działania. Program wymusza na użytkowniku podanie poprawnej opcji.
    Po wybraniu przez uzytkownika jednej z opcji „+”, „-”, „*” lub „/&rdquo program pobiera argumenty działania. Argument może być liczbą całkowitą, liczbą wymierną bądź napisem M1 lub M2. Liczby wymierne wpisywane są przez użytkownika jako dwie liczby całkowite oddzielone znakiem „/” (bez żadnych spacji ani innych znaków pomiędzy liczbami, a znakiem „/”). Program wymusza na uźytkowniku podanie poprawnego argumentu. Argument nie jest poprawny jeżeli na przykład nie jest poprawny składniowo, mianownik ułamka jest równy zero, uzytkownik odwołuje się do komórki pamięci w której nic nie jest zapamiętane lub wartość całego argumentu wynosi zero, a cały argument jest drugim argumentem dzielenia.