Главная страница
Навигация по странице:

  • 5. Обработка строк 5.1 Подсчет и вывод символов

  • 5.2 Удаление символов

  • 5.3 Вставка символов

  • 5.4 Сложные варианты

  • 6. Создание графических изображений. Модуль Graph Задача 1

  • Паскаль. Сборник задач по программированию на языке Паскаль Автор Селезнева Наталья Николаевна, учитель информатики и икт моу


    Скачать 350.82 Kb.
    НазваниеСборник задач по программированию на языке Паскаль Автор Селезнева Наталья Николаевна, учитель информатики и икт моу
    АнкорПаскаль
    Дата16.02.2021
    Размер350.82 Kb.
    Формат файлаpdf
    Имя файлаsb-pascal.pdf
    ТипСборник задач
    #176960
    страница4 из 4
    1   2   3   4
    4.2.4 Алгоритмы удаления, вставки и перестановки элементов
    Задача 1. Дан двумерный массив размерностью 8х7, заполненный случайным образом.

    Поменять местами средние строки с первой и последней.

    Вставить между средними строками первую строку.

    Удалить все столбцы, в которых первый элемент больше последнего.

    Заменить все элементы первых трех столбцов на их квадраты.
    USES Crt;
    VAR
    A:ARRAY[0..8,0..7] OF INTEGER; A1:ARRAY[0..9,0..7] OF INTEGER;
    A2:ARRAY[0..8,0..7] OF INTEGER;
    I,J,K:BYTE; PP:INTEGER;
    BEGIN
    ClrScr; Randomize;
    { Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }
    WriteLn(' Значения элементов двумерного массива');
    FOR I:=1 TO 8 DO Begin
    FOR J:=1 TO 7 DO Begin
    A[I,J]:=Random(15); Write(A[I,J]:3);
    End; WriteLn;
    End; WriteLn;
    { 1. Поменять местами строки }
    WriteLn(' Средние строки поменялись местами с первой и последней');
    FOR J:=1 TO 7 DO Begin
    PP:=A[1,J]; A[1,J]:=A[4,J]; A[4,J]:=PP;
    PP:=A[5,J]; A[5,J]:=A[8,J]; A[8,J]:=PP;
    End;
    { Вывод измененного массива }
    FOR I:=1 TO 8 DO Begin
    FOR J:=1 TO 7 DO
    Write(A[I,J]:3);
    WriteLn;
    End; ReadLn;
    { 2. Вставка }
    WriteLn(' Первая строка вставлена между средними строками');
    K:=0;
    FOR I:=1 TO 8 DO Begin
    Inc(K);
    FOR J:=1 TO 7 DO Begin
    A1[K,J]:=A[I,J]; Write(A1[K,J]:3);
    End; WriteLn;
    IF I=4 THEN Begin
    Inc(K);
    FOR J:=1 TO 7 DO Begin
    A1[K,J]:=A[1,J]; Write(A1[K,J]:3);
    End; WriteLn;
    End;
    End; Writeln; ReadLn;
    { 3. Удаление}
    WriteLn(' Столбцы, в которых первый элемент > последнего, удалены');
    K:=0;

    34
    FOR J:=1 TO 7 DO
    IF A[1,J]<=A[8,J] THEN Begin
    Inc(K);
    FOR I:=1 TO 8 DO
    A2[I,K]:=A[I,J];
    End;
    { Вывод измененного массива }
    FOR I:=1 TO 8 DO Begin
    FOR J:=1 TO K DO
    Write(A2[I,J]:3);
    WriteLn;
    End; ReadLn;
    { 4
    . Замена }
    WriteLn(' Элементы первых трех столбцов заменены на их квадраты');
    FOR I:=1 TO 8 DO Begin
    FOR J:=1 TO 7 DO Begin
    IF J<=3 THEN A[I,J]:=Sqr(A[I,J]); Write(A[I,J]:4);
    End; WriteLn;
    End;
    End.
    Практические задания
    Дан двумерный массив размером 5х6, заполненный случайным образом.

    Поменять местами средние строки.

    Вставить после столбцов, содержащих максимальный элемент массива, столбец из нулей.

    Удалить все столбцы, в которых первый элемент больше заданного числа А.

    Заменить максимальный элемент каждой строки на противоположный.
    5. Обработка строк
    5.1 Подсчет и вывод символов
    Задача 1. Подсчитать сколько букв «о» в тексте
    USES Crt;
    VAR
    A: STRING [255]; KB N, I: BYTE;
    BEGIN
    ClrScr;
    Write('
    Введите тест '); ReadLn(A);
    N:=Length(A);
    KB:=0;
    FOR I:=1 TO N DO
    IF (A[I]=’o’) OR (A[I]=’O’) THEN KB:=KB+1;
    WritLn
    (‘ Количество букв «о» =’,KB);
    END.
    Задача 2. Определить среднюю длину слова в тексте.
    USES Crt;
    VAR
    A: STRING [240]; KS, KB, N, I: INTEGER;
    BEGIN
    ClrScr;
    Write('
    Введите тест '); ReadLn(A);
    N:=Length(A);

    35
    KS:=0; KB:=0;
    FOR I:=1 TO N DO
    IF (A[I]=' ') OR (A[I]=',') OR (A[I]='.') THEN KS:=KS+1 ELSE KB:=KB+1;
    IF (A[N]<>' ') AND (A[N]<>'.') AND (A[N]<>',') THEN KS:=KS+1;
    WriteLn(
    'Средняя длина слова = ',KB/KS:3:0);
    END.
    Задача 3. Подсчитать, сколько слов в тексте начинается на букву «а» (слова разделены пробелом).
    USES Crt;
    VAR
    A: STRING [240]; KS, N, I: INTEGER;
    BEGIN
    ClrScr;
    Write('
    Введите тест '); ReadLn(A);
    N:=Length(A);
    IF A[1]=’А’ THEN KS:=1 ELSE KS:=0;
    FOR I:=2 THEN N
    IF (COPY(A,I,2) =’ а’) OR (COPY(A,I,2)=’ А’ THEN KS:=KS+1;
    WriteLn
    (‘Количество слов, начинающихся на букву «а» =’,KS);
    END.
    Практические задания
    1.
    Подсчитать, сколько слов в тексте оканчивается на букву “а”.
    2.
    Подсчитать, сколько букв “т” в последнем предложении.
    3.
    Подсчитать, сколько раз встречается в тексте слово “кот”.
    5.2 Удаление символов
    Задача 1. Удалить лишние пробелы между словами, оставив по одному.
    USES Crt;
    VAR
    S:STRING[255]; I,K: INTEGER;
    BEGIN
    ClrScr;
    Write('
    Введите текст '); ReadLn(S);
    I:=1;
    While(I<=Length(s)) DO Begin
    IF Copy(S,I,2)=' ' THEN Begin
    Delete (S,I,1);
    I:=I-1;
    End;
    I:=I+1;
    End;
    Write(S);
    END.
    Задача 2. В тексте удалить все слова, заканчивающиеся на букву "e".
    USES Crt;
    VAR
    S: STRING [250]; PS,N,I: INTEGER;
    BEGIN
    ClrScr;
    Write('
    Введите текст '); ReadLn(S);
    S:= ' '+S+' ';
    FOR I:=1 TO Length(S) DO Begin

    36
    IF S[I]=' ' THEN Begin
    PS:=I-1;
    IF S[PS]='E' THEN WHILE(S[PS]<>' ') DO Begin
    Delete(S,PS,1); PS:=PS-1;
    End;
    End;
    End;
    WriteLn
    (‘ Измененный текст:’); Write(S);
    END.
    Задача 3. Из текста удалить каждое второе слово. Слова разделены пробелом.
    USES Crt;
    Type MAS= STRING [20];
    VAR
    A : MAS;
    I,K: INTEGER;
    BEGIN
    ClrScr;
    Write('
    Введите текст '); ReadLn(A); i:=1;
    While (I<=Length(A)) DO Begin
    IF A[I]=' ' THEN Begin
    K:=I+1;
    While (A[K]<>' ') DO Delete(A,K,1);
    I:=I+1;
    End;
    I:=I+1;
    End;
    WriteLn(‘Измененный текст:’); Write(A);
    END.
    Практические задания
    1.
    В третьем предложении текста удалить все слова «мир»
    2.
    Из строки символов удалить все гласные буквы
    3.
    Из строки символов удалить заданное слово
    4.
    Удалить все символы «!», следующие за вторым предложением
    5.3 Вставка символов
    Задача 1. В текст вставить символ пробел после каждого имеющегося символа пробел.
    USES Crt;
    VAR
    A : STRING [255]; I: INTEGER;
    BEGIN
    ClrScr;
    WriteLn('
    Введите текст'); ReadLn(A);
    I:=1;
    While (I<=Length(A)) DO Begin
    IF A[I]=' ' THEN Begin Insert (' ',A,I); I:=I+1; End;
    I:=I+1;
    End;
    WriteL
    n(‘Измененный текст:’); WriteLn(A);
    END.
    Задача 2. Третье предложение в тексте заключить в скобки.
    USES Crt;

    37
    VAR
    A: STRING [200]; I,K,F: INTEGER;
    BEGIN
    ClrScr;
    Write('
    Введите текст '); ReadLn(A);
    I:=1; K:=0; F:=0;
    While (I<=Length(A)) DO Begin
    IF A[I]='.' THEN K:=K+1;
    IF (K=2) AND (F=0) THEN Begin Insert('(',A,I+1); F:=1; End;
    IF (K=3) AND (F=1) THEN Begin Insert(')',A,I+1); F:=0; End;
    I:=I+1;
    End;
    WriteLn
    (‘Измененный текст:’); WriteLn(A);
    END.
    Задача 3. Исправить ошибки в тексте. Во все слова "длиный" вставить букву "н".
    USES Crt;
    VAR
    S : STRING [50]; PZ, I: INTEGER;
    BEGIN
    ClrScr;
    WriteLn(‘
    Введите текст’); ReadLn(S);
    FOR I:=1 TO Length(S) DO
    IF Copy(S,I,6)='
    длиный' THEN Insert('н',S,I+3);
    WriteLn
    (‘Измененный текст:’); WriteLn(S);
    END.
    Практические задания
    1.
    Исправить ошибки в тексте: в словах “рож”, “мыш”, “доч” в конце поставить “ь”.
    2.
    В тексте в последнем предложении после слова «мама» вставить «и папа».
    3.
    В тексте после слов «например» поставить «,».
    4.
    В тексте во втором предложении после слов «Ура» поставить «!!!».
    5.4 Сложные варианты
    Задача 1. Определить, является введенное слово "перевертышем" (потоп, казак).
    USES Crt;
    VAR
    A, B : STRING [20]; I, N: BYTE;
    BEGIN
    ClrScr;
    Write('
    Введите слово '); ReadLn(A);
    N:=Length(A);
    FOR I:=N DownTo 1 DO
    B:=B+A[I];
    IF B=A THEN Write('
    Перевертыш') ELSE Write('Не перевертыш');
    END.
    Задача 2. Подсчитать количество слов, в которых буква "а" входит не менее двух раз. (слова разделены пробелом).
    USES Crt;
    VAR
    A : STRING [255]; KS, KB, I, N : INTEGER;
    BEGIN
    ClrScr;
    WriteLn('
    Введите текст '); ReadLn(A);

    38
    A:=A+' ';
    N:=Length(A);
    KB:=0; KS:=0; I:=1;
    While (I<=N) DO Begin
    While (A[I]<>' ') DO Begin
    IF (A[I]='a') OR (A[I]='A') THEN KB:=KB+1;
    I:=I+1;
    End;
    IF KB>2 THEN KS:=KS+1;
    KB:=0;
    I:=I+1;
    End;
    WriteLn(' Количество слов, в которых буква "а" встречается не менее двух раз = ',ks)
    END.
    Задача 3. Найти слово в тексте, содержащее наибольшее количество букв "м".
    USES Crt;
    VAR
    A, D : STRING [255]; I, KB, MKB, K, MK, NP, MNP : INTEGER;
    BEGIN
    ClrScr;
    WriteLn('
    Введите текст'); ReadLn(A);
    I:=1; KB:=0; MKB:=0; NP:=1;
    While(I<=Length(A)) DO Begin
    While(A[I]<>' ') DO Begin
    IF A[I]='
    м' THEN KB:=KB+1;
    K:=K+1; I:=I+1;
    End;
    IF MKB NP:=I+1; KB:=0; K:=0;
    I:=I+1;
    End;
    D:=Copy(A,MNP,MK);
    WriteLn('Слово с максимальным количеством букв "м" - ',D);
    END.
    Задача 4. Проверить правильность написания круглых скобок.
    Var
    A:String[50];
    K,I,N:Integer;
    BEGIN
    WriteLn
    (‘Введите тест’);
    ReadLn(A);
    N:=Length(A);
    FOR I:=1 TO N DO Begin
    IF A[I]=’(‘ THEN=N+1;
    IF A[I]=’)‘ THEN N:=N-1;
    IF N<0 THEN Begin WriteLn(‘
    Неверно’); Break; End;
    End;
    IF N=0 THEN WriteLn(‘
    Верно’) ELSE WriteLn(‘Неверно’);
    END.
    Практические задания
    1.
    Вывести на экран самое длинное слово из введенного текста.
    2.
    Определить, имеются ли в строке символов все буквы, входящие в введенное слово.
    3.
    Из текста удалить все слова, начинающиеся и оканчивающиеся на одну и ту же букву.

    39 4.
    В тексте найти и подсчитать количество слов, у которых первый и последний символы совпадают между собой (слова разделены пробелами).
    6. Создание графических изображений. Модуль Graph
    Задача 1. Построить различные геометрические фигуры.
    Uses Graph, Crt;
    VAR
    Gd,Gm : INTEGER;
    Radius, I, Width, K : INTEGER;
    Y0, Y1, Y2, X1, X2 : INTEGER;
    Pattern : FillPatternType;
    Points : ARRAY[1..6] OF PointType;
    BEGIN
    Gd:=vga; Gm:=1;
    { Инициализация графического режима }
    InitGraph(Gd,Gm,'C:\tp7\bgi'); IF GraphResult<>0 THEN HALT(1);
    SetBkColor(0); SetColor(2); {Цвет фона и изображения}
    I:=0;
    FOR Radius:=1 TO 5 DO Begin
    {Построение окружностей }
    SetColor(Radius+4);
    Circle(150,150,Radius*25);
    Inc(I); IF I=4 THEN I:=0;
    End;
    ReadLn;
    ClearDevice; SetBkColor(1); SetColor(5); SetLineStyle(0,0,3);
    Ellipse(130,130,0,360,30,50); {
    эллипс}
    ReadLn;
    ClearDevice; SetColor(4); Ellipse(130,130,0,180,100,70); { эллиптическая дуга}
    ReadLn;
    ClearDevice; K:=4;
    FOR Radius:=1 TO 5 DO Begin
    SetColor(K);
    Arc(300,100,0,90,Radius*20); {
    дуги}
    Inc(K); end;
    ReadLn;
    ClearDevice; Width:=20; SetColor(1); SetBkColor(11);
    FOR I:=1 TO 5 DO Begin
    SetFillStyle(7,I+4); {определение стиля заполнения}
    Bar(I*Width,I*20,Succ(I)*Width,200); {
    построение прямоугольников} end;
    SetFillStyle(5,12); Bar(150,150,250,250);
    ReadLn;
    {Построение параллелепипеда с верхней плоскостью}
    SetFillStyle(8,4); ClearDevice;
    Y1:=100; Y2:=200; X1:=230; X2:=300;
    SetLineS
    tyle(3,0,3); {Определение стиля линии}
    Bar3d(x1,y1,x2,y2,10,topon);
    ReadLn;
    {Построение параллелепипеда без верхней плоскости}
    ClearDevice;
    SetLineStyle(0,0,1); setfillstyle(11,1); bar3d(x1,y1,x2,y2,10,topoff);
    ReadLn;

    40
    {Пользовательский шаблон заполнения}
    CleardDevice; SetColor(6); SetLineStyle(0,0,3); {
    Стиль линии}
    {
    заполнение массива}
    Pattern[1]:=31; Pattern[2]:=62; Pattern[3]:=124; Pattern[4]:=248;
    Pattern[5]:=124; Pattern[6]:=62; Pattern[7]:=31; Pattern[8]:=0;
    SetFillPattern(pattern,12); {
    Задание шаблона пользователя}
    Bar(10,10,GetMaxX Div 2,GetMaxY Div 2);
    Rectangle(10,10,GetMaxX Div 2,GetMaxY Div 2);
    ReadLn;
    {Построение закрашенного сектора эллипса}
    ClearDevice; SetBkColor(3); SetColor(4); SetFillStyle(7,14);
    Sector(100,100,0,90,50,70);
    ReadLn;
    ClearDevice; SetFillStyle(1,14); {
    Построение закрашенного сектора круга}
    Pieslice(150,150,90,360,100);
    ReadLn;
    {Построение эллипса, заполненного текущим цветом}
    ClearDevice; SetFillStyle(6,13); SetLineStyle(3,0,1);
    FillEllipse(200,200,50,100);
    ReadLn;
    {Построение закрашенного многоугольника}
    ClearDevice; Randomize; SetLineStyle(0,0,1); SetFillStyle(11,1);
    {Определение случайных координат вершин}
    FOR I:=1 TO 5 DO Begin
    Points[I].X:=Random(GetMaxX); Points[I].Y:=Random(GetMaxY);
    End;
    Points[6].X:=Points[1].Y; Points[6].Y:=Points[1].Y;
    Fillpoly(6,Points);
    ReadLn;
    CloseGraph;
    END.
    Задача 2. Написать систему ниспадающего меню, которая в зависимости от выбора пользователя выводит на экран: красит экран в белый и черный цвет; термометр, у которого ртутный столбик поднимается; термометр, у которого ртутный столбик опускается.
    USES Graph, Crt;
    VAR
    Dr, Md, M, X, Y, I : INTEGER; Ch:CHAR;
    BEGIN
    Dr:=Detect;
    InitGraph(Dr,Md,'c:\tp7\bgi'); IF GraphResult<>0 then HALT(1);
    REPEAT
    SetBkColor(1); SetColor(6); SetTextStyle(0,0,2);
    ClearDevice;
    {
    Вывод меню }
    OutTextXY(50,140,'Пробел - Красим экран');
    OutTextXY(50,170,'Стрелка вверх - Столбик поднимается');
    OutTextXY(50,200,'Стрелка вниз - Столбик опускается');
    OutTextXY(50,230,'ESC -
    Выход');
    REPEAT
    Ch:=ReadKey; {разветвление программы по нажатию клавиши}
    CASE Ch OF
    #32:Begin {
    Красим экран }
    ClearDevice;
    SetBkColor(0); SetFillStyle(1,15);
    Bar(0,0,GetMaxX div 2,GetMaxY);

    41
    SetFillStyle(1,0);
    Bar(GetMaxX div 2,0,GetMaxX,GetMaxY);
    OutTextXY(70,GetMaxY-25,'
    Нажмите DEL');
    End;
    #72:Begin { Ртутный столбик поднимается }
    ClearDevice; SetLineStyle(0,0,1); SetBkColor(1); SetColor(4);
    X:=GetMaxX div 2; Y:=GetMaxY div 2;
    Rectangle(X,Y,X+40,GetMaxY-20);
    FOR I:=1 TO120 DO Begin
    SetColor(4); SetLineStyle(0,0,3);
    Line(X,GetMaxY-20-I,X+40,GetMaxY-20-i);
    Delay(250);
    End;
    OutTextXY(70,GetMaxY-25,'
    Нажмите DEL');
    End;
    #80:Begin { Ртутный столбик опускается }
    ClearDevice; SetLineStyle(0,0,1); SetBkColor(1); SetColor(4);
    X:=GetMaxX div 2; Y:=GetMaxY div 2;
    Rectangle(x,y,x+40,GetMaxY-20);
    SetFillStyle(1,4);
    Bar(x,GetMaxY-140,x+40,GetMaxY-20);
    FOR I:=1 TO 117 DO Begin
    SetColor(1); SetLineStyle(0,0,3);
    Line(x+1,GetMaxY-140+i,x+39,GetMaxY-140+i);
    Delay(250);
    End;
    SetColor(4); OutTextXY(70,GetMaxY-25,'
    Нажмите DEL');
    End;
    End;
    UNTIL (Ch=#83) or (Ch=#27);
    UNTIL (Ch=#27);
    CloseGraph;
    END.
    Задача 3. Написать систему ниспадающего меню, которая в зависимости от выбора пользователя выводит на экран день и ночь.
    USES Crt,Graph;
    LABEL Ex,New;
    VAR Gd,Gm : INTEGER; Av: CHAR;
    PROCEDURE DAY; {процедура-солнечное затмение}
    VAR X,Y,X1,Y1 : INTEGER; U: REAL;
    BEGIN
    ClearDevice; SetFillStyle(1,14); SetColor(14);
    X:=GetMaxX DIV 2; Y:=GetMaxY DIV 2;
    FillEllipse(X,Y,50,50); {
    солнце}
    FOR Gm:=1 TO 150 DO Begin
    U:=Random(359);
    X1:=Trunc(Random (200)*COS(U))+X; Y1:= Trunc (Random (200)*SIN(U))+Y;
    Line
    (X,Y,X1,Y1); {солнечные лучи}
    End;
    SetFillStyle(1,8); SetColor(8);
    FillEllipse(X-15,Y,50,50); {
    тень луны}
    REPEAT
    UNTIL KeyPressed; {
    задержка до нажатия любой клавиши}
    END;
    PROCEDURE NOCH; {процедура - лунная ночь со звездами}

    42
    VAR R,X,Y,I:INTEGER;
    BEGIN
    ClearDevice; SetFillStyle (1,15); SetColor (15);
    FOR I:=1 TO 50 DO Begin
    R:= Random (2);
    PutPixel(Random (GetMaxX), Random (GetMaxY),15);
    PutPixel(Random (GetMaxX), Random (GetMaxY),15);
    FillEllipse(Random (GetMaxX), Random (GetMaxY),R,R);
    End;
    SetFillStyle (1,15); SetColor (15); FillEllipse (200,100,50,50);
    SetFillStyle (1,0); SetColor (0); FillEllipse (180,100,50,50); {
    луна}
    REPEAT
    UNTIL KeyPressed; {
    задержка до нажатия любой клавиши}
    END;
    BEGIN{основная программа}
    Gd:=Detect; InitGraph(Gd,Gm,'C:\tp7\BGI');
    WHILE true DO Begin
    SetFillStyle (1,1); FloodFill(10,10,1); SetFillStyle (1,0);
    Bar(215,115,415,365);
    SetColor (5); SetFillStyle (1,5);
    Bar(200,100,400,350);{
    меню}
    SetTextStyle(7,0,5); SetColor (0);
    OutTextXY(237,117,'MENU'); OutTextXY (237,287,'EXIT');
    SetColor (12); OutTextXY (235,115,'MENU');
    SetColor (4); OutTextXY (235,285,'EXIT');
    SetTextStyle (0,0,3); SetColor (0);
    OutTextXY (227,207,'D:
    ДЕНЬ'); OutTextXY (227,247,'N:НОЧЬ');
    SetColor (3); OutTextXY (225,205,'D:
    ДЕНЬ'); OutTextXY (225,245,'N:НОЧЬ');
    SetColor (15); SetTextStyle (0,0,2);
    OutTextXY (100,450,'
    использовать клавиши D,N,ESC');
    Av:=ReadKey;
    CASE Av OF {разветвление программы по нажатию клавиши}
    'D','d' : DAY;
    'N','n' : NOCH;
    CHR(27) : GOTO Ex;
    End;
    End;
    Ex: CloseGraph;
    END.
    Задача 4. Построить график функции.
    USES Crt, Graph;
    VAR
    Gd, Gm : INTEGER;
    X0, Y0 : INTEGER; {
    Начало осей координат }
    X, Y : INTEGER; Mx, My, I : INTEGER;
    A, B, H, F : REAL;
    BEGIN
    WriteLn('Введите интервал и шаг изменения функции'); ReadLn(A,B,H);
    WriteLn('Введите масштаб по X и Y'); ReadLn(Mx,My);
    Gd:=Detect; Gm:=1;
    InitGraph(Gd,Gm,'c:\tp7\bgi'); IF GraphResult<>0 THEN HALT(1);
    { Построение осей координат }
    X0:=GetMaxX div 2; Y0:=GetMaxY div 2;
    Line(10,Y0,GetMaxX,Y0); Line(X0,10,X0,GetMaxY);
    { Построение стрелок }

    43
    Line(X0,10,X0-10,20); Line(X0,10,X0+10,20);
    Line(GetMaxX,Y0,GetMaxX-10,Y0-10);
    Line(GetMaxX,Y0,GetMaxX-10,Y0+10);
    OutTextXY(X0-25,10,'X'); OutTextXY(GetMaxX-20,Y0+20,'Y');
    { Разметка осей координат }
    I:=X0;
    REPEAT
    I:=I+Mx;
    PutPixel(I,Y0-1,15); PutPixel(2*X0-I,Y0-1,15);
    UNTIL I>GetMaxX;
    I:=Y0;
    REPEAT
    I:=I+My;
    PutPixel(X0+1,I,15); PutPixel(X0+1,2*Y0-I,15);
    UNTIL I>GetMaxY;
    { Построение графика функции }
    REPEAT
    F:=A*A; { функция }
    X:=Trunc(X0+A*Mx); Y:=Trunc(Y0-F*My);
    PutPixel(X,Y,15); A:=A+H;
    UNTIL A>B;
    ReadLn;
    END.
    Задача 5. Построить круговую диаграмму.
    USES
    Сrt,Graph;
    VAR
    Gd, Gm : INTEGER; I,N,S,C: INTEGER;
    M : ARRAY[1..10] OF INTEGER;
    Nk, Kk : INTEGER; P:REAL;
    BEGIN
    WriteLn('Введите количество значений'); ReadLn(N);
    S:=0;
    FOR I:=1 TO N DO Begin
    Writeln('
    Введите ',I,' значение'); ReadLn(M[I]);
    S:=S+M[I]; end;
    P:=360/S; {приходится радиан на 1% }
    Gd:=Detect; Gm:=1;
    InitGraph(Gd,Gm,'c:\tp7\bgi'); IF GraphResult<>0 THEN HALT(1);
    S:=0; C:=1;
    FOR I:=1 TO N DO Begin
    Nk:=Trunc(P*S); { Начальный угол }
    Kk:=Trunc(P*(S+M[I])); { Конечный угол }
    SetFillStyle(1,C);
    PieSlice(GetMaxX div 2,GetMaxY div 2,nk,kk,100);
    S:=S+m[i];
    C:=C+1; IF C=14 THEN
    C:=1; { Изменение цвета }
    End;
    ReadLn;
    CloseGraph;
    END.
    Задача 6. Построить пятиконечную звезду.
    USES Crt,Graph;
    VAR

    44
    Gd,Gm : INETEGER; X,Y,Rb,Rm : INETEGER;
    Points: ARRAY [1..11] OF PointType; {
    Массив вершин }
    I, A : REAL;
    BEGIN
    Gd:=Detect; Gm:=1;
    InitGraph(Gd,Gm,'c:\tp7\bgi'); IF GraphResult<>0 THEN HALT(1);
    Rb:=150; Rm:=70;
    ClearDevice; SetBkColor(3); SetColor(4); SetFillStyle(1,4);
    I:=1; A:=0.94;
    { Определение координат вершин звезды }
    WHILE (I<=10) DO Begin
    X:=Trunc(Rb*COS(A))+300; Points[I].X:=X;
    Y:=Trunc(Rb*SIN(A))+200; Points[I].Y:=Y;
    Inc(I); A:=A+0.628;
    X:=Trunc(Rm*COS(A))+300; Points[I].X:=X;
    Y:=Trunc(RM*SIN(A))+200; Points[I].Y:=Y;
    Inc(I); A:=A+0.628;
    End;
    { Связь координат первой и последней вершин }
    Points[11].X:=Points[1].X; Points[11].Y:=Points[1].Y;
    FillPoly(11,Points); {
    Построение звезды }
    ReadLn;
    CloseGraph;
    END.
    Задача 7. Построить объект, который передвигается с помощью навигационных клавиш.
    USES Crt,Graph;
    VAR
    Gd,Gm : INTEGER; Av : CHAR;
    X,Y,I,T,Z,K : INTEGER; St : STRING[225];
    BEGIN
    Gd:=Detect; InitGraph(Gd,Gm,'C:\tp7\BGI');
    ClearDevice;
    X:=GetMaxX DIV 2; Y:=GetMaxY DIV 2;
    T:=0; I:=0; K:=500;
    REPEAT
    SetColor(15);
    { Построение объекта }
    Line(X,Y-10,X,Y-3); Line (X,Y+10,X,Y+3);
    Line (X-10,Y,X-3,Y); Line (X+10,Y,X+3,Y);
    Circle(X,Y,7);
    Av:=ReadDKey;
    { Изменение координат при нажатии клавиши }
    IF CHR(75)=Av THEN T:=-10; IF CHR(77)=Av THEN T:=10;
    IF CHR(72)=Av THEN I:=-10; IF CHR(80)=Av THEN I:=10;
    SetColor (0);
    Line (X,Y-10,X,Y-3); Line (X,Y+10,X,Y+3);
    Line (X-10,Y,X-3,Y); Line (X+10,Y,X+3,Y);
    Circle(X,Y,7);
    X:=X+T; Y:=Y+I; I:=0; T:=0;
    IF X>(GetMaxX-2) THEN X:=GetMaxX-2; IF X<2 THEN X:=2;
    IF Y>(GetMaxY-2) THEN Y:=GetMaxY-2; IF Y<2 THEN Y:=2;
    UNTIL ORD(Av)=27; { Пока не нажата клавиша Esc }
    END.
    Задача 8. Построить орнамент.
    USES Crt, Graph;

    45
    VAR
    Gd,Gm : INTEGER; Av : CHAR;
    X1, Y1, X, Y : INTEGER; U, H : REAL;
    BEGIN
    Gd:=Detect; InitGraph(Gd,Gm,'C:\tp7\BGI');
    SetFillStyle(1,14); SetBkColor(5); SetColor(14);
    X:=GetMaxX DIV 2; Y:=GetMaxY DIV 2;
    U:=2*Pi;
    While U>=0 DO Begin
    X1:=Trunc(100*COS(U))+X; Y1:=Tunc(100*SIN(U))+Y;
    Circle(X1,Y1,3);
    Delay(1000); U:=U-0.1;
    End;
    H:=-5;
    While H<=45 DO Begin
    X:=Trunc(100+H*10); Y:=Trunc(100-SIN(H)*10);
    Circle(X,Y,2);
    Delay(500); H:=H+0.5;
    End;
    H:=-5;
    While H<=45 DO Begin
    X:=Trunc(100+H*10); Y:=Trunc(380-SIN(H)*10);
    Circle(X,Y,2);
    Delay(500); H:=H+0.5;
    End;
    ReadLn;
    END.
    Практические задания
    1.
    Построить семейство одинаковых окружностей, центры которых лежат на окружности большего диаметра.
    2.
    По периметру экрана построить семейство разноцветных квадратов, а в середине – множество разноцветных точек.
    3.
    Построить движущиеся изображения двух прямоугольников и круга, на которых помещены слова из фразы “ КТО СКАЗАЛ МЯУ?”.
    4.
    Построить движущиеся НЛО на фоне звездного неба.
    5.
    Написать систему ниспадающего меню, которая в зависимости от выбора пользователя выводит на экран круг, квадрат или треугольник.
    uses crt; var i:byte;
    CH:CHAR; begin clrscr; for i:=0 to 255 do write (chr(i):2);
    REPEAT
    CH:=READKEY;
    WRITE(ORD(CH):4);
    UNTIL CH='D'; end.
    1   2   3   4


    написать администратору сайта