Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум ОА и П.doc
Скачиваний:
23
Добавлен:
29.08.2019
Размер:
13.34 Mб
Скачать

Задание 2

Напишите процедуру заполнения массива А размером n х m следующим образом (по “змейке”).

Например, при n=6 и m=8

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

17

18

19

20

21

22

23

24

..

..

..

..

..

..

..

..

48

47

46

45

44

43

42

41


Решение:

Для того, чтобы заполнить массив указанным образом, выведем правило заполнения.

В данном случае:

  • Если ряд нечетный (то есть когда, номер строки i нечетное число):

А[i, j] = (i-1)*m+j;

  • Если ряд четный: A[i, j] = i*mj+1.

Тогда искомая процедура имеет вид:

Procedure fill (var x: dm);

Var

i, j: integer;

begin

for i:=1 to n do

for j:=1 to m do

if i mod 2=1

then x[i,j]:=(i-1)*m+j

else x[i,j]:=i*m-j+1

end;

Задание 3

Дана строка, состоящая из нескольких слов, между словами один пробел, в конце строки – точка. Подсчитайте количество слов и выведите на экран только те из них, которые начинаются с буквы “a” (слов не больше 30).

Решение:

Разобьем предложение на отдельные слова и каждое будем хранить как элемент массива строк.

Program slova;

const

n=30;

Type

mstr=array[1.. n] of string;

var

a: mstr;

str: string [255];

k: byte;

Procedure Init (var b: mstr);

Var

i: integer;

begin

k:=1;

{пока не встретится пробел, формируем очередное слово k, прибавляя по одной букве}

for i:=1 to lengch (str) –1 do

if str[i] <>’ ‘

then b[k]:=b[k]+str[i]

else

{если это не последний символ, то увеличиваем счетчик слов и начинаем формировать очередное слово}

if i <> Lengch (str)-1

then

begin

inc (k);

b[k]:=’ ‘

end

end;

begin

writeln (‘Введите предложение’, k);

readln (str);

Init (A);

writeln (‘Всего слов’, k-1);

{Просматриваем все слова, если первый символ очередного слова равен букве ‘a’, то выводим его}

for i:=1 to k do

if a[i][1]=’a’

then write (A[i], ‘ ‘);

readln

end.

Задание 4 (задачи повышенной сложности)

Напишите процедуру, которая выводит на экран рамку. В качестве параметров процедуре должны передаваться координаты верхнего угла рамки и её размер.

Решение:

Procedure frame (l: integer; t: integer; w: integer; h: integer);

{l, t – координаты верхнего левого угла, w – ширина рамки, h – высота рамки}

var

x, y: integer; {координаты выводимого символа}

i: integer;

c1, c2, c3, c4, c5, c6: char; {символы, из которых рисуется рамка}

begin

c1:=chr (218); {символ верхнего левого угла}

c2:=chr (196); {символ горизонтальной линейки}

c3:=chr (191); {символ правого верхнего угла}

c4:=chr (179); {символ вертикальной линейки}

c5:=chr (192); {символ левого нижнего угла}

c6:=chr (217); {символ правого нижнего угла}

GoToXY (l, t);

write (c1);

for i:=1 to w-2 do {символы верхней границы рамки}

write (c2);

write (c3);

y:=t+1;

x:=l+w-1;

for i:=1 to h-2 do {символы левой и правой границ}

begin

GoToXY (l, y);

write (c4);

GoToXY (x, y);

write (c4);

y:=y+1;

end;

GoToXY (l, y);

write (c5);

for i:=1 to w-2 do {символы нижней границы}

write (c2);

write (c6);

end.