jezykiWsza, Materiały z zajęć, programowanie


WSTĘP DO PROGRAMOWANIA

POLECANA LITERATURA:

Niklaus With „Algorytmy + struktury danych = programy”

M.Iglewski, J.Madey, S.Matwin „Pascal”

Andrzej Marciniak „Turbo Pascal” {wersja obojętna}

A.Struzińska-Walczak, K.Walczak „Nauka programowania dla początkujących

Turbo Pascal”

A.Struzińska-Walczak, K.Walczak „Nauka programowania dla ...już nie całkiem

początkujących Turbo Pascal”

PODSTAWOWE POJĘCIA

  1. OD ALGORYTMU DO PROGRAMU

Algorytm-treść rozkazująca niezależna od zewnętrza

Co powinno być zawarte w algorytmie:

Kolejność pracy nad programem

Specyfikacja jest to zespół informacji pozwalających na jednoznaczne sformułowanie programu. Specyfikacja powinna składać się z :

  1. DANE I ZMIENNE

Dane- są to obiekty, które mają sobie przepisane wartości: liczby, wartości logiczne, ciągi znaków. Mogą być też dane złożone. Odróżniają się od siebie nazwą. Dane mogą być stałe- w trakcie wykonywania programu wartość ich nie ulega zmianie oraz zmienne- mają niezmienne nazwy, ale wartości ich mogą zmieniać się w trakcie wykonywania programu.

Zmienna-miejsce na nośniku pamięci komputera, identyfikowane poprzez nazwę (unikalną), w dowolnym miejscu programu można z niej pobrać wartość jak również zmienić jej wartość. Poszczególne zmienne sa przeznaczone do przechowywania określonych wartości (zmienna może przechowywać obiekty tylko takiego samego typu). Jeżeli mamy dwie zmienne a i b i jeśli chcemy skopiować wartość ze zmiennej b do a, to a i b muszą być tego samego typu!

a b, czyli lewa i prawa strona musi być zgodnego typu.

Nie można do zmiennej typu liczbowego wstawić znaków czy wartości logicznych.

Jeżeli do zmiennej a skopiujemy wartość zmiennej b, to wartość, która była w zmiennej a zostaje wykasowana. Jeśli chcemy zamienić wartości a na b i odwrotnie musimy skorzystać ze zmiennej pomocniczej Rob, w sposób następujący:

Rob a

a b

b Rob

Identyfikator-nazwa zmiennej (złożona może być z liter alfabetu łacińskiego, cyfr oraz znaku "_", nie może zaczynać się od cyfry ). Identyfikator może mieć maxymalnie 256 znaków, jednakże praktycznie powinno to być 7-15 znaków. Identyfikator powinien nam mówić o przeznaczeniu zmiennej. Np. mając równanie px+q=0, zmienne można nazwać p, q, x, jednak o wiele praktyczniejsze byłoby nazwanie ich WspPrzyX, WyrazWolny, x.

  1. INSTRUKCJE

Program jest opisem sposobu wykonania pewnych czynności na ustalonym, określonym w tym programie zbiorze obiektów zwanych danymi. Czynności te opisujemy instrukcjami.

Instrukcja sekwencyjna

powstaje ze złączenia ze sobą dwóch instrukcji.

instr1; (a następnie)

instr2

Najpierw wykonywana jest instrukcja instr1, a po niej dopiero instr2.

Podejdź do drzwi, a następnie (;)

włóż klucz do zamka, a następnie (;)

przekręć klucz w prawo

Instrukcja złożona

grupuje sekwencyjnie instrukcje składowe, ujmując je w „nawiasy zdaniowe”-

BEGIN

instr1;

instr2;

.........

instrN;

END

Instrukcja warunkowa (selekcja)

jak sama nazwa mówi wykonanie instrukcji uzależnione jest od spełnienia warunku.

-dwuwariantowa

W RAZIE GDY spełniony warunek

WÓWCZAS

instr1

A W PRZECIWNYM RAZIE

instr2;

W RAZIE GDY masz w kieszeni 50 zł

WÓWCZAS

idź na piwo

A W PRZECIWNYM RAZIE

siedź w domu;

Na początku sprawdzana jest wartość warunku logicznego. Jeżeli jest on spełniony (wartość Prawda->TRUE), wówczas wykonywana jest instrukcja pierwsza (druga jest pomijana). Jeśli warunek nie jest spełniony (wartość Fałsz->FALSE) to wykonywana jest instrukcja druga (pierwsza jest pomijana).

IF 2<5

THEN

