Oprócz liczb możemy w językach programowania działać także na znakach, czy też słowach. Do przechowywania pojedynczych znaków służy nam typ zwany char. Przykład:
program Slowa;
var ch: char;
begin
ch := 'A';
writeln(ch);
readln;
end.
Ciekawostka: W komputerze znaki przechowywane są jako liczby, do odwzorowywania liczb na konkretne znaki służy nam tzw. Tablica ASCII
Do przechowywania ciągów znaków służy typ zmiennych o nazwie string. Przykładowy najprostszy program wczytujący słowo i wypisujący jego litery po jednej w każdej z linii wygląda następująco:
program Slowa;
var
s: string;
i : Integer;
begin
readln(s);
for i:=1 to length(s) do
writeln(s[i],' ');
readln;
end.
Zauważmy, że do elementów stringa, czyli ciągu znaków odwołujemy się tak jak do elementów tablicy. Funkcja lenght(s) zwraca nam długość ciągu znaków zapisanego w zmiennej s.
Jak widzieliśmy już wczesniej ciągi znaków zapisujemy w apostrofach, np:
program Slowa;
var
s: string;
i : Integer;
begin
s:='abc';
for i:=1 to length(s) do
writeln(s[i],' ');
readln;
end.
Na ciągach znaków możemy wykonywać działania takie jak dodawanie (dodawanie znaku na koniec stringa).
program Slowa;
var
s, s2: string;
i : Integer;
begin
readln(s);
for i:=1 to length(s) do
Begin
writeln(s[i],' ');
if (i mod 2 = 1) then s2+=s[i];
End;
writeln(s2);
readln;
end.
W przypadku gdy chcemy na podstawie wartości zmiennej określić dalsze kroki programui opcji tych jest więcej niż dwie wtedy zamiast używania wielokrotnie operacji if lepiej jest użyć operacji case.
case zmienna ofwartosc1 : begin ... end;wartosc2 : begin ... end;....else begin... end;end;
Przykład:
program kejsy;
var
i: integer;
Begin
writeln('Podaj liczbe');
readln(i);
case i of
1 : begin writeln('Jeden'); end;
2 : begin writeln('Dwa'); end;
else begin writeln('Wiecej niz dwa'); end;
end;
readln;
End.
Aby przekazać do procedury czy funkcji tablice dwuwymiarową należy po poleceniu przed var wpisać słowo kluczowe type i po nim zdefiniować pewien typ tablicowy, analogicznie jak ma to miejsce poniżej i dalej posługiwać się właśnie tym zdefiniowanym typem.
Przykład:
program macierze;
type
macierz = Array[1..10,1..10] of Integer;
var
m:macierz;
procedure p(var m1:macierz);
begin
m1[1,1]:=0;
m1[10,10]:=0;
end;
Begin
m[1,1]:=10;
writeln(m[1,1]);
p(m);
writeln(m[1,1]);
readln;
End.
Zadanie 1
Napisz program, który wczytuje słowo i sprawdza czy jest ono palindromem (słowem, które wygląda tak samo czytane od początku jak i od końca);
Zadanie 2
Napisz program, który wczytuje dwa słowa i sprawdza czy drugie słowo zawiera się w pierwszym. Np. dla słów konkretny i kret słowo kret zawiera się w słowie konkretny, ale dla pary konkretny oraz krety odpowiedzią będzie, że się nie zawiera.
Zadanie 3
Napisz program czytania rozmiaru n (skończona nieparzysta liczba naturalna) i rysowania znaku X o rozmiarach n x n. Np dla n=3 wyglądałoby to następująco:
\(X\ \ \ X\)\(\ \ \ X\ \)\(X\ \ \ X\)
a dla n=5
\(X\ \ \ \ \ \ \ \ X\)\(\ \ \ X\ \ X\ \)\(\ \ \ \ \ \ X \ \ \)\(\ \ \ X\ \ X\ \)\(X\ \ \ \ \ \ \ \ X\)
Zadanie 4
Napisz program obliczający, dla zadanych liczb n i k, wartość symbolu Newtona \(\binom{n}{k}\) przy użyciu tablicy jednowymiarowej.
Zadanie 5
Napisz program, który za pomocą rekurencji odwraca zawartość tablicy jednowymiarowej.
Zadanie Domowe (5 pkt)
Napisz program, który pozwoli na wczytanie dwóch macierzy A i B (rozmiaru 3x3) i następnie udostępni użytkownikowi do wyboru opcje (menu takie jak poniżej będzie pokazywane wielokrotnie po wykonaniu każdej operacji, aż do wpisania przez użytkownika zera):
0 - wyjdź z programu1 - dodaj do macierzy A macierz B2 - dodaj do macierzy B macierz A3 - zeruj główną przekątną macierzy A4 - zeruj główna przekątną macierzy B5 - podaj max wartość macierzy A6 - podaj max wartość macierzy B7 - wypisz macierz A8 - wypisz macierz B9 - sprawdź czy suma elementów macierzy A i B jest liczbą pierwszą10 - wypisz mój numer indeksu
gdzie, przy dodawaniu dwóch macierzy wywoływana będzie procedura
dodaj(var pierwsza:macierz; druga: macierz);
a przy zerowaniu wywoływana będzie rekurencyjna procedura (można to zrobić bez rekurencji ale chcemy tu sztucznie nawet ją wykorzystać).
zeruj(var pierwsza:macierz;rozmiar:integer);
Do szukania maksimum wykorzystamy funkcję o deklaracji
szukMax(m:macierz):integer;
do wypisania macierzy wykorzystamy procedurę o deklaracji
wypisz(m:macierz);
do sprawdzania pierwszości wykorzystamy funkcje o deklaracji
pierwsza(m1:macierz;m2:macierz):boolean;
Uwaga! Państwa programy zostaną sprawdzone pod względem podobieństwa między sobą!
Termin wykonania zadań: Sobota 09.04.2016 do godziny 24.00. Proszę o przesłanie rozwiązań mailem . W temacie powinien znajdować się numer indeksu i słowo APR.