ЗАДАНИЕ №2. Написать процедуру заполнения массива А размером n х m следующим образом (по “змейке”)
Написать процедуру заполнения массива А размером n х m следующим образом (по “змейке”) Например, при n=6 и m=8
Решение: Для того, чтобы заполнить массив указанным образом, выведем правило заполнения. В данном случае: · Если ряд нечетный (то есть когда, номер строки нечетное число): А[i, j] = (i-1)*m+j; · Если ряд четный: A[i, j] = i*m – j+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 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); {Просматриваем все слова, если первый символ очередного слова равен букве ‘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 (1, t); write (c1); for i: =1 to w-2 do {символы верхней границы рамки} write (c2); write (c3); y: =t+1; x: =1+w-1; for i: =1 to h-2 do {символы левой и правой границ} begin GoToXY (1, y); write (c4); GoToXY (x, y); write (c4); y: =y+1; end; GoToXY (1, y); write (c5); for i: =1 to w-2 do {символы нижней границы} write (c2); write (c6); end. Задания для самостоятельного решения.
|