WRITELN(`Prawda-warunek spełniony')

ELSE

WRITELN(`Fałsz-warunek nie spełniony');

Rozwiązanie: 2<5 zawsze, więc wykona się instrukcja pierwsza, a więc zostanie wyświetlony tekst

„Prawda-warunek spełniony”. Przy tak sformułowanym warunku instrukcja druga nigdy się nie wykona.

-jednowariantowa

W RAZIE GDY spełniony warunek

WÓWCZAS

instr;

W RAZIE GDY boli cię głowa

WÓWCZAS

idź do lekarza;

Tu również na początku sprawdzana jest wartość warunku logicznego. Jeżeli jest on spełniony (wartość Prawda->TRUE), wówczas wykonywana jest instrukcja . Jeśli warunek nie jest spełniony (wartość Fałsz->FALSE) to nie będzie żadnej reakcji, instrukcja się nie wykona i program przejdzie dalej, wykonując dalsze instrukcje.

IF Wart_Funkcji=2

THEN

Arg_X:=Arg_X1-8;

Rozwiązanie: Prawdziwość warunku uzależniona jest od wartości zmiennej Wart_Funkcji, jeśli była by ta m liczba 2 to instrukcja się wykona, bo uzyskamy prawdę (2=2). Jeśli w zmiennej Wart_Funkcji jest inna wartość program nic nie wykona.

Instrukcja iteracyjna(pętla)

instrukcja może wykonać się kilka (właściwie skończenie dużo) razy, a jej wykonanie uzależnione jest od prawdziwości warunku. Pętle (bo tak instrukcje iteracyjne nazywamy) stosujemy gdy np. jakąś czynność musimy wykonać kilkakrotnie. Często też stosujemy pętle jako „zapory” (pętle zaporowe), gdy chcemy pobrać od użytkownika dane z odpowiedniego przedziału. Możemy mu nakazać aby podawał daną aż będzie ona nam (programowi) podpowiadała.

-pętla typu „Dopóki”

DOPÓKI spełniony warunek

DOPÓTY

instr;

DOPÓKI jesteś głodny

DOPÓTY

jedz;

na początku sprawdzana jest wartość warunku logicznego. Jeśli jest spełniony (wartość PRAWDA->TRUE) to wykonuje się instrukcja (instr) tzw. refren pętli i ponownie sprawdzany jest warunek. Jeśli spełniony to ponownie wykonuje się refren pętli i tak aż do momentu gdy warunek jest niespełniony, a więc jego wartością jest FAŁSZ (FALSE). Jeśli przed rozpoczęciem pętli warunek jest niespełniony (FALSE) to refren pętli (instr) nie wykona się ani razu.

WHILE i<10

DO

BEGIN

i:=i+1;

WRITELN(`i=',i)

END;

Jeżeli wartość w zmiennej i przed pętlą jest mniejsza od 10 (z tego zapisu nic nie można powiedzieć na ten temat) zostaną wykonane dwie czynności (instrukcja złożona): zwiększenie i o jeden oraz wyświetlenie wartości zmiennej i. Dziać się będzie taka sytuacja dopóty (po którymś zwiększeniu i) wartość i osiągnie 10 co oznacza, że warunek i <10 niespełniony (10<10->FALSE). Jeżeli natomiast wartość w zmiennej i przed rozpoczęciem pętli jest równa bądź większa od 10 pętla zostanie zakończona, bez wykonania instrukcji.

-pętla typu „Aż do”

POWTARZAJ

instr

AŻ DO MOMENTU GDY STWIERDZISZ, ŻE spełniony warunek;

POWTARZAJ

jedz kanapki

AŻ DO MOMENTU GDY STWIERDZISZ, ŻE wszystkie zjadłeś;

Ta pętla (w przeciwieństwie do WHILE-DO) przynajmniej raz zawsze się wykona. Najpierw wykonywana jest instrukcja (instr) a refrenu pętli, a dopiero później sprawdzana jest wartość logiczna warunku. Jeśli warunek spełniony (PRAWDA->TRUE) pętla zostaje zakończona, natomiast jeśli FAŁSZ to ponownie wykonywany jest refren pętli i znowu sprawdzany warunek. I tak aż do momentu gdy wartością warunku będzie prawda (TRUE).

REPEAT

i:=i+1;

WRITELN(`i=',i)

UNTIL i=10

Niezależnie od wartości i przed pętlą, zwiększona zostanie jego wartość o 1 i wyświetlona. Dopiero teraz sprawdzana jest poprawność warunku. Jeśli i=10 to pętla się zakończy, jeśli nie to czynności zostaną powtórzone, aż do momentu gdy w którymś momencie wartość i będzie wynosiła 10. W tym przykładzie może zdarzyć się taka sytuacja, że pętla się „nigdy” nie zakończy-Pomyśl kiedy?

Pętlę REPEAT-UNTIL możemy „przerobić” na WHILE-DO wg wzoru:

instr;

WHILE NOT spełniony warunek {zaprzeczenie warunku}

DO

instr;

Musimy pamiętać by w refrenie pętli było odwołanie do zmiennych występujących w warunku pętli, tak by móc w odpowiednim momencie zmienić wartość logiczną warunku! Inaczej (wartość niezmienna) pętla będzie wykonywać się (obracać) „w nieskończoność”.

Instrukcja przypisania, podstawienia „:=”.

a := b oznacza dokładnie tyle: weź wartość ze zmiennej b i wstaw ją do zmiennej a. Należy pamiętać, że typy zmiennej po lewej i prawej stronie muszą być zgodne!

4. URZĄDZENIA WEJŚCIA/WYJŚCIA

Procedura wyjścia: WRITE, WRITELN „Wypisz”. Zapisuje na ekranie (bądź w pliku) wartość podaną jako parametr. WRITELN(zmienna_a)/ WRITE(zmienna_a)- wyświetli na ekranie wartość jako obecnie znajduje się w zmiennej_a. WRITE()- wypisuje i kursor zostaje dalej w tej samej linii, następny wypisany tekst zostanie na ekranie dołączony z prawej strony. Natomiast WRITELN() wypisuje tekst na ekranie i automatycznie zmienia linię o 1 w dół. Samo użycie WRITELN, bez argumentu powoduje przejście do następnej linii.

Procedura wejścia: READ,READLN „Pobierz”. Pobiera z klawiatury (bądź z pliku) wartość podaną jako parametr. READLN(zmienna_a)/ READ(zmienna_a)-- pobierze z kalwiatury- od użytkownika wartość i wstawi ją do zmiennej_a. READ()- pobiera i kursor zostaje dalej w tej samej linii. Natomiast READLN() pobiera wartość i automatycznie zmienia linię o 1 w dół. Samo użycie READLN, bez argumentu powoduje zatrzymanie programu do momentu wciśnięcia klawisz ENTER.

Program p1;

Begin

Writeln(`To jest');

Writeln(`text napisany');

Writeln(`w trzech linijkach');

Writeln;

Write(`A to jest ten sam');

Write(`text napisany ');

Write(`w jednej linii. ');

Readln;

End.

  1. PROGRAM

Podstawowymi składnikami programu w języku TP są:

PROGRAM ROZW_ROWNAN;

BEGIN

END.

Oczywiście tak napisany program skompiluje się, ale nic nie wykona. Cały algorytm programu, wszystkie opisane instrukcje wpisujemy między BEGIN a END. Natomiast przed początkiem bloku programu (BEGIN) jest miejsce na definicje i deklaracje: etykiet (LABEL), bibliotek (USES), stałych (CONST), typów (TYPE), zmiennych (VAR), procedur i funkcji (PROCEDURE, FUNCTION).

PROGRAM P1;

BEGIN

WRITELN(`To mój pierwszy i chyba nie ostatni, program napisany w Turbo Pascalu');

END.

PROGRAM P2;

{program oblicza}

(* wartość funkcji 5x+c dla pobranego od użytkownika x i stałej c *)

CONST

c= 12.8;

VAR

arg_funkcji: REAL;

BEGIN

WRITELN(`Oto stała funkcji c :',c);

WRITE(`Podaj argument funkcji f=5x+c')

READLN(arg_funkcji);

WRITELN(`Rozwiązanie: f(',x,')=',5*arg_funkcji+c);

READLN;

END.

Uwaga:

{.....}, (*...*)- komentarze w programie, kompilator pomija ten tekst.

  1. PODSTAWOWE TYPY ZMIENNYCH.

Typy:

ZADANIA PODSTAWOWE-ZASTOSOWANIE INSTRUKCI WARUNKOWEJ

Zad.1.

Napisać program obliczający równanie

px+q=0

gdzie p,q- współczynniki równania należy pobrać od użytkownika w trybie dialogowym.

Wynik wyświetlić na ekranie.

Rozwiązanie:

Na początku musimy zastanowić się nad postacie rozwiązania, kiedy równanie ma rozwiązanie, a kiedy nie. Rozwiązanie ma postać x=-q/p. Mogą wystąpić trzy przypadki decydujące o rozwiązaniu:

Musimy rozpatrzyć każdy z tych trzech przypadków i w zależności, który to przypadek wyświetlić albo rozwiązanie w postaci x=....., gdzie w miejsce kropek należy wstawić wartość obliczoną, albo komunikat o niemożności rozwiązania lub o nieskończonej liczbie rozwiązań.

W TP operatory "i" i "lub" mają postać odpowiednio: "and" i "or", po lewej i prawej stronie operatorów muszą być wyrażenia logiczne(boolowskie).

FORMATOWANIE LICZB I TEKSTÓW

Niech zmienna x będzie typu REAL (liczby rzeczywiste)

Wyświetlając wartość zmiennej x na ekranie otrzymamy coś takiego:

-6.31148e+00 (format wykładniczy), co oznacza w tym przypadku -6.31148*100

chcąc wyświetlić liczbę w formacie

-6.31, musimy ją sformatować.

Formatowanie zmiennej rzeczywistej x polega na wyświetlaniu jej w postaci

x:i1:i2, gdzie i1-oznacza liczbę miejsc dla całej liczby (ze zmiennej x), natomiast i2- oznacza liczbę miejsc dla części ułamkowej (po przecinku).

Przykład: niech x= -3456.253674, popatrzmy jakie można uzyskać wyniki na ekranie

Niech zmienna x będzie typu INTEGER (liczby całkowite)

Formatowanie zmiennej całkowitej x (Integer-i pokrewne) polega na wyświetlaniu jej w postaci

x:i, gdzie i oznacza liczbę miejsc przeznaczonych na całą liczbę z x.

Przykład: niech x=1234, popatrzmy jakie można uzyskać wyniki na ekranie

Niech zmienna x będzie typu STRING (napisowy)

Formatowanie zmiennej napisowej x polega na wyświetlaniu jej w postaci

x:i, gdzie i oznacza liczbę miejsc przeznaczonych na cały napis z x.

Przykład: niech x="Ala ma kota", popatrzmy jakie można uzyskać wyniki na ekranie

Zad.2.

Napisać program obliczający wartość funkcji f zadanej wzorem

x+1, dla x<-2

f(x)= 1, dla -2<=x<=1

x2+1, dla x>1

Wartość argumentu-x pobieramy w trybie dialogowym od użytkownika, obliczona wartość funkcji f ma zostać wyświetlona w postaci

f(....)=...., gdzie w miejscu kropek powinny wyświetlić się w kolejności: wartość x i obliczona wartość f(x).

Rozwiązanie:

Funkcja jest określona w całym zbiorze R, wiec zawsze ma rozwiązanie. Należy natomiast uwzględnić trzy przypadki (przedziały x) w których wartość funkcji f obliczamy z innych wzorów.

Zad.3.

Napisać program rozwiązujący układ 2 równań postaci:

ax+by=c

dx+ey=f

Współczynniki a,b,c,d,e,f pobrane w trybie dialogowym, wynik wyświetlić na ekranie.

Uwaga:

Rozwiązanie układu 2 równań metodą wyznacznikową. Tworzymy wyznaczniki

W= |a b | = ae-bd; Wx= |c b | = ce-bf; Wy= |a c | = af-cd

|d e | |f e | |d f |

W-bierzemy współczynniki przy x i y

Wx- współczynniki przy x zastąpione wyrazami wolnymi+ współczynniki przy y

Wy- współczynniki przy x+ współczynniki przy y zastąpione wyrazami wolnymi

Wynik: x=Wx/W, y=Wy/W

Rozwiązanie: (metodą wyznacznikową)

Na początku musimy zastanowić się nad postacią rozwiązania, kiedy układ ma rozwiązanie, a kiedy nie. Rozwiązanie ma postać x=Wx/W, y=Wy/W. Mogą wystąpić trzy przypadki decydujące o rozwiązaniu:

Musimy rozpatrzyć każdy z tych trzech przypadków i w zależności, który to przypadek wyświetlić albo rozwiązanie w postaci x=....., y=...., gdzie w miejsce kropek należy wstawić wartości obliczone, albo komunikat o niemożności rozwiązania lub o nieskończonej liczbie rozwiązań.

Zad.4.(dodatkowe)

Napisać program rozwiązujący układ 3 równań postaci:

ax+by+cz=d

ex+fy+gz=h

ix+jx+kz=l

Współczynniki a,b,c,d,e,f,g,h,i,j,k,l pobrane w trybie dialogowym, wynik wyświetlić na ekranie.

Zad.5.

Napisać program obliczający liczbę W, podaną wzorem:

W=max(|x|-|y|,2min(x,y))

Liczby x i y należy pobrać w trybie dialogowym od użytkownika, wynik-liczbę W wyświetlić na ekranie.

Uwaga:

Min(a,b)mniejsza z liczb a,b np. Min(1,-87)=-87

Max(a,b)większa z liczb a,b np. Max(0,98)=98

Przeprowadzić egzekucję programu, na kartce dla przykładowych wartości

i porównać wyniki z wynikami otrzymanymi na komputerze.

Przykład egzekucji:

1.pobranie x,y

2.obliczenie |x|-|y|

3.obliczenie 2min(x,y)

4.obliczenie W-wyznaczenie większej liczby z p.2. i p.3.

x

y

|x|-|y|

2min(x,y)

W

2

2

-

-

-

2

2

0

-

-

2

2

0

4

-

2

2

0

4

4

Zad.6.

Napisać program obliczający liczbę W, podaną wzorem:

W=min(max(|x|,min(x,y)),123-x,2x+10z)

Liczby x, y i z należy pobrać w trybie dialogowym od użytkownika, wynik-liczbę W wyświetlić na ekranie.

Uwaga:

Min(a,b)mniejsza z liczb a,b np. Min(1,-87)=-87

Max(a,b)większa z liczb a,b np. Max(0,98)=98

Przeprowadzić egzekucję programu (patrz zad.5.), na kartce dla przykładowych wartości

i porównać wyniki z wynikami otrzymanymi na komputerze.

Zad.7.

Napisać program ustawiający w kolejności niemalejącej 3 liczby a,b,c.

Liczby a, b i c należy pobrać w trybie dialogowym od użytkownika, wynik ustawione w kolejności liczby wyświetlić na ekranie.

Uwaga:

Kolejność niemalejąca a<=b<=c

Zad.8.(dodatkowe)

Napisać program z Zad.7. dla czterech liczb a,b,c,d.

Zad.9.

Napisać program sprawdzający czy liczba czterocyfrowa jest swoim lustrzanym odbiciem.

Należy pobrać od użytkownika liczbę czterocyfrową i wyświetlić (jako wynik) jeden z trzech komunikatów

w zależności od otrzymanej sytuacji:

Uwaga:

Liczba-lustrzane odbicie: 2112, 2332, 1111, 9009, nie jest 3434, 1234 itd.

Rozwiązanie:

W pierwszym kroku musimy sprawdzić czy pobrana (od użytkownika) liczba L>999-wymóg czterocyfrowości. Następnie (jeśli czterocyfrowa) musimy rozdzielić L na cyfry: jednościJ, dziesiątekD, setekS, tysięcyT. Cyfra jest swoim lustrzanym odbiciem jeśli D=S i J=T. Do rozdzielenia liczby L potrzebne będą funkcje standardowe TP: mod i div.

Operator "mod": reszta z dzielenia dwóch liczb, argumenty całkowite, zwraca wartość całkowitą, np. 7 mod 2=1; 12 mod 12=0

Liczba z jest parzysta jeśli z mod 2=0!

Operator "div": wynik z dzielenia dwóch liczb, argumenty całkowite, zwraca wartość całkowitą, np. 7 mod 2=3;

12 mod 12=1; 3 div 4=0

Zad.10.

Napisać program sprawdzający poprawność daty.

Należy pobrać od użytkownika Rok, Dzień, Miesiąc i sprawdzić wg napisanego algorytmu poprawność daty.

Uwaga:

Data 30.02.1999 jest niepoprawna!

Rozwiązanie:

Należy napisać algorytm poprawności daty, a więc najpierw musimy sprawdzić czy

dalej wyznaczamy miesiące w których jest dni 31, potem 30, 29, 28. Miesiące z 31 dniami to (liczbowo) 1,3,5,7,8,10,12, z 30 dniami 4,6,9,11. Miesiąc 2-gi może mieć 28 lub 29 dni, w zależności od tego czy rok jest przestępny. Rok jest przestępny jeżeli jest podzielny przez 4 i nie jest podzielny przez 100 lub jest podzielny przez 400.

ZADANIA DODATKOWE

Zad.1.

Napisać program, który pobiera (w trybie dialogowym) czwórki liczb oznaczających elementy macierzy A2x2, pobranie macierzy osobliwej kończy pobieranie danych. Program drukuje pobraną macierz i macierz do niej odwrotną.

Zad.2.

Napisać program, który dla pobranego od użytkownika (w trybie dialogowym) k>=0 całkowitego oraz x-rzeczywistego, wyświetli wartość

Sin(k)(x), tj.k-tej pochodnej z funkcji sinx w punkcie x.

Zad.3.

Napisać program, który pobiera dane o studentach:

NR- licz. całkowita (1,1000) oznaczająca numer indexu

R- licz. Całkowita (1,5) oznaczająca numer roku

S- liczba rzeczywista (2,5) oznaczająca średnią arytmetyczną ocen

REP- wartość logiczna, dająca odpowiedź czy student jest repetantem (TRUE)

Program kończy działanie gdy dane pobrane o studencie są niepoprawne. Program ma wydrukować na ekranie komunikat czy studentowi należy się stypendium naukowe i w jakiej wysokości wg zasady:

Studenci o średniej mniejszej od 4.0 nie pobierają stypendium, o średniej z <4, 4.5) dostają 0.5 PODS (podstawa naliczania-stała typu real, załóżmy, że wynosi ona obecnie 400zł.), o średniej z <4.5, 4.75) dostają 0.75 PODS, o średniej wyższej stypendium w wysokości PODS. Jeżeli student jest studentem pierwszego roku dostaje dodatkowo 0.1 PODS. Jeżeli student jest repetantem podstawa naliczania zmniejszona zostaje o 20%.

Zad.4.

Napisać program, który pobiera od użytkownika (w trybie dialogowym) liczbę rzeczywistą x, a następnie gdy -π/2<x<π/2 bada czy x spełnia warunek

k√α<=tg(x)<=αk

gdzie α stała rzeczywista programu, α>1, k stała całkowita programu k=5

ZADANIA Z CIĄGAMI-ZASTOSOWANIE PĘTLI

Zad.1.

Napisać program wymuszający podania od użytkownika liczby większej od zera. Czyli stosujemy tutaj tzw. pętlę zaporową.

Rozwiązanie:

W trybie dialogowym prosimy użytkownika o podanie liczby, następnie sprawdzamy czy spełniony jest warunek (>0) i jeśli tak program kończy działanie, a w przeciwnym razie musi wyświetlić się na ekranie informacja o niepoprawności podanej liczby i zachętą do ponownego podania. Całość musi odbywać się w pętli.

W tym przypadku lepszą będzie pętla WHILE-DO. Proszę zastanowić się dlaczego należy użyć tutaj pętli WHILE-DO, a nie REPEAT-UNTIL.

Zad.2.

Napisać program zliczający ile w pobranym od użytkownika ciągu jest liczb ujemnych, zer, dodatnich. Należy pobrać w trybie dialogowym liczbę elementów ciągu N, a następnie musimy pobrać N liczb sprawdzając czy jest ona <0, =0, >0.

Rozwiązanie:

Należy wyzerować, przed pobraniem elementów ciągu, 4 liczniki

Licznik i musimy za każdym obrotem pętli zwiększyć o 1 (doszedł kolejny element), natomiast pozostałe liczniki zwiększamy tylko wówczas jak dany element jest z danej kategorii. Np. jeśli w danym obrocie pętli pobierzemy -56 to w tym obrocie musimy zwiększyć licznik ujemne (o 1).

Zad.3.

Napisać program sumujący elementy ciągu (a).

Należy pobrać od użytkownika (w trybie dialogowym) ciąg liczb niezerowych-zero kończy pobieranie i zsumować jego elementy.

Wynik wyświetlić na ekranie w postaci:

"Suma N elementów ciągu (a) wynosi: S"

gdzie w miejscu N, S mają wyświetlić się konkretne liczby odpowiednio liczba elementów ciągu i suma tych elementów.

Zad.4.

Napisać program obliczający iloczyn elementów ciągu (a).

Należy pobrać od użytkownika (w trybie dialogowym) ciąg liczb niezerowych-zero kończy pobieranie i obliczyć iloczyn jego elementów.

Wynik wyświetlić na ekranie w postaci:

"Iloczyn N elementów ciągu (a) wynosi: I"

gdzie w miejscu N, I mają wyświetlić się konkretne liczby odpowiednio liczba elementów ciągu i iloczyn tych elementów.

Zad.5.

Napisać program obliczający sumę arytmetyczną elementów ciągu (a).

Należy pobrać od użytkownika (w trybie dialogowym) liczbę całkowitą N (>0), a następnie ciąg N liczb.

Wynik wyświetlić na ekranie w postaci:

"Suma arytmetyczna ciągu (a) wynosi: SA"

gdzie w miejscu SA ma wyświetlić się konkretna liczba będącą sumą arytmetyczną ciągu (a).

Uwaga:

Suma arytmetyczna (SA): SA=S/N, gdzie S- suma elementów, N- liczba elementów

Zad.6.

Napisać program obliczający elementy ciągu (an), podanego wzorem

3n2+n+2, dla n parzystego

an =

-n+5n3+7, dla n nieparzystego

Należy pobrać liczbę elementów ciągu N (>0), następnie wyliczyć i wyświetlić elementy ciągu w postaci:

a1=.....

a2=.....

a3=....

.........

an=.....

gdzie w miejscach wykropkowanych należy wyświetlić konkretne wartości.

Zad.7.

Napisać program obliczający N- ty element ciągu (an), podanego wzorem rekurencyjnym

ak= 2ak-1+5, gdzie 1<=k<=N

i wyświetlający wynik na ekranie.

Należy pobrać od użytkownika liczbę N( N>0), oraz element a0-pierwszy element ciągu.

Rozwiązanie:

Musimy mieć pomocniczą zmienną, żeby przechować w niej poprzedni element.

Pobieramy od użytkownika a0-POPRZEDNI, w k- tym kroku obliczamy NASTĘPNY (ze wzoru) i do POPRZEDNI przepisujemy NASTEPNY.

Zad.8.

Napisać program obliczający N- ty element ciągu (an), podanego wzorem rekurencyjnym

ak= 5ak-2+ak-1-5, gdzie 2<=k<=N

i wyświetlający wynik na ekranie.

Należy pobrać od użytkownika liczbę N( N>1), oraz elementy a0-pierwszy a1-drugi element ciągu.

Rozwiązanie:

Musimy mieć dwie pomocnicze zmienne, żeby przechować w nich 2 poprzednie elementy. Pobieramy od użytkownika a0-POPRZEDNI0, a1-POPRZEDNI1 w k- tym kroku obliczamy NASTĘPNY (ze wzoru) i do POPRZEDNI1 przepisujemy NASTEPNY, a do POPRZEDNI0 przepisujemy POPRZEDNI1.

ZADANIA DODATKOWE

Zad.1.

Napisać program, który pobiera liczby całkowite (w trybie dialogowym) n i k (0<n<200, 1<k<10) a następnie drukuje n gwiazdek „*” po k w wierszu. Liczby n i k mają być pobrane z wymuszeniem poprawności (do skutku)

Zad.2.

Napisać program, który pobiera liczbę n, a następnie pobiera n liczb xi i drukuje na ekranie największą i najmniejszą z tych liczb.

Zad.3.

Napisać program, który pobiera liczbę n z wymuszeniem by 2<=n<=30, a następnie drukuje n wyrazów ciągu wg wzoru

an=3an-1+2a3n-2 - 20 , gdzie a0=0, a1=1

Zad.4.

Napisać program, który pobiera liczbę n z wymuszeniem by 2<=n<=30, a następnie pobiera n liczb xi i drukuje wartość

Min ( max(xi, xi+1))

0<i<n

TYPY ZMIENNYCH- cd

REAL=(<-1.7e38,1.7e38>,{+, -, *, /, Read[ln], sin, cos, arctan, abs, sqr, sqrt, pi, exp, ln, trunc, round, int, frac}, {<,<=,=,<>,>=,>})

Uwagi:

abs- moduł z liczby: abs(7)=7, abs(-8)=8

sqr- podnosi liczbę do kwadratu: sqr(2)=4

sqrt- pierwiastek kwadratowy z liczby: sqrt(4)=2

pi- stała predefiniowana, pi=3.1415

exp- {exponens} podnosi liczbę "e" do potęgi podanej jako argument: exp(5)=e5

ln- logarytm naturalny z liczby {o podstawie "e"}: ln5=p ≡ 5= ep

trunc- obcina część ułamkową: trunc(3.12)=3

round- zaokrągla do pełnej jedności: round(4.72)=5

int- część całkowita z liczby: int(3.12)=3

frac- część ułamkowa z liczby: frac(3.12)=0.12, frac(x)=x-int(x)

INTEGER=(<-32768,32767>,{+, -, *, /, Read[ln], abs, sqr, div, mod, shl, shr, ord, succ, pred, chr}, {<,<=,=,<>,>=,>, odd})

Uwagi:

ord- funkcja tożsamościowa: ord(4)=4

succ- {successor} następnik, liczba o jeden większa

pred- {predeccessor} poprzednik, liczba o jeden mniejsza

chr- zwraca znak Ascii o podanym kodzie, chr(78)=#78, argumenty <0,255>

odd- bada parzystość, odd(124)=false

BYTE- funkcje i relacje jak w INTEGER, zakres <0,255>

SHORTINT- funkcje i relacje jak w INTEGER, zakres <-128,127>

WORD- funkcje i relacje jak w INTEGER, zakres <0,65535>

LONGINT- funkcje i relacje jak w INTEGER, zakres <-231, 231-1>

CHAR=({#0, #1, #2, ..., #255},{Read[ln],ord, pred, succ},{<, <=, =, <>, >=, >})

Uwagi:

ord- zwraca numer znaku {w kodach ascii}, ord(#45)=45

BOOLEAN=({False,True},{not, or, xor, and, <, <=, =, <>, >=, >, succ, pred, ord})

DEFINIOWANIE TYPÓW (TYPY WYLICZENIOWE I OKROJONE)

W TP możemy definiować swoje typy. Odbywa się to przed (użyciem typów), a więc przed sekcją deklaracji zmiennych. Typy definiujemy po słowie kluczowym TYPE.

TYPE

Mój_typ=definicja_typu;

Przykład:

TYPE

Typ_calkowity=Integer;

VAR

Licz_cal:Typ_calkowity;

A:Integer;

-TYP WYLICZENIOWY stosuje się zwykle dla zbiorów o niewielkiej liczbie elementów, na których nie wykonuje się operacji arytmetycznych.

Definicja:

TYPE

Ident_typu=(lista_identyfikatorów)

Gdzie w liście identyfikatorów specyfikuje się nazwy, tworzące zbiór wartości danego typu wyliczeniowego. Należy pamiętać, że ten sam identyfikator nie może wystąpić więcej niż raz oraz ten sam identyfikator nie może wystąpić w dwu różnych definicjach typu wyliczeniowego.

Przykład:

TYPE

Tydzien=(Pon, WT, Sr, Czw, Piat, Sob, Niedz)

Samochod=(osobowy, dostawczy, ciezarowy)

-TYP OKROJONY służy do ograniczenia zakresów wartości dowolnego typu porządkowego.

Definicja:

TYPE

Ident_typu=stała1 . . stała2;

Gdzie stała1, stała2 są wartościami z zakresu wartości typu, na którego elementach definiowany typ się opiera.

Przykład:

TYPE

Licz1Do100=1..100;

LiteryDuze= 'A' .. 'Z';

TydzRob= Pon .. Sob; {jeśli oczywiście mamy zdefiniowany typ wyliczeniowy o takich elementach}

PROCEDURY I FUNKCJE

są to fragmenty programów, które stosujemy jeśli:

Funkcje różnią się od procedur tym, że mają swoją wartość (podobnie jak zmienne) i można tę wartość wyświetlać, przypisywać innym zmiennym, przekazywać jako parametry do innych procedur, funkcji. Procedury czegoś takiego nie mają.

-PROCEDURY

PROCEDURE nazwa_procedury (parametry);

BEGIN

blok_procedury

END;

Parametry są to jakieś wyrażenia (mogą to być stałe, zmienne), które chcemy wprowadzić do procedury (bądź funkcji) po to aby można było z nich korzystać w bloku procedury (funkcji). Parametrami mogą też być zmienne, którym nadajemy wartość wewnątrz procedury (funkcji) i chcemy by ta wartość widoczna byłą w programie. Parametry możemy deklarować przez "wartość" lub przez zmienną (po słowie var). W pierwszym przypadku mamy niejako odbitkę zmiennej, której wewnątrz procedury (funkcji), możemy zmienić wartość jednak po wyjściu do programu zmienna ta będzie miała wartość sprzed wywołania procedury (funkcji). W drugim przypadku, jeżeli deklarujemy parametr przez zmienną każda zmiana wartości jest zachowana po wyjściu z procedury (funkcji). Przez zmienną powinniśmy deklarować parametry zawsze wtedy gdy

Po nazwie parametru musi występować typ parametru (po dwukropku). Parametry oddzielamy od siebie średnikiem (chyba że są tego samego typu to przecinkiem).

Przykład:

Napisać procedurę, która oblicza sumę liczb a i b i wynik przekazuje do programu w parametrze Suma.

Rozwiązanie:

PROCEDURE OliczSume(a, b:Real; var suma:real);

BEGIN

suma:= a+ b;

END;

Procedura korzysta ze zmiennych a i b więc muszą one być podane jako parametry. Wyliczona wartość w zmiennej suma aby była widziana w programie musi być podana też jako parametr.

Procedura może być bezparametrowa np. :

PROCEDURE Wyswietl;

BEGIN

WRITELN('Ala ma kota');

END;

Parametry, które używamy podczas deklaracji procedury (funkcji) noszą nazwę parametrów formalnych i są one zastępowane podczas wykonywania programu przez parametry aktualne.

Wewnątrz procedury (funkcji) można deklarować zmienne (lokalne) i jeśli mają taką sama nazwę jak zmienne globalne (zadeklarowane dla całego programu), to wewnątrz procedury (funkcji) zmienne globalne są przesłonięte przez zmienne globalna.

Przykład:

Napisać program, który pobiera od użytkownika 2 liczby a i b, oblicza i wyświetla ich iloczyn.

Rozwiązanie:

PROGRAM Iloczyn;

VAR

a, b, iloczyn:Real;

PROCEDURE ObliczIlocz(a1, a2: Real; var il: Real);

BEGIN

Ilocz:= a1*a2;

END;

BEGIN {programu}

WRITE('podaj pierwszy czynnik:');READLN(a);

WRITE('podaj drugi czynnik:');READLN(b);

ObliczIlocz (a, b, iloczyn);

WRITELN('Iloczyn liczb',a,'i',b,'=',iloczyn);

END.

-FUNKCJE

FUNCTION nazwa_funkcji (parametry):typ_funkcji;

BEGIN

blok_funkcji

END;

Funkcje są określonego typu (prostego) mają swoją wartość. Wewnątrz bloku funkcji musi być co najmniej raz odwołanie do nazewnika funkcji. Funkcja przekazuje wartości do programu przez swój nazewnik i poprzez parametry;

Przykład:

Napisać program, który pobiera od użytkownika 2 liczby a i b, oblicza i wyświetla ich iloczyn.

Rozwiązanie:

PROGRAM Iloczyn1;

VAR

a, b :Real;

FUNCTION Iloczyn(a1, a2: Real):Real;

BEGIN

Iloczyn:= a1*a2;

END;

BEGIN {programu}

WRITE('podaj pierwszy czynnik:');READLN(a);

WRITE('podaj drugi czynnik:');READLN(b);

WRITELN('Iloczyn liczb',a,'i',b,'=',Iloczyn(a,b));

END.

ZADANIA Z WYKORZYSTANIEM PROCEDUR I FUNKCJI

Zad.1.

Zadeklaruj procedurę PobiaerzDane, która pobiera od użytkownika parametry potrzebne do określenia trójmianu kwadratowego i przekazuje je do programu.

Zad.2.

Zadeklaruj procedurę, która otrzymuje w parametrach 2 liczby rzeczywiste a i b i przekazuje do programu liczbę będącą sumą liczb a i b.

Zad.2.

Zadeklaruj funkcję Min2, która dla zadanych 2 wartości rzeczywistych (parametry funkcji) wyda wartość mniejszej z nich.

Zad.3.

Napisać program obliczający min(a, b, c, d, e), gdzie a, b, c, d, e pobrane od użytkownika w trybie dialogowym, wynik wyświetlić na ekranie. W programie należy użyć funkcję Min2 (z zad.1.).

Zad.4.

Zadeklarować funkcję Det2, która dla zadanych 4 wartości rzeczywistych (parametry funkcji) oblicza i wydaje wyznacznik macierzy o tych elementach.

Zad.5.

Napisać funkcję logiczną, która dla zadanych 2 liczb rzeczywistych a, b (parametry funkcji) wyda wartość logiczną zdania "Liczba a jest mniejsza od liczby b".

Zad.6.

Napisać program, który sprawdza czy z podanych trzech liczb można zbudować trójkąt prostokątny. Program pobiera od użytkownika 3 liczby a, b, c (rzeczywiste) i wyświetla komunikat czy

W programie należy użyć:

Uwaga:

Z każdej trójki liczb można zbudować trójkąt, jeżeli każda z nich jest większa od zera oraz spełniony jest warunek trójkąta (każda z liczb jest mniejsza od sumy dwóch pozostałych)

ZADANIA DODATKOWE

Zad.1.

Napisać deklarację funkcji, która dla zadanego -1<x<1(rzeczywistego) i eps (eps>0, b. małe) obliczy i wyda przybliżoną wartość arcsinx z dokładnością do eps.

Uwaga:

1 X3 1*3 X5 1*3*5 X7

arcsinx = x+ -- ---- + ----- ---- + --------- ----- + ............

2 3 2*4 5 2*4*6 7

(obliczenia należy przerwać gdy wartość bezwzględna kolejnego dodawanego składnika jest mniejsza od eps)

Zad.2.

Napisać program, który ma obliczyć wartości wyrażeń:

y3

α = -----------------------------

y2 + √(y4+y2+1)

π3

β = -----------------------------

π2 + √(π42+1)

sin3(x)

γ = -----------------------------

sin2(x) + √(sin4(x)+sin2(x)+1)

v3

δ = -----------------------------

v2 + √(v4+v2+1)

gdzie v, y, x należy pobrać od użytkownika, wynik wyświetlić na ekranie.

Uwagi:

W programie należy zadeklarować procedury i funkcje:

Zad.3.

Napisać deklarację procedury CzebIter, która dla zadanych x (rzeczywiste), k (byte) oblicza i wyświetla wartość rzeczywistą równą Tk(x)

Uwagi:

Wielomiany Czebyszewa 1-szego stopnia są zdefiniowane zależnościami:

T0(x)=1

T1(x)=x

Ti(x)=2xTi-1(x)-Ti-2(x), dla i>=2

Zad.4.

Napisać program Wielomiany_Czebyszewa, który oblicza i wyświetla k- ty wielomian Czebyszewa w punkcie x. Wartości k (byte), x (real) należy pobrać od użytkownika, wynik wyświetlić na ekranie.

Uwagi:

W programie należy zadeklarować procedury :

Zad.5.

Napisać program rozwiązujący trójmian kwadratowy ax2+bx+c=0. Liczby a, b, c należy pobrać od użytkownika i wyświetlić wynik (bądź komunikat o niewykonalności) na ekranie.

Uwagi:

W programie należy zadeklarować procedury i funkcje:

Zad.6.

Napisać program badający podobieństwo trójkątów. Należy pobrać od użytkownika 3 liczby a, b, c będące bokami trójkąta i wyświetlić jeden z dwóch komunikatów: "Trójkąty są podobne", "Trójkąty nie są podobne".

W programie należy wykorzystać:

Uwagi:

a1<=b1<=c1 oraz a2<=b2<=c2 i dopiero potem badaj podobieństwo

Zad.7.

Napisać program, który służy do wyznaczania daty ukończenia urlopu na podstawie danych od użytkownika- informacji o dacie początku urlopu i ilości dni trwania urlopu. Dane wejściowe (pobrane od użytkownika):

d, m, r - całkowite określające początek urlopu; IlDni- całkowite określająca koniec urlopu. Program ma wyświetlić d1, m1, r1 -całkowite będące obliczoną datą zakończenia urlopu.

W programie należy wyodrębnić

Uwagi:

TYP TABLICOWY

TYP REKORDOWY

ZADANIA Z WYKORZYSTANIEM TYPÓW TABLICOWEGO I REKORDOWEGO

1

16



Wyszukiwarka

Podobne podstrony:
rozporzadzenie-bezpieczenstwo, Materiały z zajęć
materialy z zajec 4
WJ-005-b-PRZYCZYNY-[1]..., materiały z zajęć WSPiZ, jakość w usługach
reaganomika, materiały z zajęć WSPiZ, systemy ekonomiczne
rozklad materialu zajęć komputerowych, Dokumenty szkolne, klasa I
rachunkowość ćwiczenia 25-02-2001, Materiały z zajęć, Rachunkowość
Okno produktu, materiały z zajęć WSPiZ, zarządzanie
PERSPEKTYWA KULTUROWA NA SPOŁECZEŃSTWO I ORGANIZACJE, materiały z zajęć WSPiZ, socjologia
Historia języka polskiego - materiał z zajęć
materialy z zajec 2 id 286506 Nieznany
materialy z zajec 5 id 286508 Nieznany
Pytanie 62 , materiały z zajęć WSPiZ, zarządzanie
rachunkowość wykład 25-02-2001, Materiały z zajęć, Rachunkowość
Metodyka wf - zal wyk, Materiały z zajęć
Korea N, materiały z zajęć WSPiZ, systemy ekonomiczne
materialy-z-zajec-7
kolorowa klasa 1. semestr 1. rozklad materialu zajec komputerowych, Szkoła, Rozkład, scenariusze, ka
ZAGADNIENIA utk, materiały z zajec studenckich, UTK

więcej podobnych podstron