Авторизация
×

Логин (e-mail)

Пароль

Интерактивные истории, текстовые игры и квесты
Гиперкнига

Библиотека    Блог

Посетите наш новый сайт AXMAJS.RU

Запустить

Создаём объект $ключ и выводим «Да», если ключ есть или «Нет», если ключ отсутствует: Да Нет

Ссылка на параграф, содержимое которого будет выведено на этой же странице: вывести текст начала игры.

Текст, вставленный из другого параграфа:

Случайное целое число от 0 до 6: .

Михаил Эверстов

Это книгу я создал для того что обучающимся с 8-11 классы было как можно понятнее изучать информатику. На данныйм момент есть множество разных книг по изучению программирования но в их обьяснениях много научных терминов, и тогда я решил создать интерактивную книгу с более понятным интерфейсом и изучении.

Теперь кратко об истории информатики!!!

Первые программы для ЭВМ писались именно в числах. Это сложно для человека. Представьте, что все, что вы хотите сказать, нужно сказать исключительно числами. Тут дело усложнялось еще тем, что компьютеры проще создавать таким образом, чтобы они считали в двоичной системе счисления. Записи программ получались слишком длинными. Для их сокращения пользовались восьмеричной и шестнадцатеричной системами счисления. Запись программы числами называется машинным языком программирования.

Следует понимать, что конкретный язык программирования может содержать в себе несколько концепций (парадигм) программирования. Например, быть структурным и объектно-ориентированным одновременно. Языков множество, парадигм (принципов программирования) единицы.

Издавна принято считать, что он хорош для обучения программированию. И действительно. Язык Паскаль был создан в конце 60-х годов Н. Виртом как специальный язык для обучения студентов. Однако вскоре из-за реализации в нем прогрессивных идей того времени получил распространение среди программистов. Было время, когда Паскаль широко использовался для написания прикладных программ и даже как язык системного программирования. Программное обеспечение многих мини- и микрокомпьютеров было написано на Pascal.

При рождении языка программирования на свет должны появиться как его описание, так и транслятор с него в машинный код. После 70-го года язык Pascal развивался и совершенствовался, включал в себя новые возможности. Производились новые трансляторы и среды разработки для Pascal.

В 80-х годах компьютерная наука начала входить в массы, появился предмет «Информатика». Поскольку в это время Pascal был особо модным и зарекомендовал себя как учебный языка, то он нашел широкое распространение в школах и вузах. В итоге было написано огромное количество учебных пособий по этому языку.

Среди других достоинств языка программирование Pascal можно отметить следующее:

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

Развитые средства представления структур данных обеспечивают удобство работы как с числовой, так с символьной и битовой информацией.

В языке Паскаль реализованы идеи структурного программирования, что делает программу наглядной и дает хорошие возможности для разработки и отладки.

Чтобы быть более простым, Pascal имеет некоторые ограничения. Так, Паскаль хорошо «учит» понимать, как хранятся данные в памяти компьютера, но имеет ряд ограничений при работе с ними (чего лишены большинство «настоящих» языков).

Т.к. в свое время Паскаль достаточно активно использовался для решения практических задач, на его основе сформировался язык Object Pascal (который сейчас используется в Delphi).

Задачник по программированию на паскале для учащихся

Операции с типом Integer

Рассмотрим операции, которые можно выполнять с целыми числами и целочисленными переменными.

Пример 2.2.

Операции с переменными целого типа:

Program Action;

var

А,В.С: integer;

begin

А:=17;

В:=3;

{ Операция умножения: }

С:=А*В; writeln('17 * 3=',С);

{ Деление нацело: }

С:=А div В; writeln(‘17 div 3=’,С);

{ Вычисление остатка от деления: }

С:=А mod В; writeln(' 17 mod 3=',С);

{ Сложение: }

С:=А+В: writeln('17 + 3=',С);

{ Вычитание: }

С:=А-В; writeln('17 - 3=',С)

end.

При запуске программа выведет на экран следующее:

17 * 3=51

17 div 3=5

17 mod 3=2

17 + 3=20

17-3=14

Рассмотрим еще несколько примеров операций div и mod.

Для успешного понимания результатов этих операций нужно вспомнить 2-й класс и деление столбиком (рис. 2.2).

Тип Integer. Оператор присваивания. Вывод на экран

Теперь рассмотрим работу с самыми простыми переменными. В них можно хранить только целые числа. Для хранения целых чисел в Паскале используется специальный тип данных — Integer.

Внимательно читайте комментарии к программе в следующем примере!

Пример 2.1. Работа с целочисленными переменными

Program Product;

{ Далее идет раздел описания переменных. Он всегда начинается со слова var (от variable - переменная) }

var

А.В.С: integer; { Имена в списке - через запятую; в конце.списка через двоеточие указывается тип данных: integer - целый }

Begin { Началось тело программы }

А: =5; { Это оператор присваивания. В данном случае запись означает, что в переменную (ячейку) А записали число 5. Не путайте с записью А=5 !!! }

writeln(A); { Выводим на экран содержимое переменной А. Имя А не заключено в апострофы! }

writeln('А'); { Вывод на экран символа А }

А:=А+1;.{ Запишем в переменную А число, которое до этого в ней было, но увеличенное на -1 }

В: =7; С:=А*В;{ * - это операция умножения }

writeln('Product»',С) { Вывод содержимого ячейки С - с пояснительным текстом }

end. { Здесь кончается тело программы }

При запуске программа выведет на экран следующее:

5

А

Product=42

ЗАПОМНИТЕ!

В результате выполнения оператора присваивания в ячейку помещается новое число. Старое содержимое ячейки при этом пропадает.

Справа от оператора присваивания может стоять число или любое выражение. Слева может стоять только имя переменной. Выражения слева быть не может — иначе Паскаль не будет знать, в какую ячейку памяти поместить результат.

Тип результата выражения справа от оператора присваивания должен быть таким, чтобы помещаться в переменную слева от «:=».

Компьютерные программы обрабатывают (изменяют) различные данные. Программа получает данные, что-то делает с ними и выводит их в измененной форме или выводит другие данные.

Следовательно, любой язык программирования должен иметь инструменты как для ввода данных, так и их вывода. В Паскале ввод осуществляется с помощью процедур read() и readln(), а вывод - благодаря write() и writeln(). Процедуры, которые имеют окончание ln, после своего выполнения переводят указатель на новую строку.

Откуда или с помощью чего можно ввести данные в программу? Обычно это можно сделать с помощью клавиатуры или из файлов.

Куда можно вывести данные? На экран, в файл, на принтер и др.

Стандартным устройством ввода является клавиатура, а вывода — монитор. Стандартные — значит "работающие по-умолчанию"; т.е. если не указано ничего иного, то программа будет считывать данные с клавиатуры, а выводить их на монитор. Вместе клавиатуру и монитор называют консолью. Таким образом консоль представляет собой стандартное устройство ввода-вывода.

Вывод данных на экран. Форматированный вывод

Вывод данных на экран и в файл в языке программирования Pascal осуществляется с помощью процедур write() и writeln(). Здесь будет рассмотрен вывод только на экран.

Допустим, нам требуется отобразить на экране пару фраз. Если мы хотим, чтобы каждая из них начиналась с новой строки, то надо использовать writeln(), если нет – то write().

Write() и writeln()

Write() чаще используется, когда надо вывести для пользователя сообщение на экран, после чего получить данные, не переводя курсора на новую строку. Например, выводим на экран "Введи число: " и не переводим курсор на новую строку, а ждем ввода.

Еще один пример. В памяти компьютера хранятся данные. Из программы мы обращаемся к ним с помощью переменных num, fl и st. Вывести их значения на экран можно по-разному.

Форматированный вывод

Во втором случае мы видим, что процедуры вывода (как write() так writeln()) позволяют конструировать выводимую информацию из различных компонент (строк-констант и переменных).

В третьем случае был осуществлен так называемый форматированный вывод. При этом для выводимого значения указывается ширина поля вывода (количество знакомест). Если мы выводим вещественное (дробное) число, то вторым числом через двоеточие указывается количество знаков после запятой. Если для вещественных чисел не осуществлять форматирование, то они отобразятся так, как определено для данного компьютера. Если указать только число знакомест без фиксирования дробной части, то вывод будет в экспоненциальной форме.

Ввод данных с клавиатуры

Ввод данных в языке программирования Паскаль обеспечивается процедурами read() и readln(). Ввод данных осуществляется либо с клавиатуры, либо из файла. Здесь рассматривается только ввод с клавиатуры.

Когда данные вводятся, то они помещаются в ячейки памяти, доступ к которым обеспечивается с помощью механизма переменных. Поэтому, когда в программе на Pascal используется процедура read() (или readln()), то в качестве фактического параметра (аргумента) ей передается имя переменной, которая будет связана с вводимыми данными. Потом эти данные можно будет использовать в программе или просто вывести на экран.

Read() и readln()

В процедуры ввода можно передавать не один фактический параметр, а множество.

Передача множества аргументов в процедуру readln()

При вводе данных их разделяют пробелом, табуляцией или переходом на новую строку (Enter). Данные символьного типа не разделяются или разделяются переходом на новую строку.

Существуют особенности ввода данных с помощью операторов read() и readln(). Если используются подряд несколько операторов read(), то вводимые данные можно разделять всеми допустимыми способами. При использовании нескольких вызовов readln() каждый последующий срабатывает только после нажатия Enter. Программа ниже иллюстрирует это. Комментарии поясняют последовательность возможных действий при вводе данных.

Любая программа, написанная на любом языке программирования, по большому счету предназначена для обработки данных. В качестве данных могут выступать числа, тексты, графика, звук и др. Одни данные являются исходными, другие – результатом, который получается путем обработки исходных данных программой.

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

Переменные описываются до основного кода программы. Для них указываются ее имя и тип хранимых данных.

В языке программирования Паскаль достаточно много типов данных. Кроме того, сам пользователь может определять свои типы данных.

Тип переменной определяется тем, с какими данными она связана.

Переменные типа integer могут быть связаны только с целыми значениями обычно в диапазоне от -32768 до 32767. В Pascal есть другие целочисленные типы.

Переменные типа real хранят вещественные (дробные) числа.

Переменная булевского (логического) типа может принимать только два значения - true (1, правда) или false (0, ложь).

Символьный тип (char) может принимать значения из определенной упорядоченной последовательности символов.

Интервальный тип определяется пользователем и формируется только из порядковых типов. Представляет собой подмножество значений в конкретном диапазоне.

Можно создать собственный тип данных простым перечислением значений, которые может принимать переменная данного типа. Это так называемый перечисляемый тип данных.

Все вышеописанное – это простые типы данных. Но бывают и более сложные, структурированные, которые базируются на простых типах.

Массив – это структура, занимающая в памяти единую область и состоящая из фиксированного числа компонентов одного типа.

Строки представляет собой последовательность символов. Причем количество этих символов не может быть больше 255 включительно. Такое ограничение характерная черта Pascal.

Запись – это структура, состоящая из фиксированного числа компонент, называемых полями. В разных полях данные могут иметь разный тип.

Множества представляют собой совокупность любого числа элементов, но одного и того же перечисляемого типа.

Файлы для Pascal представляют собой последовательности однотипных данных, которые хранятся на устройствах внешней памяти (кстати, жесткий диск – это тоже внешняя память).

Понятие такого типа данных как указатель связано с динамическим хранением данных в памяти компьютера. Часто использование динамических типов данных является более эффективным в программирование, чем статических.

Вложенные циклы: теория

Циклы позволяют повторять выполнение любого набора операторов. В частности можно повторять много раз выполнение другого цикла. Такие циклы называются вложенными.

Пример 1. Напечатать числа в виде следующей таблицы

3 3 3 3 3

3 3 3 3 3

3 3 3 3 3

3 3 3 3 3

Данная таблица состоит из четырех строчек, в каждой из которых число 3 напечатано 5 раз. Строчку из пяти чисел можно напечатать с помощью одного цикла for:

for i:=1 to 5 do

write(3, ' ');

Чтобы повторить вывод строчки 4 раза, вставляем этот цикл внутрь другого:

for k:=1 to 4 do

{4 раза делаем то, что написано между begin’ом и end’ом}

begin

for i:=1 to 5 do

write(3, ' '); {Выводим одну строку}

writeln; {Переводим курсор на следующую строку}

end;

Типичная ошибка, когда в качестве счетчиков вложенных циклов (i и k в приведенном примере) используется одна и та же переменная. То есть нельзя в каждом из циклов использовать одну переменную i. Помнить об этом особенно важно, поскольку данная ошибка не обнаруживается на этапе компиляции. Ваша программа запустится, но делать будет вовсе не то, что вы от нее ждете. В приведенном примере (если допустить ошибку, заменив переменную k на i) внешний цикл выполнится всего 1 раз вместо 4-х. Возможна также ситуация, когда такая ошибка приведет к зацикливанию: внешний цикл будет выполняться бесконечно долго – программа зависнет.

Рассмотрим еще один пример.

Пример 2. Напечатайте числа в виде следующей таблицы:

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

Снова используем внешний цикл для вывода строк, а внутренний для отдельных чисел в одной строке. Используем также отдельную переменную-счетчик n, в которой будет храниться выводимое число.

n:=1;

for i:=1 to 4 do

begin

for k:=1 to 4 do

begin

write(n, ' ');

n:=n+1;

end;

writeln;

end;

Дополнительная переменная-счетчик (n) здесь введена для большей прозрачности алгоритма. Заметив, что всегда выполняется n = (i-1)*4+k, можно обойтись без нее.

Разумеется, ту же задачу можно решить без вложенных циклов (вообще говоря, обойтись без них можно всегда). Например, заметив, что числа, стоящие в конце каждой строки делятся на 4, делаем так:

for n:=1 to 16 do

begin

write(n, ' ');

if n mod 4 = 0 then

writeln;

end;

Однако решения, основанные на вложенных циклах, как правило, интуитивно понятнее, их проще придумывать. Это связано с такой фундаментальной идеей программирования как разделение задачи на подзадачи. Выделяется отдельная часть решения задачи (вывод одной строки в приведенных примерах), затем с помощью внешнего цикла она выполняется много раз.

Типичные ошибки при написании вложенных циклов:

1. Наиболее частая ошибка – использование одной и той же переменной-счетчика для внешнего и внутреннего циклов. Выше она уже упоминалась.

2. При решении некоторых задач необходимо, чтобы одна переменная-счетчик на каждом шаге увеличивалась, а другая при этом уменьшалась. Следуя непостижимыми (для человека наделенного формально-логическим складом ума) путями интуитивного мышления многие студенты для решения этой задачи приходят к конструкции вида:

for i:=1 to n do

for k:=n downto 1 do …

Если вы хоть что-то поняли про вложенные циклы, то вам должно быть очевидно, что к решению поставленной задачи эта конструкция не имеет никакого отношения.

Напомним, что в качестве пределов изменения переменной-счетчика цикла можно использовать произвольное выражение, дающее результат целого типа:

for i:= to do …

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

Пример 3: Напечатайте числа в виде следующей таблицы:

1 2 3 4 5

3 4 5 6 7

5 6 7 8 9

7 8 9 10 11

Решение:

for i:=1 to 4 do

begin

for k:=2*i-1 to (2*i-1)+4 do

write(k, ' ');

writeln;

end;

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

for i:=1 to 10 do

begin

for k:=1 to 10 do

begin

...

end;

for n:=1 to 10 do

begin

...

end;

end;

Или так:

for i:=1 to 10 do

for k:=1 to 10 do

for n:=1 to 10 do …

В заключение небольшое замечание, касающееся правильного стиля написания программы, содержащей множество циклов (в частности вложенных). Следует избегать одновременного использования в качестве счетчиков пар переменных с именами i и j, а также p и q. На вид они очень похожи, что часто приводит к трудно обнаруживаемым ошибкам.

В операторах присваивания можно использовать арифметические выражения. Например:

num := (d + n) / 10;

sq := trunk(num) + 1;

Скобки обеспечивают необходимый порядок вычислений. Если бы в первом примере скобки бы были опущены:

num := d + n / 10;

то сначала было бы выполнено деление, приоритет которого выше. Приоритет в арифметических выражениях выше у операций умножения (*) и деления (/), ниже у сложения и вычитания.

Во втором из приведенных примеров производится присваивание значения целой переменной. Функция trunc дает целый результат, а число 1 записано без десятичной точки; таким образом, оба слагаемых в сумме дают целое значение. Вообще, когда все члены выражения – целые, само выражение принимает целое значение.

У сформулированного выше правила существует важное исключение: деление (с использованием знака /) всегда дает вещественный результат:

6.5 / 2 = 3.25

6 / 2 = 3.0

Деление нацело (нахождение частного и остатка) может быть выполнено при помощи операций div и mod.

Выражение может включать в себя и целые и вещественные члены. Наличие хотя бы одного вещественного члена или знака / приводит к тому, что значение результата будет вещественным. Функции trunc и round могут быть использованы для преобразования вещественного числа в целое.

Функция sqr возводит значение аргумента (записанного внутри скобок) в квадрат. В Паскале нет оператора возведения в произвольную степень. Возведение в степенно здесь осуществляется с использованием логарифмов. Вместо ax на Pascal можно написать exp(ln(a) * x).

Это может показаться странным, но знаки = и др. тоже играют роль операций. Выражения, содержащие подобные операции, принимают логическое значение и называются логическими выражениями. В состав логических выражений могут входить логические операции not (не), and (и), or (или).

1)

program z1;

begin

writeln('Hello World!')

end.

2)

program z2;

var

a, b, c: integer;

begin

readln(a, b, c);

writeln(c, ' ', b, ' ', a)

end.

3)

program z3;

var

a: word;

begin

readln(a);

a := a * a;

writeln(a)

end.

4)

program z4;

var

n, a, b, c: word;

begin

readln(n);

a := n mod 10;

n := n div 10;

b := n mod 10;

n := n div 10;

c := n;

n := 100 * a + 10 * b + c;

writeln(n)

end.

5)

program z5;

var

n, count: byte;

begin

readln(n);

count := 0;

count := count + n mod 2;

n := n div 2;

count := count + n mod 2;

n := n div 2;

count := count + n mod 2;

n := n div 2;

count := count + n;

writeln(count)

end.

1)program z1;

var

a, b: integer;

begin

readln(a, b);

if a > b then begin

writeln(a)

else begin

writeln(b)

end.

2)program z2;

var

a, b, c: integer;

begin

readln(a, b, c);

if a > b then begin

if a > c then begin

writeln(a)

end

else begin

writeln(c)

end

end

else begin

if b > c then begin

writeln(b)

end

else begin

writeln(c)

end

end

end.

3)program z3;

var

n: word;

a, b: byte;

begin

readln(n);

a := n mod 10;

n := n div 10;

b := n mod 10;

n := n div 10;

a := 10 * a + b;

writeln(n = a)

end.

4)program z4;

var

n: word;

left, right: byte;

begin

readln(n);

right := n mod 10;

n := n div 10;

right := right + n mod 10;

n := n div 10;

left := n mod 10;

n := n div 10;

left := left + n;

writeln(left = right)

end.

5)program z5;

var

n, a, b, c, d: byte;

begin

readln(n);

a := n mod 2;

n := n div 2;

b := n mod 2;

n := n div 2;

c := n mod 2;

n := n div 2;

d := n mod 2;

n := n div 2;

a := 8 * a + 4 * b + 2 * c + d;

writeln(n = a)

end.

6)program z6;

var

a, b, c, d, x1, x2: real;

begin

readln(a, b, c);

d := b * b - 4 * a * c;

if d >= 0 then begin

if d <> 0 then begin

x1 := (-b + sqrt(d)) / 2 * a;

x2 := (-b - sqrt(d)) / 2 * a;

writeln('x1 = ', x1:4:2, ', x2 = ', x2:4:2)

end

else begin

x1 := -(b / 2 * a);

writeln('x = ', x1:4:2)

end

end

else begin

writeln('No real solutions!');

end

end.

Этот адрес означает, что изображение

Это следующий параграф, сюда пользователь перейдёт по ссылке из первого параграфа.

Ну а дальше всё в ваших руках – точнее, на кончиках пальцев...

Примеры, как можно отформатировать текст

Наклонный текст

Жирный текст

Подчёркнутый текст

Моноширинный текст

Этот текст выровнен по центру

Этот текст выровнен по правому краю

Изображение (поддерживаются форматы png, jpeg, gif):

Горизонтальная линия:

Это – тире, а не дефис и не минус

Нижний индекс: формула воды H2O

Верхний индекс: площадь комнаты 25 м2

* Первая строка списка

* Вторая строка списка

Аудио-файл (поддержка форматов mp3 и ogg). Кнопка «Аудио» появится в панели инструментов.

Можно менять «на лету» основную иллюстрацию.

Несколько приёмов, использование которых сделает игру интереснее.

Ссылка на первый параграф

ыделение цифр из записи числа

Выделение цифр из записи числа.

Выделение цифр из двузначного числа n

Первая цифра - n div 10

Вторая цифра - n mod 10

Выделение цифр из трехзначного числа n

Первая цифра - n div 100

Вторая цифра - n div 10 mod 10

или - n mod 100 div 10

Третья цифра - n mod 10

Пример:

Задано двузначное число. Найти произведение цифр этого числа. (Если задано 27 то результат 14)

uses crt;

var

a,b,n,p:longint;

begin

clrscr; writeln(‘введите двузначное число’);

readln(n);

a:=n div 10;

b:=n mod 10;

p:=a*b;

writeln(‘p= ‘, p);

readkey

end.

Упражнения

1. Дано двузначное число. Найти сумму цифр.

2. Дано двузначное число. Найти число, полученное при прочтении его цифр справа налево.

3. Дано трехзначное число. Найти произведение цифр.

4. Дано трехзначное число. Найти число, полученное при перестановке первой и второй цифр заданного числа.

5. Дано трехзначное число. Найти число, полученное при перестановке второй и третьей цифр заданного числа.

6. Дано трехзначное число. Получить 6 различных чисел, образованных перестановкой цифр заданного числа.

7. Дано целое число, большее 99. Найти третью от конца его цифру (так, если данное число 2345, то искомая цифра 3).

8. Дано четырехзначное число. Найти сумму цифр заданного числа.

9. Дано четырехзначное число. Найти число, полученное перестановкой первых двух и последних двух цифр.

10. Дано четырехзначное число. Найти число, полученное при прочтении его цифр справа налево.

массивы

Массивы — структурированный тип данных

В предыдущих уроках мы с вами рассматривали задачи, в которых использовалось небольшое количество данных. Для каждого мы создавали отдельную ячейку памяти с уникальным именем. Однако зачастую приходится работать с большим количеством однотипных данных. Им такие требуются отдельные ячейки памяти — это понятно и естественно (два литра воды не поместятся в один стакан).

А вот указывать для каждой ячейки отдельное имя — неудобно. Как быть?

Один из методов решения такой: выделим для этих данных область последовательных ячеек памяти и назовем всю область общим именем. А для того, чтобы к каждой ячейке можно было обратиться, пронумеруем ячейки по порядку. Таким образом, для обращения к определенной ячейке нужно указать название всей конструкции и номер ячейки в ней.

Хранение однотипных данных в виде таблицы

Массив — это совокупность однотипных данных, хранящихся в последовательных ячейках памяти и имеющих общее имя. Ячейки называются элементами массива. Все элементы пронумерованы по порядку, и этот номер называется индексом элемента массива.

Все элементы массива имеют один и тот же тип. Сам массив при этом имеет имя — одно для всех элементов. Для обращения к конкретному элементу массива необходимо указать имя массива и (в квадратных скобках) индекс элемента.

Простейший вид массива — одномерный массив (рис. 8.1).

Рис. 8.1. Условное изображение одномерного массива в виде строки

А — имя массива, числа в клетках таблицы — элементы массива.

Рассмотрим запись А[3] = -8.

В этой записи:

А — имя массива,

3 — номер элемента массива (индекс),

А[3] — обозначение 3-го элемента массива,

-8 — значение 3-го элемента массива.

Основные действия по работе с массивами

Нам предстоит научиться выполнять ряд наиболее распространенных действий с массивами:

описание;

заполнение массива случайными числами;

заполнение массива с клавиатуры;

вывод на экран;

поиск максимального элемента;

вычисление суммы всех элементов массива;

вычисление количества положительных элементов.

Описание массива на языке Паскаль

<Имя массивам array [ ] of ;

Здесь — это тип данных, который имеет каждый элемент массива, а — границы изменения индекса.

Например:

var A: array [1..10] of integer;

Здесь тип индекса — интервальный, изменяется в интервале от 1 до 10, тип данных (элементов массива) — целый.

Заполнение массива случайными числами и вывод массива на экран

Рассмотрим задачу, в которой требуется с помощью датчика случайных чисел создать одномерный массив и вывести его на экран. Блок-схема алгоритма показана на рис. 8.2.

Рис. 8.2. Блок-схема алгоритма заполнения одномерного массива случайными числами и вывода массива на экран

Пример 8.1.

Основные действия по работе с массивами

Program Massivl;

uses Crt;

const { Раздел описания констант, то есть постоянных величин, определяемых в программе заранее и не изменяющихся по ходу выполнения программы }

N=10; { Имена констант не используются для имен переменных величин (из раздела var) }

var

A: array [1..N] of integer; { 1..N - тип индекса. Для индекса выбран интервальный тип, то есть интервал целых чисел от 1 до N, где N определено в разделе const }

i: ihteger; { Переменная, хранящая индекс элемента массива, к которому идет обращение }

begin

{II. Задание значений элементов массива как случайных чисел }

Randomize; { Инициализация датчика случайных чисел }

{ Задание элементов массива: }

for i:=1 to N do { Переменная i изменяется в цикле от 1 до N, то есть мы по очереди перебираем все элементы массива }

A[i]:=Random(100); { В очередной элемент массива A[i] записываем случайное число от 0 до 99, обратите внимание: i - номер элемента массива (принято говорить "индекс"), A[i] - значение элемента массива }

{ III. Вывод элементов массива на экран в одну строку }

ClrScr;

writeln('Введенный массив:');

for i:=l to N do

write(A[i]:4); { На каждый элемент массива выделяется по 4 позиции строки, чтобы они не склеивались при выводе!}

writeln { Этот "пустой" оператор вывода отработает только один раз и переведет курсор на новую строку для дальнейшей работы }

readln

end.

В данном примере мы заполнили массив случайными числами от 0 до 99. Это обеспечила нам функция random(100).

А если нам нужно получить случайные числа в другом диапазоне — например, не от нуля? Расчет нужно сделать такой: функция random(N) выдаст N различных чисел от 0 до N - 1. Если нам нужно, чтобы наименьшим числом диапазона было К, значит, необходимо прибавить это К к random(N). Наибольшее число, которое будет выдавать в этом случае формула random(N) + К, будет наибольшим числом диапазона.

Пусть, например, нам требуются случайные числа в диапазоне -100...+100. Считаем, сколько различных чисел в этом диапазоне: 100 положительных, 100 отрицательных и ноль. Итого 201.

Формула тут проста: вычесть из большего меньшее и прибавить 1.

Значит, N = 201, а К = -100.

То есть получаем формулу random(201) -100.

ЗАМЕЧАНИЕ

К сожалению, в таком виде формула работать не будет — при запуске программа «вылетит» с сообщением об ошибке. Это от «излишнего ума», который проявляет здесь среда Паскаль. Дело в том, что Паскаль считает тип этого выражения по функции random. А она имеет

тип word . Иными словами, беззнаковый. При попытке вычесть 100 из числа, меньшего 100, получаем отрицательный результат, что Паскаль не устраивает. Самый простой способ обойти эту напасть — паменять местами уменьшаемое (random) и вычитаемое, то есть написать: -100 + random(201). Тогда Паскаль будет считать тип этого выражения как integer по первому числу (-100), и оишбки не возникнет.

Задание 8.1.

Оформите эту программу так, чтобы задание массива и вывод его элементов на экран выполнялись в одном цикле. Вам понадобится составной оператор для тела цикла begin ... end.

Задание 8.2.

Добавьте в программу задания 8.1 новый цикл вывода элементов массива в обратном порядке (начиная с последнего). Попробуйте выполнить то же задание без введения нового цикла.

ЗАПОМНИТЕ!

Массив — это множество ячеек памяти. Поэтому любое действие с массивом заключаемся в том, чтобы перебрать все эти ячейки или, по крайней мере, какую-то их часть. Это значит, что любое действие с массивами должно содержать в себе цикл, в котором перебираются элементы массива. Если вы пишете программу с массивом и не написали цикла (for, while или repeat) — значит, вы ошиблись.

Выделение цифр из записи числа.

Выделение цифр из двузначного числа n

Первая цифра - n div 10

Вторая цифра - n mod 10

Выделение цифр из трехзначного числа n

Первая цифра - n div 100

Вторая цифра - n div 10 mod 10

или - n mod 100 div 10

Третья цифра - n mod 10

Пример:

Задано двузначное число. Найти произведение цифр этого числа. (Если задано 27 то результат 14)

uses crt;

var

a,b,n,p:longint;

begin

clrscr; writeln(‘введите двузначное число’);

readln(n);

a:=n div 10;

b:=n mod 10;

p:=a*b;

writeln(‘p= ‘, p);

readkey

end.

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: p7 gi'); 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;

SetLineStyle(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;

{Пользовательский шаблон заполнения}

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: p7 gi'); 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

ClearDevice;

SetBkColor(0); SetFillStyle(1,15);

Bar(0,0,GetMaxX div 2,GetMaxY);

SetFillStyle(1,0);

Bar(GetMaxX div 2,0,GetMaxX,GetMaxY);

OutTextXY(70,GetMaxY-25,'Нажмите DEL');

End;

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;

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; {процедура - лунная ночь со звездами}

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: p7BGI');

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: p7 gi'); IF GraphResult<>0 THEN HALT(1);

{ Построение осей координат }

X0:=GetMaxX div 2; Y0:=GetMaxY div 2;

Line(10,Y0,GetMaxX,Y0); Line(X0,10,X0,GetMaxY);

{ Построение стрелок }

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: p7 gi'); 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

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: p7 gi'); 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: p7BGI');

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;

VAR

Gd,Gm : INTEGER; Av : CHAR; X1, Y1, X, Y : INTEGER; U, H : REAL;

BEGIN

Gd:=Detect; InitGraph(Gd,Gm,'C: p7BGI');

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.Дано слово. Перенести три его первые буквы в конец.

5.Из слова «информатика» путем вырезок и склеек его букв получить слова «форма» и «тик».

6.Дано предложение. Заменить в нем все вхождения буквосочетания «ах» на «ух».

7.Дано слово. Поменять местами его половины.

8.Дано предложение. Добавить к нему в конце столько звездочек, сколько букв в этом слове.

9.Из слова «апельсин» путем вырезок и склеек его букв получить слово

«спаниель». 10.Дано предложение. Заменить в нем все вхождения буквосочетания «да» на «не».

11.Преобразуйте прописные буквы русского алфавита в заглавные.

12.Дан текст. Вывести на экран слова, состоящие из трех букв.

13.Дана строка, содержащая произвольный текст. Выяснить чего в нем больше: русских букв или цифр.

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

15.Определить длину последнего слова в строке.

16.Дана фраза определить сколько в ней предложений.

17.Дано слово. Сколько букв 'а' в этом слове стоит на четных местах.

18.Дано предложение. Определить, каких букв в нем больше: «м» или «н».

19.Дано предложение напечатать все его символы, предшествующие первой встретившейся запятой.

20.Дано предложение, в котором есть несколько букв «е». Найти порядковый номер первой и последней из них.

21.Дано предложение, в котором имеются буквы «с» и «т». Определить, какая из них встречается позже (при просмотре слова слева направо). Если таких букв несколько, то должны учитываться последние из них.

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

23.Дана строка, в которой имеется текст в скобках. Написать программу удаления части текста, заключенного в скобки, вместе со скобками. Оставшуюся часть строки отсортировать в алфавитном порядке.

24.Написать программу нахождения самого короткого слова заданной строки.

25.Написать программу подсчета в заданной строке количества букв латинского алфавита.

26.Написать программу подсчета количества букв «д» в последнем слове заданной строки.

27.Дано предложение. Переписать предложение, переставляя слова в нем в обратном порядке.

28.Написать программу нахождения в заданной строке первого слова, которое имеет заданную длину.

29.Проверить, являются ли заданные слова в предложении палиндромами (перевёртышами).

30.Написать программу получения из заданной строки новой строки путем удаления всех символов, не являющихся буквами латинского алфавита

31.Написать программу, которая выводит сообщение «ДЛИНА», если все слова в тексте имеют одинаковую длину.

32.Написать программу, определяющую, сколько слов в заданной строке оканчивается буквой «я», если известно, что слова обязательно стоит либо пробел, либо точка.

33.Вычеркните из заданного слова (русский алфавит) все буквы, совпадающие с последней буквой русского алфавита.

34.В предложения поменять первые символы "М" в словах на символ "П"(Пример. Входная строка: Мама мыла раму. Результат: Папа пыла раму). Если таких замен нет, то вывести об этом сообщение.

35.Написать программу определения слов заданной строки, которые оканчиваются на «ова».

36.Отсортировать некоторое слово в обратном алфавитном порядке.

37.Написать программу подсчета количества слов, имеющих один слог

38.Составьте программу, вычеркивающую. Каждую третью букву из заданного слова.

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

40.Из слова «программа» путем вырезок и склеек его букв получить слова «ром» и «рампа».

41.Дано предложение. Все пробелы в нем заменить на символ «_».

42.Дана квадратная матрица символьного типа. Транспонировать ее. Вывести на экран элементы, расположенные выше главной диагонали.

43.Дано слово. Получить и вывести на экран буквосочетание, состоящее из второго, третьего и четвертого символов.

44.Дано слово, состоящее из четного числа букв. Получить и вывести на экран его первую половину.

45.Дано слово. Получить и вывести на экран его часть, образованную идущими подряд буквами, начиная с m – ой n - ой.

46.Дана строка, содержащая текст на русском языке. Выяснить, входит ли данное слово в указанный текст, и если да, то сколько раз.

47.В предложении некоторые слова записаны подряд несколько раз. Отредактировать этот текст, удаляя из него подряд идущие одинаковые слова.

48.Дана строка, содержащая произвольный текст. Проверить правильно ли в нем расставлены круглые скобки (количество открывающихся должно совпадать с количеством закрывающихся).

49.Дана строка, содержащая текст на русском языке. Составить в алфавитном порядке список всех слов, встречающихся в этом тексте.

50.Дана строка, содержащая текст на русском языке и некоторая буква. Найти слово, содержащее наибольшее количество указанных букв.

задачи массивы

1. Дан массив целых чисел. Выяснить:

а) является ли р- й элемент массива положительным числом;

б) является ли k- й элемент массива четным числом;

в) какой элемент массива больше k- й или р- й.

2. Дан массив. Все его элементы:

а) увеличить в 2 раза;

б) уменьшить на число n;

в) разделить на первый элемент;

г) уменьшиться на 20;

д) умножить на последний элемент;

е) увеличить на число b.

3. Определить:

а) сумму всех элементов массива;

б) произведение всех элементов массива;

в) сумму квадратов всех элементов массива;

г) сумму шести первых элементов массива;

4. Дан массив вещественных чисел, размер которого N. Подсчитать, сколько в нем

отрицательных, положительных и нулевых элементов.

5. Дан массив целых чисел. Выяснить:

а) верно ли, что сумма элементов массива есть четное число;

б) верно ли, что сумма квадратов элементов массива есть пятизначное число;

в) верно ли, что сумма элементов массива неотрицательна.

6. Дан массив целых чисел.

а) Найти максимальный и минимальный элементы;

б) Найти номер максимального элемента;

в) На сколько максимальный элемент больше от минимального элемента;

г) Поменять максимальный элемент с минимальным элементом, если их несколько,

то одним из них;

д) Сколько элементов находятся между максимальным и минимальным

элементами;

е) Найти максимальный элемент из отрицательных элементов массива;

ж) Найти сумму элементов находящихся между максимальным и минимальным

элементами;

7. Дана последовательность целых чисел а1, а2, …, ап. Выяснить, какое число

встречается раньше – положительное или отрицательное.

8. Определить количество элементов последовательности натуральных чисел в

промежутке от L до N, кратных числу М.

9. Удалить 10-й элемент одномерного массива целых чисел В(п).

10. На k-ое место одномерного массива целых чисел вставить элемент, равный

квадрату суммы 5-го и 10-го элементов.

задачи на ветвление

1. Проверьте, делится ли число a на число b без остатка.

2. Определить является ли заданное число n четным и двузначным.

3. Определите, кратно ли 3 целочисленная переменная х. Если это верно, то выведите на экран соответствующее сообщение, и “нет” в противном случае.

4. Проверить превышает ли 200 сумма квадратов двух натуральных чисел.

5. Два прямоугольника заданы длинами сторон. Определите, можно ли первый прямоугольник целиком разместить во втором.

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

7. Проверить принадлежит ли точка с заданными координатами третей координатной четверти.

8. У школьников имеется S рублей. Бутылка сока стоит А рублей. Пустая бутылка стоит В рублей (В

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

у=a*x+b и осями координат.

10. Определить, пройдет ли кирпич с ребрами a,b,c в прямоугольное отверстие со сторонами x и y.

1. Линейные алгоритмы

Задача 1. Даны две целые переменные A, B. Составить фрагмент программы, после исполнения которого, значения переменных поменялись бы местами (новое значение A равно старому значению B и наоборот).

USES Crt;

VAR

A, B, T : INTEGER;

BEGIN

ClrScr; { Чистка экрана }

Write(‘ Введите два значения ‘);

ReadLn(A,B);

{Введем дополнительную целую переменную T}

T := A; A := B; B := T;

Write(A,B);

END.

Задача 2. Решить предыдущую задачу, не используя дополнительных переменных (и предполагая, что значениями целых переменных могут быть произвольные целые числа).

USES Crt;

VAR

A, B : INTEGER;

BEGIN

ClrScr;

Write(‘ Введите два значения ‘);

ReadLn(A,B);

A := A + B; B := A - B; A := A - B;

Write(A,B);

END.

Задача 3. Задан радиус окружности. Найти площадь и длину окружности.

USES Crt;

VAR

R : INTEGER;

S,L: REAL;

BEGIN

ClrScr;

Write(‘ Введите радиус окружности ‘);

ReadLn(R);

{Pi - зарезервированное значение}

S:=Pi*R*R; {Вычисление площади окружности}

L:=2*Pi*R; {Вычисление длины окружности}

WriteLn(‘ Площадь окружности = ’,S:4:2);

WriteLn(‘ Длина окружности = ‘,L:4:2);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Даны три действительных положительных числа. Найти среднее геометрическое и среднее арифметическое этих чисел.

2. Даны катеты прямоугольного треугольника. Найти его гипотенузу и площадь.

3. Мальчик купил несколько тетрадей по сто рублей и несколько обложек по 50 рублей. Составить программу, которая могла бы подсчитать стоимость всей покупки.

1)Вывести на экран сообщение «Hello World!».

Некоторые учебные курсы по программированию рассматривают эту задачу как самую первую при изучении конкретного языка или основ программирования.

2) вывести на экран три введённых с клавиатуры числа в порядке, обратном их вводу.

Другими словами, мы ввели с клавиатуры три числа (сначала первое, потом второе и третье), и после этого единственное, что нам нужно сделать – это вывести третье, затем второе и первое.

3)Дано натуральное число меньше 256. Сформировать число, представляющее собой его квадрат.

4)Сформировать число, представляющее собой реверсную (обратную в порядке следования разрядов) запись заданного трехзначного числа. Например, для числа 341 таким будет 143.

Давайте разберемся с условием. В нашем случае с клавиатуры вводится некоторое трехзначное число (трехзначными называются числа, в записи которых три разряда (то есть три цифры), например: 115, 263, 749 и т. д.). Нам необходимо получить в некоторой переменной число, которое будет представлять собой реверсную запись введенного числа. Другими словами, нам нужно перевернуть введенное число «задом наперед», представить результат в некоторой переменной и вывести его на экран.

5) Дано натуральное число меньше 16. Посчитать количество его единичных битов. Например, если дано число 9, запись которого в двоичной системе счисления равна 10012 (подстрочная цифра 2 справа от числа означает, что оно записано в двоичной системе счисления), то количество его единичных битов равно 2.

решения

на главную

2. Разветвляющиеся алгоритмы

2.1 Условный оператор IF

Задача 1. Определить является ли данное целое число R четным. Дать словесный ответ. USES Crt; VAR R: INTEGER; BEGIN ClrScr; WriteLn('Введите число');

ReadLn(R); IF R MOD 2 = 0 Then WriteLn('Число четное')

Else WriteLn('Число не четное');

END.

Задача 2. Даны три целых числа. Выбрать из них те, которые принадлежат интервалу [1,3]

USES Crt;

VAR

X, Y, Z: INTEGER;

BEGIN

ClrScr;

WriteLn('Введите три целых числа');

ReadLn(X,Y,Z);

IF (X>=1) AND (X<=3) Then WriteLn('Первое число принадлежит заданному интервалу')

Else WriteLn('Первое число не принадлежит заданному интервалу');

IF (Y>=1) AND (Y<=3) Then WriteLn('Второе число принадлежит заданному интервалу')

Else WriteLn('Второе число не принадлежит заданному интервалу');

IF (Z>=1) AND (Z<=3) Then WriteLn('Третье число принадлежит заданному интервалу')

Else WriteLn('Третье число не принадлежит заданному интервалу');

END.

Задача 3. Даны положительные целые числа A, B, C. Выяснить существует ли треугольник с длинами сторон A, B, C. USES Crt; VAR A, B, C: INTEGER;

BEGIN

ClrScr;

WriteLn('Введите три числа');

ReadLn(A,B,C);

IF (A+B>C) AND (A+C>B) AND (B+C>A) Then WriteLn('Треугольник построить можно')

Else WriteLn('Треугольник построить нельзя');

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Заданы два числа X, Y. Меньшее из двух значений заменить на 0. Если же они равны – заменить нулями оба.

2. Поменять местами значения целых переменных A, B, C таким образом, чтобы оказалось ABC.

3. Заданы три числа X, Y, Z. Найти min(XYZ, X+Y+Z).

3.1 Оператор цикла FOR

Задача 1. Найти произведение положительных, сумму и количество отрицательных из 10 введенных целых значений.

USES Crt;

VAR

X: INTEGER; S, K, P: INTEGER; I: BYTE;

Begin

P:=1; S:=0; K:=0;

FOR I:=1 TO 10 DO Begin

WriteLn(‘Введите ‘,I,’ -е значение’); ReadLn(x);

IF X>0 Then P:=P*X; { произведение положительных }

IF X<0 Then Begin

S:=S+X; { сумма отрицательных }

K:=K+1; { количество отрицательных }

End;

End;

WriteLn(‘ Произведение положительных значений = ‘,p);

WriteLn(‘ Сумма отрицательных значений = ‘,s);

WriteLn(‘ Количество отрицательных значений = ‘,k);

END.

Задача 2. Из N целых чисел найти минимальное значение.

USES Crt;

VAR MI, X: INTEGER; I,N: BYTE;

BEGIN

WriteLn('Введите количество значений'); ReadLn(n);

WriteLn('Введите первое значение'); ReadLn(mi);

FOR I:=2 TO N DO Begin

WriteLn(‘Введите ‘,I,’ -е значение’); ReadLn(x);

IF X

End;

WriteLn(‘Минимальное значение = ‘,MI);

END.

Задача 3. Из N целых чисел найти минимальное среди положительных и максимальное среди отрицательных значений.

USES Crt;

VAR

MI, MA, N, I, X: INTEGER; FL, FL1: BYTE;

BEGIN

WriteLn('Введите количество значений'); ReadLn(N);

FL:=0; FL1:=0;

FOR I:=1 TO N DO Begin

WriteLn('Введите ',I,' значение'); ReadLn(X);

IF (FL=0) AND (X<0) Then Begin

MA:=X; FL:=1;

End;

IF (FL1=0) AND (X>0) Then Begin

MI:=X; FL1:=1;

End;

IF (X MA) Then MA:=X;

IF (X>0) AND (X

End;

IF FL=1 Then WriteLn('максимальное среди отрицательных = ',ma)

Else WriteLn('отрицательных нет');

IF FL1=1 Then WriteLn('минимальное среди положительных = ',mi)

Else WriteLn('положительных нет');

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Найти среднее арифметическое минимального и максимального элементов из 10 введенных.

2. Напечатать лучший результат заплыва среди 8 участников.

3. Из n введенных чисел найти максимальное значение среди положительных элементов.

4. В группе определить самого высокого мальчика и самую маленькую девочку.

5. В ЭВМ вводятся результаты соревнований по прыжкам в высоту. Число участников произвольно. Напечатать сообщение о победителе.

Вступление

используйте книгу как можно чаще

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;

WriteLn(‘Измененный текст:’); WriteLn(A);

END.

Задача 2. Третье предложение в тексте заключить в скобки.

USES Crt;

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. В тексте во втором предложении после слов «Ура» поставить «!!!».2.2 Условный оператор CASE

Задача 1. Составить программу, которая по введенному значению 1, 2, 3, 4 вычисляет площадь треугольника:

1. По основанию и высоте

2. По трем сторонам

3. По двум сторонам и углу между ними

4. Выход

USES Crt; LABEL M1,M2; VAR X:INTEGER; A,H,S,B,L,C,P:REAL; BEGIN M1:ClrScr; WriteLn('Вычисление площади треугольника'); WriteLn; WriteLn('1.По основанию и высоте'); WriteLn('2.По трем сторонам'); WriteLn('3.По двум сторонам и углу между ними');

WriteLn('4.Выход');

WriteLn;

WriteLn('Введите номер пункта'); ReadLn(X);

CASE X OF

1: Begin

ClrScr;

Write('Введите основание и высоту треугольника '); ReadLn(A,H);

S:=A*H/2;

WriteLn('Площадь треугольника = ',S:5:2); ReadLn;

GOTO M1;

End;

2: Begin

ClrScr;

Write('Введите значения сторон треугольника ');

ReadLn(A,B,C);

P:=(A+B+C)/2;

S:=Sqrt(P*(P-A)*(P-B)*(P-C));

WriteLn('Площадь треугольника = ',S:5:2); ReadLn;

GOTO M1

End;

3: Begin

ClrScr;

Write('Введите значения двух сторон и угол между ними ');

ReadLn(A,B,L);

S:=A*B*Sin(L*Pi/180)/2;

WriteLn('Площадь треугольника = ',S:5:2); ReadLn;

GoTo M1;

End;

4: Begin

ClrScr;

WriteLn('Программа закончила свою работу'); ReadLn;

GoTo M2;

End;

ELSE

ClrScr;

WriteLn('Номер пункта ввели неверно'); ReadLn;

GoTo M1;

End;

M2:END.

Задача 2. Составить программу, которая по введенному значению выводит оценки по математике, физике, информатике.

USES Crt; LABEL R1,R2; VAR X: INTEGER; M:CHAR; BEGIN

R1:ClrScr; WriteLn('ПРГ выводит оценки по математике, физике и химии');

WriteLn('1.Вывод оценок по предметам');

WriteLn('2.Выход');

WriteLn('Введите номер пункта');

ReadLn (X);

CASE X OF

1: Begin

ClrScr; WriteLn(' По какому предмету Вы хотите увидеть оценки'); WriteLn(' М - математика');

WriteLn(' Ф - физика');

WriteLn(' Х - химия');

ReadLn(M);

CASE M OF

'М','м':WriteLn('5 5 4 4 5 5 3 5 5 ');

'Ф','ф':WriteLn('5 4 5 3 5 4 5 5 5 ');

'Х','х':WriteLn('4 3 5 3 4 4 4 5 ');

End;

End;

2: Begin

WriteLn('Программа закончена');

GoTo R2;

End;

Else

WriteLn('Номер неверен'); ReadLn;

GoTo R1;

End;

R2:End.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Составить программу, которая по введенному значению 1, 2, 3 вычисляет:

1. Площадь параллелограмма

2. Периметр параллелограмма

3. Выход

2. Составить программу «Календарь XX столетия», которая определяет день недели любого дня XX-го столетия. По введенному значению 1, 2, 3 вычисляет

1. номер дня недели по формуле, где D- день, М-месяц, G-год:

• S=[(12-M)/10]

• K=[(G-1900-S)*365,25]+[(M+12*S-2)*30,59]+D+29

• N=K-7[K/7] (N-вычисляется от 0-воскресенье до 6-суббота, []-целая часть)

2. день недели по его номеру

3. выход

3. Циклические алгоритмы

4.2 Двумерные массивы

4.2.1 Алгоритмы действий над элементами двумерного массива

Задача 1. В течение недели измерялась температура три раза в день: утром, в обед и вечером. Показания записали в таблицу размерностью 7х3. Определить среднюю температуру за каждый день.

USES Crt;

VAR

T:ARRAY[0..7,0..3] OF INTEGER;

I,J:BYTE; S:INTEGER; ST:REAL; A:STRING[12];

BEGIN

ClrScr; WriteLn;

{ Заполнение таблицы }

FOR I:=1 TO 7 DO Begin

WriteLn(' Введите показания за ',I,' день');

FOR J:=1 TO 3 DO Begin

CASE J OF

1: A:=' Утром - ';

2: A:=' В обед - ';

3: A:=' Вечером - ';

End;

Write(A); ReadLn(T[I,J]);

End;

End; WriteLn;

{ Подсчет средней температуры за каждый день }

FOR I:=1 TO 7 DO Begin

S:=0;

FOR J:=1 TO 3 DO

S:=S+T[I,J];

ST:=S/3;

WriteLn('Средняя температура за ',I,' день = ',ST:4:1);

End;

END.

Задача 2. Группа из 10 учащихся сдавала экзамен по 4 предметам. Результаты экзаменов записали в таблицу размерностью 10х4. Определить средний балл по каждому предмету.

USES Crt;

VAR

E:ARRAY[0..10,0..4] OF INTEGER;

I,J:BYTE; S:INTEGER; SB:REAL; A:STRING[16];

BEGIN

ClrScr; WriteLn;

{ Заполнение таблицы }

FOR I:=1 TO 10 DO Begin

WriteLn(' Введите оценки ',I,' учащегося');

FOR J:=1 TO 4 DO Begin

CASE J OF

1: A:=' Математика - ';

2: A:=' Физика - ';

3: A:=' Химия - ';

4: A:=' Информатика - ';

End;

Write(A); ReadLn(E[I,J]);

End;

End; WriteLn;

{ Подсчет среднего балла по каждому предмету. Циклы меняются местами.' }

FOR J:=1 TO 4 DO Begin

S:=0;

FOR I:=1 TO 10 DO

S:=S+E[I,J];

SB:=S/10;

CASE J OF

1: A:=' математике - ';

2: A:=' физике - ';

3: A:=' химии - ';

4: A:=' информатике - ';

End;

WriteLn(' Средний балл по ',A,' = ',SB:4:1);

End;

END.

Задача 3. Поменять местами значения К-ого и Р-ого столбцов матрицы В, размерностью MхM, заполненную случайным образом.

USES Crt;

LABEL M1;

CONST M=8;

VAR

A:ARRAY[0..M,0..M] OF INTEGER;

I,J,K,P:BYTE; PP:INTEGER;

BEGIN

ClrScr;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения двумерного массива');

FOR I:=1 TO M DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(23); Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

WriteLn(' Введите номера столбцов, которые необходимо поменять');

WriteLn(' Их значения не должны превышать ',M);

M1:ReadLn(K,P);

IF (K>M) OR (P>M) THEN GOTO M1;

{ Перестановка значений введенных столбцов }

FOR I:=1 TO M DO Begin

PP:=A[I,K]; A[I,K]:=A[I,P]; A[I,P]:=PP;

End;

WriteLn(' Измененный двумерный массив');

FOR I:=1 TO M DO Begin

FOR J:=1 TO M DO Begin

Write(A[I,J]:3);

End; WriteLn;

End;

END.

Задача 4. Дан двумерный массив размерностью 6х3, заполненный целыми числами. Подсчитать количество строк, в которых первый элемент строки меньше нуля.

USES Crt;

VAR

M:ARRAY[0..6,0..3] OF INTEGER;

I,J,K:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения двумерного массива');

FOR I:=1 TO 6 DO Begin

FOR J:=1 TO 3 DO Begin

M[I,J]:=Random(23)-10; Write(M[I,J]:3);

End; WriteLn;

End; WriteLn; K:=0;

{ Подсчет количества строк, в которых первый элемент строки меньше 0 }

FOR I:=1 TO 6 DO

IF M[I,1]<0 THEN Inc(K);

Write(' Количество строк, в которых первый элемент строки меньше 0 = ',K);

END.

Задача 5. Дан двумерный массив размерностью Nх2N, заполненный целыми числами. Найти среднее арифметическое элементов, имеющие четные номера строк.

USES Crt;

CONST N=5;

VAR

H:ARRAY[0..N,0..2*N] OF INTEGER;

I,J,K:BYTE; S:LongInt; SA:REAL;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива'); WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO 2*N DO Begin

H[I,J]:=Random(23); Write(H[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Нахождение суммы значений элементов, имеющих четные номера строк }

I:=2; K:=0;

WHILE I<=N DO Begin

FOR J:=1 TO 2*N DO Begin

S:=S+H[I,J]; Inc(K);

End; I:=I+2;

End;

SA:=S/K;

Write(' Среднее арифметическое элементов, имеющих четные номера строк =',SA:4:1);

END.

Задача 6. Дан двумерный массив размерностью NхM, заполненный случайным образом. Определить, есть ли в данном массиве столбец, в котором равное количество положительных и отрицательных элементов.

USES Crt;

CONST N=6; M=8;

VAR

A:ARRAY[0..N,0..M] OF INTEGER;

I,J,KO,KP,FL:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO N DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(20)-10; Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

FOR J:=1 TO M DO Begin

KP:=0; KO:=0;

FOR I:=1 TO N DO Begin

IF A[I,J]>0 THEN Inc(KP);

IF A[I,J]<0 THEN Inc(KO);

End;

IF KP=KO THEN Begin

WriteLn(' В ',J,' столбце равное количество положительных и отрицательных элементов'); FL:=1;

End;

End;

IF FL=0 THEN WriteLn(' Нет столбцов, в которых равное количество положительных и отрицательных элементов');

END.

Задача 7. Дан двумерный массив размерностью NхM, заполненный случайным образом. Определить, есть ли в данном массиве строка, в которой ровно два отрицательных элемента.

USES Crt;

CONST N=6; M=8;

VAR

A:ARRAY[0..N,0..M] OF INTEGER;

I,J,K,FL:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO N DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(40)-15; Write(A[I,J]:3);

End; WriteLn;

End; WriteLn; FL:=0;

{ Определение строк, в которых ровно два отрицательных элемента }

FOR I:=1 TO N DO Begin

K:=0;

FOR J:=1 TO M DO

IF A[I,J]<0 THEN Inc(K);

IF K=2 THEN Begin WriteLn('В ',I,' строке ровно два отрицательных элемента');FL:=1; End;

End;

IF FL=0 THEN Writeln(' Нет строк, в которых ровно два отрицательных элемента');

END.

Задача 8. Дан двумерный массив размерностью 4х6 и величина N. Подсчитать количество строк, в которых есть элемент равный N.

USES Crt;

LABEL M1;

VAR

M:ARRAY[0..4,0..6] OF INTEGER;

I,J,K:BYTE; N:INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 4 DO Begin

FOR J:=1 TO 6 DO Begin

M[I,J]:=Random(50); Write(M[I,J]:3);

End; WriteLn;

End; WriteLn;

Write(' Введите значение величины N '); ReadLn(N);

K:=0;

{ Нахождение строк, в которых имеется величина N }

FOR I:=1 TO 4 DO Begin

FOR J:=1 TO 6 DO

IF M[I,J]=N THEN Begin K:=K+1; GOTO M1; End;

M1: End;

WriteLn(' Количество строк, в которых есть элемент равный ',N,' = ',K);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Найти произведение элементов К-го и Р-го столбцов квадратной матрицы, размерностью 6х6.

2. Дан двумерный массив размерностью 5х3, заполненный целыми числами. Найти произведение элементов нечетных строк матрицы.

3. Дан двумерный массив размерностью 5х6, заполненный целыми числами и величина К. Найти количество элементов, равных К и их сумму.

4. Дан двумерный массив размерностью NхM, заполненный целыми числами. Определить, есть ли в данном массиве столбец, в котором имеются одинаковые элементы.

4.1.5 Алгоритмы сортировки числового массива

Задача 1. Отсортировать числовой массив. Первый способ.

USES Crt;

CONST N=30;

VAR

A:ARRAY[0..N] OF INTEGER;

I,J: BYTE; PP:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива ');

FOR I:=1 TO N DO Begin

A[I]:=Random(50); Write(A[I]:4);

End; WriteLn;

{ Сортировка массива }

FOR I:=2 TO N DO

FOR J:=N DOWNTO I DO

IF A[J-1]>A[J] THEN Begin PP:=A[J]; A[J]:=A[J-1]; A[J-1]:=PP; End;

WriteLn(' Отсортированный массив ');

FOR I:=1 TO N DO

Write(A[I]:4);

END.

Задача 2. Отсортировать числовой массив. Второй способ.

USES Crt;

CONST N=30;

VAR

A:ARRAY[0..N] OF INTEGER;

I,J: BYTE; PP:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива ');

FOR I:=1 TO N DO Begin

A[I]:=Random(50); Write(A[I]:4);

End; WriteLn;

{ Сортировка массива }

FOR I:=1 TO N-1 DO

FOR J:=I+1 TO N DO

IF A[I]>A[J] THEN Begin PP:=A[I]; A[I]:=A[J]; A[J]:=PP; End;

WriteLn(' Отсортированный массив ');

FOR I:=1 TO N DO

Write(A[I]:4);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

Даны два упорядоченных массива целых чисел М1 и М2. Слить их в упорядоченный массив. Рассмотреть случаи, когда массивы М1 и М2 упорядочены одинаково и когда по-разному.

3.2 Оператор цикла WHILE

Задача 1. Дано целое число а и натуральное (целое неотрицательное) число n. Вычислить а в степени n. {Введем целую переменную k, которая меняется от 0 до n, причем поддерживается такое свойство: b = (a в степени k).}

USES Crt;

VAR

A, N, B, K : INTEGER;

BEGIN

ClrScr;

Write(‘ Введите два значения ‘); ReadLn(A,N);

K := 0; B := 1;

While K <> N DO Begin

K := K + 1; B := B * A;

End;

Write(‘ A в степени N = ’,B);

END.

Другое решение той же задачи:

USES Crt;

VAR

A, N, B, K : INTEGER;

BEGIN

ClrScr; { Чистка экрана }

Write(‘ Введите два значения ‘); ReadLn(A,N);

K := N; B := 1;

{A в степени N = B * (A в степени K)}

While K <> 0 DO Begin

K := K - 1; B := B * A;

End;

Write(‘ A в степени N = ’,B);

END.

Задача 2. Даны натуральные числа а, b. Вычислить произведение а*b, используя в программе лишь операции +, -, =, <>.

USES Crt;

VAR

A, B, C, K : INTEGER;

BEGIN

Write(‘ Введите два значения ‘); ReadLn(A,B);

K := 0; C := 0;

While K <> B DO Begin

K := K + 1; C := C + A;

End;

{C = A * K и K = B, следовательно, C = A * B}

Write(‘ A*B= ‘,C);

END.

Задача 3. Дано натуральное (целое неотрицательное) число A и целое положительное число D. Вычислить частное Q и остаток R при делении A на D, не используя операций DIV и MOD. (Согласно определению, А = Q * D + R, 0 <= R < D.)

USES Crt;

VAR

A, D, R, Q : INTEGER;

BEGIN

ClrScr;

Write(‘ Введите два значения ‘); ReadLn(a,d);

R := A; Q := 0;

While Not (R < D) DO Begin

R := R - D; {R >= 0}

Q := Q + 1;

End;

WriteLn(‘ Частное = ’,Q);

WriteLn(‘ Остаток = ’,R);

END.

Задача 4. Каждый год урожайность повышается на 5%. Через сколько лет урожай удвоится?

USES Crt;

VAR

YR, KL: BYTE; YRG: REAL;

Begin

ClrScr;

Write('Введите урожайность '); ReadLn(YR);

YRG:=YR;

While (YRG <2*YR) Do Begin

YRG:=YRG+0.05*YRG;

KL:=KL+1;

End;

WriteLn('Новый урожай ',YRG:5:0);

Write('Через ',KL,' лет урожай удвоится');

END.

Задача 5. Деду M лет, а внуку N лет. Через сколько лет дед станет вдвое старше внука. И сколько при этом лет будет деду и внуку.

USES Crt;

VAR

M,N: BYTE; Kl: BYTE;

BEGIN

ClrScr;

Write('Введите количество лет деда '); ReadLn(m);

Write('Введите количество лет внука '); ReadLn(n);

KL:=0;

While (M>2*N) DO Begin

M:=M+1; N:=N+1; KL:=KL+1;

End;

WriteLn(M,' лет деду');

WriteLn(N,' лет внуку');

WriteLn('Через ',KL,' лет дед вдвое станет старше внука');

END.

Задача 6. Поле засеяли цветами двух сортов на площади S1 и S2. Каждый год площадь цветов первого сорта увеличивается вдвое, а площадь второго сорта увеличивается втрое. Через сколько лет площадь первых сортов будет составлять меньше 10% от площади вторых сортов.

USES Crt;

VAR

S1,S2:WORD; KL:BYTE;

BEGIN

ClrScr;

Write('Введите площадь, которую засеяли цветами 1-го сорта '); ReadLn(S1);

Write('Введите площадь, которую засеяли цветами 2-го сорта '); ReadLn(S2);

KL:=1;

While (S1>0.1*S2) DO Begin

S1:=S1*2; S2:=S2*3; KL:=KL+1;

End;

WriteLn('Площадь, которую засеяли цветами 1-го сорта ',S1);

WriteLn('Площадь, которую засеяли цветами 2-го сорта ',S2);

WriteLn('Через ', kl,' лет');

END.

Задача 7. Составить программу перевода числа из 10 системы счисления в 2 систему счисления.

Для этой задачи представлено два решения.

a)

USES Crt;

VAR

DES, OST, I, DW:INTEGER;

BEGIN

ClrScr;

Write('Введите десятичное число '); ReadLn(DES);

I:=1;

While (DES>=2) DO Begin

OST:=DES mod 2;

DES:=DES div 2;

DW:=DW+OST*I;

I:=I*10;

End;

DW:=DW+DES*I;

Write('Двоичная запись числа ',DW);

END.

b)

USES Crt;

Const A=10;

VAR

DES, OST, I:INTEGER;

DW:Array[1..100] OF INTEGER;

BEGIN

ClrScr;

Write('Введите десятичное число '); ReadLn(des);

I:=1;

While (des>=2) DO Begin

OST:=DES mod 2;

DES:=DES div 2;

DW[I]:=OST;

I:=I+1;

End;

DW[I]:=DES;

FOR I:=I DownTo 1 DO

Write(DW[I]);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Составить программу, печатающую квадраты всех натуральных чисел от 0 до заданного натурального n.

2. Дано натуральное n, вычислить n! (0!=1, n! = n * (n-1)!).

3. Последовательность Фибоначчи определяется так: a(0)= 1, a(1) = 1, a(k) = a(k-1) + a(k-2) при k >= 2. Дано n, вычислить a(n).

4. К старушке на обед ходят кошки. Каждую неделю две кошки приводят свою подружку. В доме у старушки 100 мисок. Через какое время появятся лишние кошки, и сколько кошек при этом останется голодными.

5. Известна сумма номеров страниц, определить номер страницы.

6. Лягушка каждый последующий прыжок делает в два раза короче предыдущего. Достигнет ли она болота и за сколько прыжков. Длину первого прыжка задайте самостоятельно.

Сборник задач по программированию на языке Паскаль

Автор: Чолокоглы Алина Олеговна, учитель информатики и ИКТ МАОУ СОШ №44 г.Томска

Описание материала: Сборник задач посвящен вопросам программирования на языке программирования Pascal 7.0. В нем подробно рассматриваются решения большого количества задач, от простых до достаточно сложных.

Сборник адресован учащимся, преподавателям, ведущим занятия по информатике и программированию, а также всем желающим самостоятельно овладеть искусством программирования на языке Pascal 7.0.

Сборник содержит условия задач и одно или два варианта их решения на языке программирования Pascal 7.0.

Задачи в сборнике классифицированы по основным разделам: линейные алгоритмы, разветвляющиеся алгоритмы, циклические алгоритмы, обработка массивов, обработка строк и создание графических изображений. После каждого раздела предлагаются задачи для самостоятельного решения. Внутри каждого раздела задачи по мере возможности расположены по возрастанию степени трудности.

СОДЕРЖАНИЕ

1. Линейные алгоритмы 4

2. Разветвляющиеся алгоритмы 5

2.1 Условный оператор IF 5

2.2 Условный оператор CASE 6

3. Циклические алгоритмы 8

3.1 Оператор цикла FOR 8

3.2 Оператор цикла WHILE 9

4. Обработка массивов 12

4.1 Одномерные массивы 12

4.1.1 Алгоритмы поиска и присвоения значений элементам массива 12

4.1.2 Алгоритмы нахождения суммы, произведения и количества элементов массива. Работа с индексами элементов массива 14

4.1.3 Алгоритмы нахождения наибольшего или наименьшего элемента массива и его индекса 18

4.1.4 Алгоритмы удаления, вставки и перестановки элементов 21

4.1.5 Алгоритмы сортировки числового массива 22

4.2 Двумерные массивы 23

4.2.1 Алгоритмы действий над элементами двумерного массива 23

4.2.2 Алгоритмы формирования одномерного массива 28

4.2.3 Алгоритмы нахождения наибольшего и наименьшего элементов двумерного массива 31

4.2.4 Алгоритмы удаления, вставки и перестановки элементов 33

5. Обработка строк 34

5.1 Подсчет и вывод символов 34

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

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

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

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

1. Линейные алгоритмы

Задача 1. Даны две целые переменные A, B. Составить фрагмент программы, после исполнения которого, значения переменных поменялись бы местами (новое значение A равно старому значению B и наоборот).

USES Crt;

VAR

A, B, T : INTEGER;

BEGIN

ClrScr; { Чистка экрана }

Write(‘ Введите два значения ‘);

ReadLn(A,B);

{Введем дополнительную целую переменную T}

T := A; A := B; B := T;

Write(A,B);

END.

Задача 2. Решить предыдущую задачу, не используя дополнительных переменных (и предполагая, что значениями целых переменных могут быть произвольные целые числа).

USES Crt;

VAR

A, B : INTEGER;

BEGIN

ClrScr;

Write(‘ Введите два значения ‘);

ReadLn(A,B);

A := A + B; B := A - B; A := A - B;

Write(A,B);

END.

Задача 3. Задан радиус окружности. Найти площадь и длину окружности.

USES Crt;

VAR

R : INTEGER;

S,L: REAL;

BEGIN

ClrScr;

Write(‘ Введите радиус окружности ‘);

ReadLn(R);

{Pi - зарезервированное значение}

S:=Pi*R*R; {Вычисление площади окружности}

L:=2*Pi*R; {Вычисление длины окружности}

WriteLn(‘ Площадь окружности = ’,S:4:2);

WriteLn(‘ Длина окружности = ‘,L:4:2);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Даны три действительных положительных числа. Найти среднее геометрическое и среднее арифметическое этих чисел.

2. Даны катеты прямоугольного треугольника. Найти его гипотенузу и площадь.

3. Мальчик купил несколько тетрадей по сто рублей и несколько обложек по 50 рублей. Составить программу, которая могла бы подсчитать стоимость всей покупки.

2. Разветвляющиеся алгоритмы

2.1 Условный оператор IF

Задача 1. Определить является ли данное целое число R четным. Дать словесный ответ. USES Crt; VAR R: INTEGER; BEGIN ClrScr; WriteLn('Введите число');

ReadLn(R); IF R MOD 2 = 0 Then WriteLn('Число четное')

Else WriteLn('Число не четное');

END.

Задача 2. Даны три целых числа. Выбрать из них те, которые принадлежат интервалу [1,3]

USES Crt;

VAR

X, Y, Z: INTEGER;

BEGIN

ClrScr;

WriteLn('Введите три целых числа');

ReadLn(X,Y,Z);

IF (X>=1) AND (X<=3) Then WriteLn('Первое число принадлежит заданному интервалу')

Else WriteLn('Первое число не принадлежит заданному интервалу');

IF (Y>=1) AND (Y<=3) Then WriteLn('Второе число принадлежит заданному интервалу')

Else WriteLn('Второе число не принадлежит заданному интервалу');

IF (Z>=1) AND (Z<=3) Then WriteLn('Третье число принадлежит заданному интервалу')

Else WriteLn('Третье число не принадлежит заданному интервалу');

END.

Задача 3. Даны положительные целые числа A, B, C. Выяснить существует ли треугольник с длинами сторон A, B, C. USES Crt; VAR A, B, C: INTEGER;

BEGIN

ClrScr;

WriteLn('Введите три числа');

ReadLn(A,B,C);

IF (A+B>C) AND (A+C>B) AND (B+C>A) Then WriteLn('Треугольник построить можно')

Else WriteLn('Треугольник построить нельзя');

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Заданы два числа X, Y. Меньшее из двух значений заменить на 0. Если же они равны – заменить нулями оба.

2. Поменять местами значения целых переменных A, B, C таким образом, чтобы оказалось ABC.

3. Заданы три числа X, Y, Z. Найти min(XYZ, X+Y+Z).

2.2 Условный оператор CASE

Задача 1. Составить программу, которая по введенному значению 1, 2, 3, 4 вычисляет площадь треугольника:

1. По основанию и высоте

2. По трем сторонам

3. По двум сторонам и углу между ними

4. Выход

USES Crt; LABEL M1,M2; VAR X:INTEGER; A,H,S,B,L,C,P:REAL; BEGIN M1:ClrScr; WriteLn('Вычисление площади треугольника'); WriteLn; WriteLn('1.По основанию и высоте'); WriteLn('2.По трем сторонам'); WriteLn('3.По двум сторонам и углу между ними');

WriteLn('4.Выход');

WriteLn;

WriteLn('Введите номер пункта'); ReadLn(X);

CASE X OF

1: Begin

ClrScr;

Write('Введите основание и высоту треугольника '); ReadLn(A,H);

S:=A*H/2;

WriteLn('Площадь треугольника = ',S:5:2); ReadLn;

GOTO M1;

End;

2: Begin

ClrScr;

Write('Введите значения сторон треугольника ');

ReadLn(A,B,C);

P:=(A+B+C)/2;

S:=Sqrt(P*(P-A)*(P-B)*(P-C));

WriteLn('Площадь треугольника = ',S:5:2); ReadLn;

GOTO M1

End;

3: Begin

ClrScr;

Write('Введите значения двух сторон и угол между ними ');

ReadLn(A,B,L);

S:=A*B*Sin(L*Pi/180)/2;

WriteLn('Площадь треугольника = ',S:5:2); ReadLn;

GoTo M1;

End;

4: Begin

ClrScr;

WriteLn('Программа закончила свою работу'); ReadLn;

GoTo M2;

End;

ELSE

ClrScr;

WriteLn('Номер пункта ввели неверно'); ReadLn;

GoTo M1;

End;

M2:END.

Задача 2. Составить программу, которая по введенному значению выводит оценки по математике, физике, информатике.

USES Crt; LABEL R1,R2; VAR X: INTEGER; M:CHAR; BEGIN

R1:ClrScr; WriteLn('ПРГ выводит оценки по математике, физике и химии');

WriteLn('1.Вывод оценок по предметам');

WriteLn('2.Выход');

WriteLn('Введите номер пункта');

ReadLn (X);

CASE X OF

1: Begin

ClrScr; WriteLn(' По какому предмету Вы хотите увидеть оценки'); WriteLn(' М - математика');

WriteLn(' Ф - физика');

WriteLn(' Х - химия');

ReadLn(M);

CASE M OF

'М','м':WriteLn('5 5 4 4 5 5 3 5 5 ');

'Ф','ф':WriteLn('5 4 5 3 5 4 5 5 5 ');

'Х','х':WriteLn('4 3 5 3 4 4 4 5 ');

End;

End;

2: Begin

WriteLn('Программа закончена');

GoTo R2;

End;

Else

WriteLn('Номер неверен'); ReadLn;

GoTo R1;

End;

R2:End.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Составить программу, которая по введенному значению 1, 2, 3 вычисляет:

1. Площадь параллелограмма

2. Периметр параллелограмма

3. Выход

2. Составить программу «Календарь XX столетия», которая определяет день недели любого дня XX-го столетия. По введенному значению 1, 2, 3 вычисляет

1. номер дня недели по формуле, где D- день, М-месяц, G-год:

• S=[(12-M)/10]

• K=[(G-1900-S)*365,25]+[(M+12*S-2)*30,59]+D+29

• N=K-7[K/7] (N-вычисляется от 0-воскресенье до 6-суббота, []-целая часть)

2. день недели по его номеру

3. выход

3. Циклические алгоритмы

3.1 Оператор цикла FOR

Задача 1. Найти произведение положительных, сумму и количество отрицательных из 10 введенных целых значений.

USES Crt;

VAR

X: INTEGER; S, K, P: INTEGER; I: BYTE;

Begin

P:=1; S:=0; K:=0;

FOR I:=1 TO 10 DO Begin

WriteLn(‘Введите ‘,I,’ -е значение’); ReadLn(x);

IF X>0 Then P:=P*X; { произведение положительных }

IF X<0 Then Begin

S:=S+X; { сумма отрицательных }

K:=K+1; { количество отрицательных }

End;

End;

WriteLn(‘ Произведение положительных значений = ‘,p);

WriteLn(‘ Сумма отрицательных значений = ‘,s);

WriteLn(‘ Количество отрицательных значений = ‘,k);

END.

Задача 2. Из N целых чисел найти минимальное значение.

USES Crt;

VAR MI, X: INTEGER; I,N: BYTE;

BEGIN

WriteLn('Введите количество значений'); ReadLn(n);

WriteLn('Введите первое значение'); ReadLn(mi);

FOR I:=2 TO N DO Begin

WriteLn(‘Введите ‘,I,’ -е значение’); ReadLn(x);

IF X

End;

WriteLn(‘Минимальное значение = ‘,MI);

END.

Задача 3. Из N целых чисел найти минимальное среди положительных и максимальное среди отрицательных значений.

USES Crt;

VAR

MI, MA, N, I, X: INTEGER; FL, FL1: BYTE;

BEGIN

WriteLn('Введите количество значений'); ReadLn(N);

FL:=0; FL1:=0;

FOR I:=1 TO N DO Begin

WriteLn('Введите ',I,' значение'); ReadLn(X);

IF (FL=0) AND (X<0) Then Begin

MA:=X; FL:=1;

End;

IF (FL1=0) AND (X>0) Then Begin

MI:=X; FL1:=1;

End;

IF (X MA) Then MA:=X;

IF (X>0) AND (X

End;

IF FL=1 Then WriteLn('максимальное среди отрицательных = ',ma)

Else WriteLn('отрицательных нет');

IF FL1=1 Then WriteLn('минимальное среди положительных = ',mi)

Else WriteLn('положительных нет');

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Найти среднее арифметическое минимального и максимального элементов из 10 введенных.

2. Напечатать лучший результат заплыва среди 8 участников.

3. Из n введенных чисел найти максимальное значение среди положительных элементов.

4. В группе определить самого высокого мальчика и самую маленькую девочку.

5. В ЭВМ вводятся результаты соревнований по прыжкам в высоту. Число участников произвольно. Напечатать сообщение о победителе.

3.2 Оператор цикла WHILE

Задача 1. Дано целое число а и натуральное (целое неотрицательное) число n. Вычислить а в степени n. {Введем целую переменную k, которая меняется от 0 до n, причем поддерживается такое свойство: b = (a в степени k).}

USES Crt;

VAR

A, N, B, K : INTEGER;

BEGIN

ClrScr;

Write(‘ Введите два значения ‘); ReadLn(A,N);

K := 0; B := 1;

While K <> N DO Begin

K := K + 1; B := B * A;

End;

Write(‘ A в степени N = ’,B);

END.

Другое решение той же задачи:

USES Crt;

VAR

A, N, B, K : INTEGER;

BEGIN

ClrScr; { Чистка экрана }

Write(‘ Введите два значения ‘); ReadLn(A,N);

K := N; B := 1;

{A в степени N = B * (A в степени K)}

While K <> 0 DO Begin

K := K - 1; B := B * A;

End;

Write(‘ A в степени N = ’,B);

END.

Задача 2. Даны натуральные числа а, b. Вычислить произведение а*b, используя в программе лишь операции +, -, =, <>.

USES Crt;

VAR

A, B, C, K : INTEGER;

BEGIN

Write(‘ Введите два значения ‘); ReadLn(A,B);

K := 0; C := 0;

While K <> B DO Begin

K := K + 1; C := C + A;

End;

{C = A * K и K = B, следовательно, C = A * B}

Write(‘ A*B= ‘,C);

END.

Задача 3. Дано натуральное (целое неотрицательное) число A и целое положительное число D. Вычислить частное Q и остаток R при делении A на D, не используя операций DIV и MOD. (Согласно определению, А = Q * D + R, 0 <= R < D.)

USES Crt;

VAR

A, D, R, Q : INTEGER;

BEGIN

ClrScr;

Write(‘ Введите два значения ‘); ReadLn(a,d);

R := A; Q := 0;

While Not (R < D) DO Begin

R := R - D; {R >= 0}

Q := Q + 1;

End;

WriteLn(‘ Частное = ’,Q);

WriteLn(‘ Остаток = ’,R);

END.

Задача 4. Каждый год урожайность повышается на 5%. Через сколько лет урожай удвоится?

USES Crt;

VAR

YR, KL: BYTE; YRG: REAL;

Begin

ClrScr;

Write('Введите урожайность '); ReadLn(YR);

YRG:=YR;

While (YRG <2*YR) Do Begin

YRG:=YRG+0.05*YRG;

KL:=KL+1;

End;

WriteLn('Новый урожай ',YRG:5:0);

Write('Через ',KL,' лет урожай удвоится');

END.

Задача 5. Деду M лет, а внуку N лет. Через сколько лет дед станет вдвое старше внука. И сколько при этом лет будет деду и внуку.

USES Crt;

VAR

M,N: BYTE; Kl: BYTE;

BEGIN

ClrScr;

Write('Введите количество лет деда '); ReadLn(m);

Write('Введите количество лет внука '); ReadLn(n);

KL:=0;

While (M>2*N) DO Begin

M:=M+1; N:=N+1; KL:=KL+1;

End;

WriteLn(M,' лет деду');

WriteLn(N,' лет внуку');

WriteLn('Через ',KL,' лет дед вдвое станет старше внука');

END.

Задача 6. Поле засеяли цветами двух сортов на площади S1 и S2. Каждый год площадь цветов первого сорта увеличивается вдвое, а площадь второго сорта увеличивается втрое. Через сколько лет площадь первых сортов будет составлять меньше 10% от площади вторых сортов.

USES Crt;

VAR

S1,S2:WORD; KL:BYTE;

BEGIN

ClrScr;

Write('Введите площадь, которую засеяли цветами 1-го сорта '); ReadLn(S1);

Write('Введите площадь, которую засеяли цветами 2-го сорта '); ReadLn(S2);

KL:=1;

While (S1>0.1*S2) DO Begin

S1:=S1*2; S2:=S2*3; KL:=KL+1;

End;

WriteLn('Площадь, которую засеяли цветами 1-го сорта ',S1);

WriteLn('Площадь, которую засеяли цветами 2-го сорта ',S2);

WriteLn('Через ', kl,' лет');

END.

Задача 7. Составить программу перевода числа из 10 системы счисления в 2 систему счисления.

Для этой задачи представлено два решения.

a)

USES Crt;

VAR

DES, OST, I, DW:INTEGER;

BEGIN

ClrScr;

Write('Введите десятичное число '); ReadLn(DES);

I:=1;

While (DES>=2) DO Begin

OST:=DES mod 2;

DES:=DES div 2;

DW:=DW+OST*I;

I:=I*10;

End;

DW:=DW+DES*I;

Write('Двоичная запись числа ',DW);

END.

b)

USES Crt;

Const A=10;

VAR

DES, OST, I:INTEGER;

DW:Array[1..100] OF INTEGER;

BEGIN

ClrScr;

Write('Введите десятичное число '); ReadLn(des);

I:=1;

While (des>=2) DO Begin

OST:=DES mod 2;

DES:=DES div 2;

DW[I]:=OST;

I:=I+1;

End;

DW[I]:=DES;

FOR I:=I DownTo 1 DO

Write(DW[I]);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Составить программу, печатающую квадраты всех натуральных чисел от 0 до заданного натурального n.

2. Дано натуральное n, вычислить n! (0!=1, n! = n * (n-1)!).

3. Последовательность Фибоначчи определяется так: a(0)= 1, a(1) = 1, a(k) = a(k-1) + a(k-2) при k >= 2. Дано n, вычислить a(n).

4. К старушке на обед ходят кошки. Каждую неделю две кошки приводят свою подружку. В доме у старушки 100 мисок. Через какое время появятся лишние кошки, и сколько кошек при этом останется голодными.

5. Известна сумма номеров страниц, определить номер страницы.

6. Лягушка каждый последующий прыжок делает в два раза короче предыдущего. Достигнет ли она болота и за сколько прыжков. Длину первого прыжка задайте самостоятельно.

4. Обработка массивов

4.1 Одномерные массивы

4.1.1 Алгоритмы поиска и присвоения значений элементам массива

Задача 1. Составить программу обработки массива размерностью n, заполненного целыми числами, введенными с клавиатуры. Вывести индексы и значения положительных элементов массива.

USES Crt;

CONST N=10;

VAR

A:ARRAY[0..N] OF INTEGER;

I:BYTE;

BEGIN

ClrScr;

{ Заполнение массива }

FOR I:=1 TO N DO Begin

Write('Введите ',I,' элемент массива '); ReadLn(A[I]);

End;

{ Обработка элементов массива }

FOR I:=1 TO N DO

IF A[I]>0 THEN WriteLn('Положительный элемент = ',A[I],' его индекс = ',I);

END.

Задача 2.Составить программу обработки массива K, состоящего из 20 элементов. Заполнить массив случайными числами в диапазоне от -5 до 25. Все элементы массива К, значения которых находятся в интервале от -2 до 20 возвести в квадрат. Измененный массив вывести на экран.

USES Crt;

VAR

K:ARRAY[0..20] OF INTEGER;

I:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение массива случайными числами }

FOR I:=1 TO 20 DO Begin

K[I]:=Random(30)-5; Write(K[I]:3);

End; WriteLn;

FOR I:=1 TO 20 DO

IF (K[I] -2) THEN K[I]:=K[I]*K[I];

WriteLn('Измененный массив');

FOR I:=1 TO 20 DO

Write(K[I]:4);

END.

Задача 3. Составить программу вычисления и печати значений функции Y=sin(x-1)/2x. Значения аргументов задать в массиве X, состоящего из 6 элементов. Значения функции записать в массив Y.

USES Crt;

VAR

X,Y:ARRAY[0..6] OF REAL;

I: BYTE;

BEGIN

ClrScr;

FOR I:=1 TO 6 DO Begin

Write('Введите ',I,' значение аргумента '); ReadLn(X[I]);

End;

FOR I:=1 TO 6 DO Begin

Y[I]:=SIN(X[I]-1)/(2*X[I]);

WriteLn(' X= ',X[I]:4:1,' Y=',Y[I]:5:2);

End;

END.

Задача 4. Дан массив M, состоящий из 30 элементов. Элементы массива - произвольные целые числа. Выдать на экран значение каждого пятого и положительного элемента. Указанные элементы выдать в строку.

USES Crt;

VAR

M:ARRAY[0..30] OF INTEGER;

I: BYTE;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO 30 DO Begin

M[I]:=Random(20)-4; Write(M[I]:3);

End; WriteLn;

I:=5;

WriteLn(' Значения каждого пятого и положительного элемента массива');

While I<=30 DO Begin

IF M[I] > 0 THEN Write(M[I]:3);

I:=I+5;

End;

END.

Задача 5.Из элементов массива Р сформировать массив М той же размерности по правилу: если номер четный, то М[I]=I*P[I],если нечетный, то M[I]=-P[I].

USES Crt;

CONST N=15;

VAR

P, M: ARRAY[0..N] OF INTEGER;

I: BYTE;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива ');

FOR I:=1 TO N DO Begin

P[I]:=Random(70); Write(P[I]:3);

End; WriteLn;

WriteLn(' Значения элементов сформированного массива M');

FOR I:=1 TO N DO Begin

IF I mod 2 =0 Then M[I]:=P[I]*I Else M[I]:=-P[I];

Write(M[I]:4);

End;

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Дан одномерный массив размерностью 10, заполненный целыми числами, введенными с клавиатуры, и величина N. Отрицательные элементы заменить на N. Измененный массив вывести на экран одной строкой.

2. Дан одномерный массив размерностью N, заполненный случайными числами в интервале от -15 до 20. Вывести на экран значения элементов массива, абсолютное значение которых >10.

3. Дан одномерный массив размерностью N, заполненный случайными числами. Каждый третий элемент массива возвести в квадрат, если элемент отрицательный. Измененный массив вывести на экран.

4. Составить программу вычисления и печати значений функции Y=(sinx+1)cos4x. Значения аргументов задать в массиве X, состоящего из 10 элементов. Значения функции записать в массив Y.

5. Заменить первые К элементов массива на противоположные по знаку.

6. Из элементов массива А, состоящего из 25 элементов, сформировать массив D той же размерности по правилу: первые 10 элементов находятся по формуле Di=Ai+i, остальные - по формуле Di=Ai-i.

4.1.2 Алгоритмы нахождения суммы, произведения и количества элементов массива. Работа с индексами элементов массива

Задача 1. Определить сумму элементов массива Р(n), значения которых > заданного Т

USES Crt;

CONST N=30;

VAR

P:ARRAY[0..N] OF INTEGER;

I,T:BYTE; S:INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение массива случайными числами }

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

P[I]:=Random(30); Write(P[I]:3);

End; WriteLn;

Write(' Введите значение переменной '); ReadLn(T);

S:=0;

FOR I:=1 TO N DO

IF P[I]>T THEN S:=S+P[I]; { сумма элементов массива > T }

WriteLn(' Сумма элементов массива > заданного значения = ',S);

END.

Задача 2. Дан массив целых чисел, состоящий из 25 элементов. Подсчитать сумму элементов массива, произведение положительных и количество нулевых элементов. Результат вычисления вывести на экран.

USES Crt;

VAR

A:ARRAY[0..25] OF INTEGER;

I: BYTE; S,K: INTEGER; P: REAL;

BEGIN

ClrScr; Randomize;

{ Заполнение массива случайными числами }

WriteLn(' Значения элементов массива');

FOR I:=1 TO 25 DO Begin

A[I]:=Random(10)-3; Write(A[I]:3);

End; WriteLn;

S:=0; K:=0; P:=1;

FOR I:=1 TO 25 DO Begin

S:=S+A[I]; { сумма элементов массива }

IF A[I]>0 THEN P:=P*A[I]; { произведение положительных элементов массива }

IF A[I]=0 THEN K:=K+1; { количество нулевых элементов массива }

End;

WriteLn(' Сумма элементов массива = ',S);

WriteLn(' Произведение положительных элементов массива = ',P:0:0);

WriteLn(' Количество нулевых элементов массива = ',K);

END.

Задача 3. Дан массив четных чисел, состоящий из 15 элементов. Заполнить его с клавиатуры. Найти:

• сумму элементов, имеющих нечетные индексы;

• подсчитать количество элементов массива, значения которых больше заданного числа T и кратны 5;

• номер первого отрицательного элемента, делящегося на 5 с остатком 2.

USES Crt;

CONST T=11;

VAR

A:ARRAY[0..15] OF INTEGER;

I,NP,FL: BYTE; S,K: INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение массива с клавиатуры }

FOR I:=1 TO 15 DO Begin

Write('Введите ',I,' злемент массива '); ReadLn(A[I]);

End; WriteLn;

S:=0; K:=0; FL:=0;

FOR I:=1 TO 15 DO Begin

IF I mod 2 =0 THEN S:=S+A[I]; { сумма элементов, имеющих четные индексы }

IF (A[I]>T) AND (A[I] mod 5 =0) THEN K:=K+1; { количество }

IF (A[I]<0) AND (A[I] mod 5 =-2) AND (FL=0) THEN Begin NP:=I; FL:=1; End;

End;

WriteLn(' Сумма элементов,имеющих четные индексы = ',S);

WriteLn(' Количество элементов, значения которых > ',T,' и кратны 5 = ',K);

WriteLn(' Номер первого отрицательного элемента, делящегося на 5 с остатком 2 = ',NP);

END.

Задача 4. Дан массив четных чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти:

• сумму положительных элементов, значения которых меньше 10;

• вывести индексы тех элементов, значения которых кратны 5 и 3;

• количество пар соседних элементов с суммой равной заданному числу.

USES Crt;

CONST T=21;

VAR

A:ARRAY[0..10] OF INTEGER;

I: BYTE; S,K: INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение массива с клавиатуры }

FOR I:=1 TO 10 DO Begin

Write('Введите ',I,' злемент массива '); ReadLn(A[I]);

End; WriteLn;

S:=0; K:=0;

WriteLn(' Индексы элементов, значения которых кратны 3 и 5');

FOR I:=1 TO 10 DO Begin

IF (A[I]>0) AND (A[I]<10) THEN S:=S+A[I];

IF (A[I] mod 3 =0) AND (A[I] mod 5 =0) THEN Write(I:3) ;

IF I<>10 THEN IF A[I]+A[I+1]=T THEN K:=K+1;

End; WriteLn;

WriteLn(' Сумма положительных элементов, значения которых < 10 = ',S);

WriteLn(' Количество пар соседних элементов с суммой равной ',T,' = ',K);

END.

Задача 5. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти:

• удвоенную сумму положительных элементов;

• вывести индексы тех элементов, значения которых больше значения предыдущего элемента (начиная со второго);

• количество пар соседних элементов с одинаковыми знаками.

USES Crt;

VAR

A:ARRAY[0..10] OF INTEGER;

I: BYTE; S,K: INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение массива с клавиатуры }

FOR I:=1 TO 10 DO Begin

Write('Введите ',I,' злемент массива '); ReadLn(A[I]);

End; WriteLn;

S:=0; K:=0;

WriteLn(' Индексы элементов, значения которых > значения предыдущего элемента');

FOR I:=1 TO 10 DO Begin

IF (A[I]>0) THEN S:=S+A[I];

IF I<>1 THEN IF A[I] > A[I-1] THEN Write(I:3);

IF I<>10 THEN IF (A[I] * A[I+1])>0 THEN K:=K+1;

End; WriteLn;

WriteLn(' Удвоенная сумма положительных элементов = ',S*2);

WriteLn(' Количество пар соседних элементов с одинаковыми знаками = ',K);

END.

Задача 6. Дан массив C, состоящий из N элементов. Элементы массива - произвольные целые числа. Вывести на экран элементы массива в обратном порядке.

USES Crt;

CONST N=20;

VAR

C:ARRAY[0..N] OF INTEGER;

I: BYTE;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

C[I]:=Random(20); Write(C[I]:3);

End; WriteLn;

WriteLn(' Значения элементов массива в обратном порядке');

FOR I:=N DOWNTO 1 DO

Write(C[I]:3);

END.

Задача 7. Дан массив A, состоящий из N элементов. Элементы массива - произвольные целые числа. Распечатать элементы в две строки: в первой строке элементы с нечетными индексами, а во второй - элементы с четными индексами.

USES Crt;

CONST N=25;

VAR

A:ARRAY[0..N] OF INTEGER;

I: BYTE;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

A[I]:=Random(20); Write(A[I]:3);

end; WriteLn;

I:=1;

WriteLn(' Элементы с нечетными индексами');

WHILE I<=N DO Begin

Write(A[I]:3); I:=I+2;

End; WriteLn;

I:=2;

WriteLn(' Элементы с четными индексами');

WHILE I<=N DO Begin

Write(A[I]:3); I:=I+2;

End;

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти:

• сумму отрицательных элементов;

• количество тех элементов, значения которых положительны и не превосходят заданного числа А;

• номер последней пары соседних элементов с разными знаками.

2. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти:

• сумму элементов, имеющих нечетное значение;

• вывести индексы тех элементов, значения которых больше заданного числа А;

• количество положительных элементов, кратных К. ( К вводится с клавиатуры ).

3. Дан массив целых чисел, состоящий из N элементов. Определить среднее арифметическое положительных элементов.

4. Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.

5. Оценки, полученные учащимися за урок, занесены в массив. Подсчитать количество «5» и «2», полученных учащимися за урок и средний балл.

6. В очереди за билетами стоят мужчины и женщины. Какое количество мужчин стоит в начале очереди до первой женщины.

4.1.3 Алгоритмы нахождения наибольшего или наименьшего элемента массива и его индекса

Задача 1. Дан массив K, состоящий из 45 элементов. Элементы массива - произвольные целые числа. Определить минимальный элемент массива и его индекс.

USES Crt;

VAR

K:ARRAY[0..45] OF INTEGER;

I,IND: BYTE; MIN:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO 45 DO Begin

K[I]:=Random(35)+6; Write(K[I]:3);

End; WriteLn;

MIN:=K[1]; IND:=1;

{ нахождение минимального значения и его индекса }

FOR I:=2 TO 45 DO

IF K[I]

WriteLn(' Минимальное значение = ',MIN);

WriteLn(' Индекс минимального значения = ',IND);

END.

Задача 2. Дан массив B, состоящий из N элементов. Элементы массива - произвольные целые числа. Определить сумму элементов, расположенных до максимального элемента массива.

USES Crt;

CONST N=20;

VAR

B:ARRAY[0..N] OF INTEGER;

I,IND: BYTE; MAX,S:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

B[I]:=Random(35); Write(B[I]:3);

End; WriteLn;

MAX:=B[1]; IND:=1;

{ нахождение максимального значения и его индекса }

FOR I:=2 TO N DO

IF B[I]>MAX THEN Begin MAX:=B[I]; IND:=I; End;

WriteLn(' Максимальное значение = ',MAX);

{ нахождение суммы элементов, расположенных до максимального элемента }

S:=0;

FOR I:=1 TO IND-1 DO

S:=S+B[I];

WriteLn(' Cумма элементов, расположенных до максимального элемента =',S);

END.

Задача 3. Дан массив A, состоящий из N элементов. Элементы массива - произвольные целые числа. Заменить нулями все элементы массива, расположенные за минимальным элементом массива. Измененный массив вывести на экран.

USES Crt;

CONST N=15;

VAR

A:ARRAY[0..N] OF INTEGER;

I,IND: BYTE; MIN:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

A[I]:=Random(400); Write(A[I]:4);

End; WriteLn;

MIN:=A[1]; IND:=1;

{ нахождение минимального значения и его индекса }

FOR I:=2 TO N DO

IF A[I]

WriteLn(' Минимальное значение = ',MIN);

{ замена нулями элементов, расположенных за минимальным значением }

FOR I:=IND+1 TO N DO

A[I]:=0;

WriteLn(' Измененный массив');

FOR I:=1 TO N DO

Write(A[I]:4);

END.

Задача 4. Дан массив A, состоящий из N элементов. Элементы массива - произвольные целые числа. Заменить нулями все элементы массива, расположенные между минимальным и максимальным элементами массива, кроме их самих. Измененный массив вывести на экран.

USES Crt;

CONST N=15;

VAR

A:ARRAY[0..N] OF INTEGER;

I, IMIN, IMAX, k1, k2: BYTE; MIN, MAX:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

A[I]:=Random(270); Write(A[I]:4);

end; WriteLn;

MIN:=A[1]; MAX:=A[1]; IMIN:=1; IMAX:=1;

{ нахождение минимального и максимального значения и их индексов }

FOR I:=2 TO N DO Begin

IF A[I]

IF A[I]>MAX THEN Begin MAX:=A[I]; IMAX:=I; End;

End;

WriteLn(' Минимальное значение = ',MIN);

WriteLn(' Максимальное значение = ',MAX);

{ замена нулями элементов, расположенных между минимальным и максимальным

значением }

IF IMIN

ELSE Begin K1:=IMAX+1; K2:=IMIN-1; End;

FOR I:=K1 TO K2 DO

A[I]:=0;

WriteLn(' Измененный массив');

FOR I:=1 TO N DO

Write(A[I]:4);

END.

Задача 5. Дан массив чисел. Найти наибольший элемент, поставить его первым.

USES Crt;

CONST M=100;

VAR

MAS: ARRAY[1..100] OF INTEGER;

I,K,N,NEW: INTEGER;

BEGIN

ClrScr;

Write(' Введите размер массива N= '); ReadLn(N);

{ Заполнение массива с клавиатуры }

FOR I:=1 TO N DO Begin

Write(' Введите ',I,' элемент массива '); ReadLn(MAS[I]);

End;

NEW:=MAS[N]; K:=N;

{ Нахождение наибольшего элемента и его индекса }

FOR I:=N DOWNTO 1 DO

IF MAS[I]>NEW THEN Begin NEW:=MAS[I]; K:=I; End;

{ Перестановка местами первого и наибольшего элементов }

MAS[K]:=MAS[1]; MAS[1]:=NEW;

WriteLn(' Измененный массив');

FOR I:=1 TO N DO

Write(MAS[I]:4);

END.

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

USES Crt;

VAR

MAS: ARRAY[1..12] OF REAL;

I: INTEGER; MIN,MAX:REAL;

BEGIN

ClrScr;

{ Заполнение массива с клавиатуры }

FOR I:=1 TO 12 DO Begin

Write(' Введите среднюю температуру за ',I,' месяц '); ReadLn(MAS[I]);

End;

MAX:=MAS[6]; MIN:=MAS[12];

{ Определение самой высокой температуры летом }

FOR I:=7 TO 8 DO

IF MAX

{ Определение самой низкой температуры зимой }

FOR I:=1 TO 2 DO

IF MIN>MAS[I] THEN MIN:=MAS[I];

WriteLn(' Самая высокая температура летом ',MAX);

WriteLn(' Самая низкая температура зимой ',MIN);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Дан массив чисел. Найти значение максимального элемента. Если таких элементов несколько, то определить, сколько их.

2. Дан массив чисел. Найти среднее арифметическое максимального и минимального элемента. Вывести значения и индексы этих элементов.

3. Дан массив чисел. Определить количество элементов, находящихся в интервале от1 до 12 и расположенных до максимального элемента массива.

4.1.4 Алгоритмы удаления, вставки и перестановки элементов

Задача 1. Дан массив A, состоящий из 12 элементов. Элементы массива - произвольные целые числа. Поменять местами значения 1 и 2 элементов, 3 и 4 и т.д. Измененный массив вывести на экран.

USES Crt;

VAR

A:ARRAY[0..12] OF INTEGER;

I: BYTE; PP:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO 12 DO Begin

A[I]:=Random(20); Write(A[I]:3);

End; WriteLn;

I:=1;

WHILE I<=12 DO Begin

{перестановка элементов местами, используя промежуточную переменную PP }

PP:=A[I]; A[I]:=A[I+1]; A[I+1]:=PP;

I:=I+2;

End;

WriteLn(' Значения элементов измененного массива');

FOR I:=1 TO 12 DO

Write(A[I]:3);

END.

Задача 2. Дан массив целых чисел из 15 элементов, заполненный случайным образом числами из промежутка [-20,50].

1. Удалить из него все элементы, в записи которых есть цифра 5.

2. Вставить число K после всех элементов, кратных своему номеру (К вводится с клавиатуры).

3. Поменять местами первый положительный и последний отрицательный элементы.}

USES Crt;

VAR

P,P1:ARRAY[0..15] OF INTEGER; P2:ARRAY[0..30] OF INTEGER;

I,J,E,D,PP,PO,FL: BYTE; K,PRP:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива P');

FOR I:=1 TO 15 DO Begin

P[I]:=Random(70)-20; Write(P[I]:4);

End; WriteLn;

J:=1;

{ 1. Удаление }

FOR I:=1 TO 15 DO Begin

E:=ABS(P[I]) mod 10; {Выделение единиц}

D:=ABS(P[I]) div 10; {Выделение десятков}

{ формирование нового массива }

IF (E<>5) AND (D<>5) THEN Begin P1[J]:=P[I]; J:=J+1; End;

End;

WriteLn(' Массив, в котором нет элементов с цифрой 5');

FOR I:=1 TO J-1 DO

Write(P1[I]:4);

WriteLn;

{ 2. Вставка }

Write(' Введите значение переменной '); ReadLn(K);

J:=1;

FOR I:=1 TO 15 DO Begin

P2[J]:=P[I]; J:=J+1;

IF ABS(P[I]) mod I = 0 THEN Begin P2[J]:=K; J:=J+1; End;

End;

WriteLn(' Массив, в котором после элементов, кратных своему номеру, вставлено число =',K);

For I:=1 TO J-1 DO

Write(P2[I]:4);

WriteLn;

{ 3. Перестановка }

{ Нахождение первого положительного и последнего отрицательного элемента }

FL:=0;

FOR I:=1 TO 15 DO Begin

IF (P[I]>0) AND (FL=0) THEN Begin PP:=I; FL:=1; End;

IF P[I]<0 THEN PO:=I;

End;

{ перестановка местами первого положительного и последнего отрицательного'}

PRP:=P[PP]; P[PP]:=P[PO]; P[PO]:=PRP;

WriteLn(' Массив, в котором первый положительный и последний отрицательный');

WriteLn(' поменяли местами');

FOR I:=1 TO 15 DO

Write(P[I]:4);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

Дан массив целых чисел из 10 элементов, заполненный случайным образом из промежутка [-40, 30].

1. Удалить из него все элементы, которые состоят из одинаковых цифр ( включая однозначные числа).

2. Вставить число К перед всеми элементами, в которых есть цифра 1 (К вводится с клавиатуры)

3. Переставить первые три и последние три элемента местами, сохраняя порядок их следования.

4.1.5 Алгоритмы сортировки числового массива

Задача 1. Отсортировать числовой массив. Первый способ.

USES Crt;

CONST N=30;

VAR

A:ARRAY[0..N] OF INTEGER;

I,J: BYTE; PP:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива ');

FOR I:=1 TO N DO Begin

A[I]:=Random(50); Write(A[I]:4);

End; WriteLn;

{ Сортировка массива }

FOR I:=2 TO N DO

FOR J:=N DOWNTO I DO

IF A[J-1]>A[J] THEN Begin PP:=A[J]; A[J]:=A[J-1]; A[J-1]:=PP; End;

WriteLn(' Отсортированный массив ');

FOR I:=1 TO N DO

Write(A[I]:4);

END.

Задача 2. Отсортировать числовой массив. Второй способ.

USES Crt;

CONST N=30;

VAR

A:ARRAY[0..N] OF INTEGER;

I,J: BYTE; PP:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива ');

FOR I:=1 TO N DO Begin

A[I]:=Random(50); Write(A[I]:4);

End; WriteLn;

{ Сортировка массива }

FOR I:=1 TO N-1 DO

FOR J:=I+1 TO N DO

IF A[I]>A[J] THEN Begin PP:=A[I]; A[I]:=A[J]; A[J]:=PP; End;

WriteLn(' Отсортированный массив ');

FOR I:=1 TO N DO

Write(A[I]:4);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

Даны два упорядоченных массива целых чисел М1 и М2. Слить их в упорядоченный массив. Рассмотреть случаи, когда массивы М1 и М2 упорядочены одинаково и когда по-разному.

4.2 Двумерные массивы

4.2.1 Алгоритмы действий над элементами двумерного массива

Задача 1. В течение недели измерялась температура три раза в день: утром, в обед и вечером. Показания записали в таблицу размерностью 7х3. Определить среднюю температуру за каждый день.

USES Crt;

VAR

T:ARRAY[0..7,0..3] OF INTEGER;

I,J:BYTE; S:INTEGER; ST:REAL; A:STRING[12];

BEGIN

ClrScr; WriteLn;

{ Заполнение таблицы }

FOR I:=1 TO 7 DO Begin

WriteLn(' Введите показания за ',I,' день');

FOR J:=1 TO 3 DO Begin

CASE J OF

1: A:=' Утром - ';

2: A:=' В обед - ';

3: A:=' Вечером - ';

End;

Write(A); ReadLn(T[I,J]);

End;

End; WriteLn;

{ Подсчет средней температуры за каждый день }

FOR I:=1 TO 7 DO Begin

S:=0;

FOR J:=1 TO 3 DO

S:=S+T[I,J];

ST:=S/3;

WriteLn('Средняя температура за ',I,' день = ',ST:4:1);

End;

END.

Задача 2. Группа из 10 учащихся сдавала экзамен по 4 предметам. Результаты экзаменов записали в таблицу размерностью 10х4. Определить средний балл по каждому предмету.

USES Crt;

VAR

E:ARRAY[0..10,0..4] OF INTEGER;

I,J:BYTE; S:INTEGER; SB:REAL; A:STRING[16];

BEGIN

ClrScr; WriteLn;

{ Заполнение таблицы }

FOR I:=1 TO 10 DO Begin

WriteLn(' Введите оценки ',I,' учащегося');

FOR J:=1 TO 4 DO Begin

CASE J OF

1: A:=' Математика - ';

2: A:=' Физика - ';

3: A:=' Химия - ';

4: A:=' Информатика - ';

End;

Write(A); ReadLn(E[I,J]);

End;

End; WriteLn;

{ Подсчет среднего балла по каждому предмету. Циклы меняются местами.' }

FOR J:=1 TO 4 DO Begin

S:=0;

FOR I:=1 TO 10 DO

S:=S+E[I,J];

SB:=S/10;

CASE J OF

1: A:=' математике - ';

2: A:=' физике - ';

3: A:=' химии - ';

4: A:=' информатике - ';

End;

WriteLn(' Средний балл по ',A,' = ',SB:4:1);

End;

END.

Задача 3. Поменять местами значения К-ого и Р-ого столбцов матрицы В, размерностью MхM, заполненную случайным образом.

USES Crt;

LABEL M1;

CONST M=8;

VAR

A:ARRAY[0..M,0..M] OF INTEGER;

I,J,K,P:BYTE; PP:INTEGER;

BEGIN

ClrScr;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения двумерного массива');

FOR I:=1 TO M DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(23); Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

WriteLn(' Введите номера столбцов, которые необходимо поменять');

WriteLn(' Их значения не должны превышать ',M);

M1:ReadLn(K,P);

IF (K>M) OR (P>M) THEN GOTO M1;

{ Перестановка значений введенных столбцов }

FOR I:=1 TO M DO Begin

PP:=A[I,K]; A[I,K]:=A[I,P]; A[I,P]:=PP;

End;

WriteLn(' Измененный двумерный массив');

FOR I:=1 TO M DO Begin

FOR J:=1 TO M DO Begin

Write(A[I,J]:3);

End; WriteLn;

End;

END.

Задача 4. Дан двумерный массив размерностью 6х3, заполненный целыми числами. Подсчитать количество строк, в которых первый элемент строки меньше нуля.

USES Crt;

VAR

M:ARRAY[0..6,0..3] OF INTEGER;

I,J,K:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения двумерного массива');

FOR I:=1 TO 6 DO Begin

FOR J:=1 TO 3 DO Begin

M[I,J]:=Random(23)-10; Write(M[I,J]:3);

End; WriteLn;

End; WriteLn; K:=0;

{ Подсчет количества строк, в которых первый элемент строки меньше 0 }

FOR I:=1 TO 6 DO

IF M[I,1]<0 THEN Inc(K);

Write(' Количество строк, в которых первый элемент строки меньше 0 = ',K);

END.

Задача 5. Дан двумерный массив размерностью Nх2N, заполненный целыми числами. Найти среднее арифметическое элементов, имеющие четные номера строк.

USES Crt;

CONST N=5;

VAR

H:ARRAY[0..N,0..2*N] OF INTEGER;

I,J,K:BYTE; S:LongInt; SA:REAL;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива'); WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO 2*N DO Begin

H[I,J]:=Random(23); Write(H[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Нахождение суммы значений элементов, имеющих четные номера строк }

I:=2; K:=0;

WHILE I<=N DO Begin

FOR J:=1 TO 2*N DO Begin

S:=S+H[I,J]; Inc(K);

End; I:=I+2;

End;

SA:=S/K;

Write(' Среднее арифметическое элементов, имеющих четные номера строк =',SA:4:1);

END.

Задача 6. Дан двумерный массив размерностью NхM, заполненный случайным образом. Определить, есть ли в данном массиве столбец, в котором равное количество положительных и отрицательных элементов.

USES Crt;

CONST N=6; M=8;

VAR

A:ARRAY[0..N,0..M] OF INTEGER;

I,J,KO,KP,FL:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO N DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(20)-10; Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

FOR J:=1 TO M DO Begin

KP:=0; KO:=0;

FOR I:=1 TO N DO Begin

IF A[I,J]>0 THEN Inc(KP);

IF A[I,J]<0 THEN Inc(KO);

End;

IF KP=KO THEN Begin

WriteLn(' В ',J,' столбце равное количество положительных и отрицательных элементов'); FL:=1;

End;

End;

IF FL=0 THEN WriteLn(' Нет столбцов, в которых равное количество положительных и отрицательных элементов');

END.

Задача 7. Дан двумерный массив размерностью NхM, заполненный случайным образом. Определить, есть ли в данном массиве строка, в которой ровно два отрицательных элемента.

USES Crt;

CONST N=6; M=8;

VAR

A:ARRAY[0..N,0..M] OF INTEGER;

I,J,K,FL:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO N DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(40)-15; Write(A[I,J]:3);

End; WriteLn;

End; WriteLn; FL:=0;

{ Определение строк, в которых ровно два отрицательных элемента }

FOR I:=1 TO N DO Begin

K:=0;

FOR J:=1 TO M DO

IF A[I,J]<0 THEN Inc(K);

IF K=2 THEN Begin WriteLn('В ',I,' строке ровно два отрицательных элемента');FL:=1; End;

End;

IF FL=0 THEN Writeln(' Нет строк, в которых ровно два отрицательных элемента');

END.

Задача 8. Дан двумерный массив размерностью 4х6 и величина N. Подсчитать количество строк, в которых есть элемент равный N.

USES Crt;

LABEL M1;

VAR

M:ARRAY[0..4,0..6] OF INTEGER;

I,J,K:BYTE; N:INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 4 DO Begin

FOR J:=1 TO 6 DO Begin

M[I,J]:=Random(50); Write(M[I,J]:3);

End; WriteLn;

End; WriteLn;

Write(' Введите значение величины N '); ReadLn(N);

K:=0;

{ Нахождение строк, в которых имеется величина N }

FOR I:=1 TO 4 DO Begin

FOR J:=1 TO 6 DO

IF M[I,J]=N THEN Begin K:=K+1; GOTO M1; End;

M1: End;

WriteLn(' Количество строк, в которых есть элемент равный ',N,' = ',K);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Найти произведение элементов К-го и Р-го столбцов квадратной матрицы, размерностью 6х6.

2. Дан двумерный массив размерностью 5х3, заполненный целыми числами. Найти произведение элементов нечетных строк матрицы.

3. Дан двумерный массив размерностью 5х6, заполненный целыми числами и величина К. Найти количество элементов, равных К и их сумму.

4. Дан двумерный массив размерностью NхM, заполненный целыми числами. Определить, есть ли в данном массиве столбец, в котором имеются одинаковые элементы.

4.2.2 Алгоритмы формирования одномерного массива

Задача 1. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого соответственно равен сумме элементов строк. Оба массива вывести на экран.

USES Crt;

VAR

H:ARRAY[0..5,0..6] OF INTEGER; K:ARRAY[0..5] OF INTEGER;

I,J:BYTE; S:INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения двумерного массива');

FOR I:=1 TO 5 DO Begin

FOR J:=1 TO 6 DO Begin

H[I,J]:=Random(23); Write(H[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Нахождение суммы элементов строк и заполнение одномерного массива }

WriteLn(' Значения одномерного массива');

FOR I:=1 TO 5 DO Begin

S:=0;

FOR J:=1 TO 6 DO

S:=S+H[I,J];

K[I]:=S; Write(K[I]:4);

End;

END.

Задача 2. Дана квадратная матрица порядка n, заполненная целыми числами. Получить одномерный массив, элементами которого являются первый положительный элемент соответствующей строки матрицы.

USES Crt;

LABEL M1;

CONST N=5;

VAR

H:ARRAY[0..N,0..N] OF INTEGER; B:ARRAY[0..N] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO N DO Begin

H[I,J]:=Random(25)-10; Write(H[I,J]:3);

End; WriteLn;

End; WriteLn;

WriteLn(' Значения первых положительных элементов соответствующих строк');

WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO N DO

IF H[I,J]>0 THEN Begin B[I]:=H[I,J]; GOTO M1; End;

M1: Write(B[I]:3);

End;

END.

Задача 3. Дан двумерный массив размерностью NхM, заполненная целыми числами. Получить одномерный массив, элементами которого являются сумма первого и последнего элементов соответствующих строк двумерного массива.

USES Crt;

CONST N=5; M=7;

VAR

A:ARRAY[0..N,0..M] OF INTEGER; B:ARRAY[0..N] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(30); Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

WriteLn(' Cумма первого и последнего элементов соответствующих строк');

WriteLn;

FOR I:=1 TO N DO Begin

B[I]:=A[I,1]+A[I,M]; Write(B[I]:3);

End;

END.

Задача 4. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив каждый элемент которого равен произведению четных положительных элементов соответствующего столбца.

USES Crt;

VAR

M:ARRAY[0..5,0..6] OF INTEGER; F:ARRAY[0..6] OF INTEGER;

I,J:BYTE; P:LongInt;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 5 DO Begin

FOR J:=1 TO 6 DO Begin

M[I,J]:=Random(20)-5; Write(M[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Формирование одномерного массива}

WriteLn(' Значения элементов одномерного массива');

FOR J:=1 TO 6 DO Begin

P:=1;

FOR I:=1 TO 5 DO

IF (M[I,J]>0) AND (M[I,J] mod 2 =0) THEN P:=P*M[I,J];

IF P=1 THEN F[J]:=0 ELSE F[J]:=P;

Write(F[J]:4);

End;

END.

Задача 5. Дан двумерный массив размерностью 4х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен количеству элементов соответствующей строки, больших данного числа N.

USES Crt;

VAR

A:ARRAY[0..4,0..6] OF INTEGER; G:ARRAY[0..6] OF INTEGER;

I,J,K:BYTE; N:INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 4 DO Begin

FOR J:=1 TO 6 DO Begin

A[I,J]:=Random(45); Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

Write(' Введите значение числа '); ReadLn(N);

{ Формирование одномерного массива}

WriteLn(' Значения элементов одномерного массива');

FOR I:=1 TO 4 DO Begin

K:=0;

FOR J:=1 TO 6 DO

IF A[I,J] > N THEN K:=K+1;

G[I]:=K; Write(G[I]:2);

End;

END.

Задача 6. Дан двумерный массив размерностью 4х5, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен количеству отрицательных элементов, кратных 3 или 5, соответствующей строки.

USES Crt;

VAR

A:ARRAY[0..4,0..5] OF INTEGER; G:ARRAY[0..6] OF INTEGER;

I,J,K:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 4 DO Begin

FOR J:=1 TO 5 DO Begin

A[I,J]:=Random(45)-20; Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Формирование одномерного массива}

WriteLn(' Значения элементов одномерного массива');

FOR I:=1 TO 4 DO Begin

K:=0;

FOR J:=1 TO 5 DO

IF (A[I,J] < 0) AND ((A[I,J] mod 3=0) OR (A[I,J] mod 5 =0)) THEN K:=K+1;

G[I]:=K; Write(G[I]:2);

End;

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Дан двумерный массив размерностью 6х5, заполненный целыми числами, введенными с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен первому четному элементу соответствующего столбца, если такого нет, то равен нулю.

2. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен произведению четных положительных элементов соответствующего столбца.

3. Дана квадратная матрица размерностью NхN, заполненная целыми числами и величина А. Сформировать одномерный массив, каждый элемент которого равен элементу, расположенному на главной диагонали , умноженному на величину А .

4. Дан двумерный массив размерностью 6х8, заполненный целыми числами, введенными с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен количеству элементов соответствующих строк матрицы, значения которых находятся в интервале( -2, 10).

4.2.3 Алгоритмы нахождения наибольшего и наименьшего элементов двумерного массива

Задача 1. В соревнованиях по плаванию принимали участие 5 спортсменов. Соревнования состояли из 3 заплывов. Результаты заплывов записали в таблицу размерностью 3х5. Получить одномерный массив размером 3, элементами которого будут лучшие результаты в каждом из заплывов.

USES Crt;

VAR

RZ:ARRAY[0..3,0..5] OF INTEGER; LR:ARRAY[0..3] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; WriteLn;

{ Заполнение таблицы }

FOR I:=1 TO 3 DO Begin

WriteLn(' Введите результаты ',I,' заплыва');

FOR J:=1 TO 5 DO Begin

Write(J,' участник - '); ReadLn(RZ[I,J]);

End;

End; WriteLn;

{ Определение лучшего результата в каждом из заплывов }

FOR I:=1 TO 3 DO Begin

LR[I]:=RZ[I,1];

FOR J:=2 TO 5 DO

IF RZ[I,J]

WriteLn(' Лучший результат ',I,' заплыва = ',LR[I]);

End;

END.

Задача 2. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца.

USES Crt;

VAR

M:ARRAY[0..5,0..6] OF INTEGER; MAX:ARRAY[0..6] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 5 DO Begin

FOR J:=1 TO 6 DO Begin

M[I,J]:=Random(20)-8; Write(M[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Формирование одномерного массива}

WriteLn(' Значения элементов одномерного массива');

FOR J:=1 TO 6 DO Begin

MAX[J]:=ABS(M[1,J]);

FOR I:=2 TO 5 DO

IF ABS(M[I,J]) > MAX[J] THEN MAX[J]:=ABS(M[I,J]);

Write(MAX[J]:3);

End;

END.

Задача 3. Дан двумерный массив размерностью NхM, заполненный случайным образом. Определить, есть ли в данном массиве строка, в которой имеется два элемента массива, имеющие наибольшее значение.

USES Crt;

CONST N=6; M=8;

VAR

A:ARRAY[0..N,0..M] OF INTEGER;

I,J,K,FL:BYTE; MAX:INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO N DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(20); Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Нахождение наибольшего значения }

MAX:=A[1,1];

FOR I:=1 TO N DO

FOR J:=1 TO M DO

IF A[I,J]>MAX THEN MAX:=A[I,J];

WriteLn(' Максимальное значение = ',MAX);

{ Нахождение строки, в которой два элемента имеют наибольшее значение }

FL:=0;

FOR I:=1 TO N DO Begin

K:=0;

FOR J:=1 TO M DO

IF A[I,J]=MAX THEN Inc(K);

IF K=2 THEN Begin WriteLn('В ',I,' строке два элемента имеют наибольшее значение');

FL:=1;

End;

End;

IF FL=0 THEN WriteLn(' Нет строк, в которых два элемента имеют наибольшее значение');

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Дан двумерный массив размерностью 5x7, заполненный случайным образом. Найти наименьший и наибольший элементы двумерного массива, поменять их местами.

2. Дан двумерный массив размерностью NxM, заполненный случайным образом. Получить одномерный массив, элементами которого являются сумма наименьшего и наибольшего элементов соответственной строки двумерного массива.

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;

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);

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. Обработка строк

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);

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. Обработка строк

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);

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.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;

WriteLn(‘Измененный текст:’); WriteLn(A);

END.

Задача 2. Третье предложение в тексте заключить в скобки.

USES Crt;

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);

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. Из текста удалить все слова, начинающиеся и оканчивающиеся на одну и ту же букву.

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: p7 gi'); 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;

SetLineStyle(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;

{Пользовательский шаблон заполнения}

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: p7 gi'); 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

ClearDevice;

SetBkColor(0); SetFillStyle(1,15);

Bar(0,0,GetMaxX div 2,GetMaxY);

SetFillStyle(1,0);

Bar(GetMaxX div 2,0,GetMaxX,GetMaxY);

OutTextXY(70,GetMaxY-25,'Нажмите DEL');

End;

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;

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; {процедура - лунная ночь со звездами}

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: p7BGI');

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: p7 gi'); IF GraphResult<>0 THEN HALT(1);

{ Построение осей координат }

X0:=GetMaxX div 2; Y0:=GetMaxY div 2;

Line(10,Y0,GetMaxX,Y0); Line(X0,10,X0,GetMaxY);

{ Построение стрелок }

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: p7 gi'); 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

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: p7 gi'); 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: p7BGI');

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;

VAR

Gd,Gm : INTEGER; Av : CHAR; X1, Y1, X, Y : INTEGER; U, H : REAL;

BEGIN

Gd:=Detect; InitGraph(Gd,Gm,'C: p7BGI');

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.

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);

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. Подсчитать, сколько раз встречается в тексте слово “кот”.

задачи циклы

1)Найти суммы квадратов всех целых чисел от 1 до 20

2)Одноклеточная амеба каждые 3 часа делится на 2 клетки. Определить, сколько клеток будет через 3, 6, 9,…, 24 часа, если первоначально была одна амеба.

3)Найти все делители натурального числа N

4)Найти максимальное из натуральных чисел, не превышающих 5000, которое нацело делится на 39.

5)Посчитать сумму положительных чисел вводимых с клавиатуры.

6)Составить таблицу квадратов натуральных чисел от 1 до 9.

7)Вывести десять раз свое имя и фамилию.

8)Посчитать сумму целых положительных чисел от 1 до n.

9)Посчитать сумму четных чисел от 1 до n.

10)Составить программу, которая насчитывает произведение Р четных чисел от 2 до N.

11)Написать программу, которая выводит таблицу значений функции y= -2,4x2+5x-3 в диапазоне от –2 до 2 с шагом 0,5.

12)Составить таблицу стоимости порций сыра весом 100,200, …, 1000 грамм, если цена за 1 кг. – 36 руб.

13)Найти сумму положительных чисел в промежутке от 1 до 100.

14)Найти сумму положительных чисел в промежутке от -10 до 25.

15)Найти сумму четных чисел в промежутке от 1 до 100.

16)Найти сумму нечетных чисел в промежутке от 1 до 100.

17)Найти произведение положительных чисел в промежутке от 1 до 100.

18)Найти произведение положительных чисел в промежутке от -10 до 25.

19)Найти произведение четных чисел в промежутке от 1 до 100.

20)Найти произведение нечетных чисел в промежутке от 1 до 100.

21)Найти сумму всех чисел, кратных трем в промежутке от 1 до 100.

22)Найти произведение всех чисел, кратных трем в промежутке от 1 до 100.

23)Найти количество положительных чисел в промежутке от 1 до 100, кратных четырем.

24)Найти количество положительных чисел в промежутке от 1 до 100, кратных пяти.

25)Найти количество положительных чисел в промежутке от 1 до 100, кратных

шести.

26)Найти количество положительных чисел в промежутке от 1 до 100, кратных семи.

27)Найти количество положительных чисел в промежутке от 1 до 100, кратных восьми.

28)Найти количество положительных чисел в промежутке от 1 до 100, кратных девяти.

29)Найти количество положительных чисел в промежутке от 1 до 100, кратных одиннадцати.

30)Найти количество положительных чисел в промежутке от 1 до 100, кратных двенадцати.

27.Найти количество положительных чисел в промежутке от 1 до 100, кратных тринадцати.

28.Найти количество положительных чисел в промежутке от 1 до 100, кратных четырнадцати.

29.Составить таблицу сложения на 11, в которой складывается данное число с числами от 1 до 20.

30.Составить программу вывода на экран всех трехзначных чисел кратных 4 и посчитать их среднее арифметическое.

31.Написать программу определения суммы чисел от 3 до 99 кратных числу 3.

32.Гражданин 1 марта открыл в банке счет, вложив 1000 руб. Через каждый месяц размер вклада увеличивается на 2% от имеющейся суммы. Определить суммарный прирост вклада за 7 месяцев.

33.Начав тренировки, лыжники в первый день пробежал 10 км. Каждый следующий день он увеличивал пробег на десять процентов от пробега предыдущего дня. Определить какой суммарный путь он пробежал за первые 7 дней тренировки.

34)Начав тренировки, лыжник в первый день пробегал 10 км. Каждый следующий день он увеличивал длину пробега на 10% от предыдущего дня. Определить в какой день он пробежит больше 20 км, в какой день суммарный пробег за все дни превысит 100км

решение

4.2.2 Алгоритмы формирования одномерного массива

Задача 1. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого соответственно равен сумме элементов строк. Оба массива вывести на экран.

USES Crt;

VAR

H:ARRAY[0..5,0..6] OF INTEGER; K:ARRAY[0..5] OF INTEGER;

I,J:BYTE; S:INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения двумерного массива');

FOR I:=1 TO 5 DO Begin

FOR J:=1 TO 6 DO Begin

H[I,J]:=Random(23); Write(H[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Нахождение суммы элементов строк и заполнение одномерного массива }

WriteLn(' Значения одномерного массива');

FOR I:=1 TO 5 DO Begin

S:=0;

FOR J:=1 TO 6 DO

S:=S+H[I,J];

K[I]:=S; Write(K[I]:4);

End;

END.

Задача 2. Дана квадратная матрица порядка n, заполненная целыми числами. Получить одномерный массив, элементами которого являются первый положительный элемент соответствующей строки матрицы.

USES Crt;

LABEL M1;

CONST N=5;

VAR

H:ARRAY[0..N,0..N] OF INTEGER; B:ARRAY[0..N] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO N DO Begin

H[I,J]:=Random(25)-10; Write(H[I,J]:3);

End; WriteLn;

End; WriteLn;

WriteLn(' Значения первых положительных элементов соответствующих строк');

WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO N DO

IF H[I,J]>0 THEN Begin B[I]:=H[I,J]; GOTO M1; End;

M1: Write(B[I]:3);

End;

END.

Задача 3. Дан двумерный массив размерностью NхM, заполненная целыми числами. Получить одномерный массив, элементами которого являются сумма первого и последнего элементов соответствующих строк двумерного массива.

USES Crt;

CONST N=5; M=7;

VAR

A:ARRAY[0..N,0..M] OF INTEGER; B:ARRAY[0..N] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(30); Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

WriteLn(' Cумма первого и последнего элементов соответствующих строк');

WriteLn;

FOR I:=1 TO N DO Begin

B[I]:=A[I,1]+A[I,M]; Write(B[I]:3);

End;

END.

Задача 4. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив каждый элемент которого равен произведению четных положительных элементов соответствующего столбца.

USES Crt;

VAR

M:ARRAY[0..5,0..6] OF INTEGER; F:ARRAY[0..6] OF INTEGER;

I,J:BYTE; P:LongInt;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 5 DO Begin

FOR J:=1 TO 6 DO Begin

M[I,J]:=Random(20)-5; Write(M[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Формирование одномерного массива}

WriteLn(' Значения элементов одномерного массива');

FOR J:=1 TO 6 DO Begin

P:=1;

FOR I:=1 TO 5 DO

IF (M[I,J]>0) AND (M[I,J] mod 2 =0) THEN P:=P*M[I,J];

IF P=1 THEN F[J]:=0 ELSE F[J]:=P;

Write(F[J]:4);

End;

END.

Задача 5. Дан двумерный массив размерностью 4х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен количеству элементов соответствующей строки, больших данного числа N.

USES Crt;

VAR

A:ARRAY[0..4,0..6] OF INTEGER; G:ARRAY[0..6] OF INTEGER;

I,J,K:BYTE; N:INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 4 DO Begin

FOR J:=1 TO 6 DO Begin

A[I,J]:=Random(45); Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

Write(' Введите значение числа '); ReadLn(N);

{ Формирование одномерного массива}

WriteLn(' Значения элементов одномерного массива');

FOR I:=1 TO 4 DO Begin

K:=0;

FOR J:=1 TO 6 DO

IF A[I,J] > N THEN K:=K+1;

G[I]:=K; Write(G[I]:2);

End;

END.

Задача 6. Дан двумерный массив размерностью 4х5, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен количеству отрицательных элементов, кратных 3 или 5, соответствующей строки.

USES Crt;

VAR

A:ARRAY[0..4,0..5] OF INTEGER; G:ARRAY[0..6] OF INTEGER;

I,J,K:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 4 DO Begin

FOR J:=1 TO 5 DO Begin

A[I,J]:=Random(45)-20; Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Формирование одномерного массива}

WriteLn(' Значения элементов одномерного массива');

FOR I:=1 TO 4 DO Begin

K:=0;

FOR J:=1 TO 5 DO

IF (A[I,J] < 0) AND ((A[I,J] mod 3=0) OR (A[I,J] mod 5 =0)) THEN K:=K+1;

G[I]:=K; Write(G[I]:2);

End;

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Дан двумерный массив размерностью 6х5, заполненный целыми числами, введенными с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен первому четному элементу соответствующего столбца, если такого нет, то равен нулю.

2. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен произведению четных положительных элементов соответствующего столбца.

3. Дана квадратная матрица размерностью NхN, заполненная целыми числами и величина А. Сформировать одномерный массив, каждый элемент которого равен элементу, расположенному на главной диагонали , умноженному на величину А .

4. Дан двумерный массив размерностью 6х8, заполненный целыми числами, введенными с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен количеству элементов соответствующих строк матрицы, значения которых находятся в интервале( -2, 10).

Сборник задач

по программированию

на языке Паскаль

Содержание

стр

1. Ввод и вывод числовых данных. Оператор

присваивания.

3

2. Целочисленная арифметика

7

3. Условный оператор

8

4. Оператор цикла с параметром.

15

5. Оператор цикла с условием.

20

6. Вложенные циклы.

27

7. Символьные строки.

28

8. Одномерные массивы.

32

9. Двумерные массивы.

38

10. Функции и процедуры.

42

11. Файлы

45

12. Графика.

47

13. Массивы величин типа запись.

48

14. Множества.

50

15. Прикладные задачи

51

16. Олимпиадные задачи.

53

1. Ввод и вывод числовых данных.

Оператор присваивания.

Вопросы

Как оформляется оператор вывода на экран ?

Что можно указывать в качестве элементов списка вывода ? Какой символ используется для разделения элементов списка вывода ?

Что будет выведено на экран, если в списке вывода записано : а) число:

б) имя величины; в) текст в кавычках; г) арифметическое выражение ?

Как должен быть оформлен оператор вывода, чтобы информация выводилась на экран с новой строки ?

Как оформляется оператор ввода ? Что можно указывать в качестве элементов списка ввода ? Как работает оператор ввода (что происходит при его выполнении) ?

Почему перед оператором ввода в программе целесообразно записывать оператор вывода ?

Как оформляется арифметическое выражение ?

Какие знаки арифметических операций используются в арифметических выражениях? Укажите приоритет выполнения арифметических операций при расчете значения выражения.

Можно ли в арифметическом выражении использовать круглые скобки ?

С какой целью ? А квадратные ?

Как оформляется оператор присваивания ? Как он работает

(что происходит при его выполнении)?

Какой алгоритм называется линейным ?

Что такое блок-схема? Какие геометрические фигуры используются для изображения алгоритма линейной структуры ?

1.1 Какие имена переменных записаны неверно ? Почему ?

А) time Д) alpha И) a2 Н) IBM_C С) endbegin

Б) a’ Е) a5 К) 3d О) t2.5 Т) DoRoGa

В) альфа Ж) 2a Л) begin П) pascal У) ASU-PT

Г) a.b.c З) z2 М) a/b Р) час_пик Ф) comp

1.2 Вывести на экран числа 5 и 1 одно за другим в строку (в столбец).

1.3 Составить программу вывода на экран числа вводимого с клавиатуры. Выводимому числу должно предшествовать сообщение «Вы ввели число».

1.4 Записать по правилам языка программирования следующие выражения :

а) 2х б) 5cos в) -7,5a2 г) 3

д) sincos + cossin е) -5

з) x1x2+ x1x3+ x2x3 и) b2-4ac

к) 0t + at2/2 л)

м)

н)

о)

п)

р)

1.5 Перевести из линейной записи в обычную следующие выражения :

а) a/b/c д) a*b/c и) a/b*c

б) (a+b)/c е) a+b/b+c к) (a+b)/(b+c)

в) 1/2*a*b*sin(x) ж) 2*b*c*cos(a/2)/(b+c) л) 4*R*sin(a/2)*sin(b/2)

г) 2*sin((a+b)/2)*cos(ab/2) з) abs(2*sin(-3*abs(x/2))) м) m*v*v/2+m*g*h

1.6 Укажите значение величины s после выполнения следующих операторовприсваивания :

а) s:=5;

s:=57 б) s:=-7.5;

s:=2*s; в) s:=6;

s:=-5.2*s;

s:=0; г) s:=45:

k:=-25;

s:=s+k;

1.7 Указать значения величин а и b после выполнения следующих операторов присваивания :

а) d:=5.8;

b:=-7.9;

b:=a;

a:=b; b) a:=0;

b:=-9.99:

b:=a;

a:=b;

начало х a:=2x b:=a-3 c:=x2

конец y y:=b/d d:=c+1

1.8 По заданной блок-схеме вычисления значения функции y=(2x-3)(x2+1) напишите программу.

начало х a:=x2 b:=a2 c:=а+b

конец y y:=c/d d:=b+1

1.9 По заданной блок-схеме восстановите условие задачи; напишите формулу вычисления значения функции и напишите программу.

1.10 Сколько раз программа приостановит свою работу в ожидании ввода данных с клавиатуры, если при первой остановке была введена строка : 1 2 3

a) Program XXX;

Var x,y,z : Integer;

begin

read(x);

read(y);

read(z);

writeln(x,y,z)

end. б) Program XXX;

Var x,y,z : Integer;

begin

readln(x);

readln(y);

readln(z);

writeln(x,y,z)

end.

1.11 В какой части оператора вывода допущена ошибка :

а) Writen(X1,Abs(Y1),1,’1’,’Text’); б) Writeln(X1,Abs(Y1),1,’’Text’’);

в) Writeln(X1,Abs(1Y),1,’1’,’Text’); г) Writeln(X1,Abc(Y1),1,’1’,’Text’);

1.12 Что будет выведено на экран в результате работы операторов :

а) Writeln(’7 mod 8’); б) Writeln(7 mod 8);

1.13 Составить программу и нарисуйте блок-схему алгоритма :

а) расчета значения функции y=7x2-3x+6 при любом значении x;

б) расчета значения функции y=12a2+7a-16 при любом значении a;

в) расчета значения функций z = и

q = 2,8sinx +y при x0

1.14 Дана сторона квадрата. Найти его периметр.

1.15 Дан радиус окружности. Найти ее диаметр, длину окружности, площадь

круга.

1.16 Даны два целых числа. Найти:

а) их среднее арифметическое; б) их среднее геометрическое.

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

1.18 Известны координаты двух точек на плоскости. Составить программу вычисления расстояния между ними. Нарисуйте блок-схему алгоритма

1.19 Треугольник задан координатами своих вершин. Найти периметр и площадь треугольника.

1.20 Составить программу обмена значениями двух переменных величин.

1.21 Дано вещественное число А. Не пользуясь никакими арифметическими операциями, кроме умножения, получить:

а) А7 за четыре операции; б) А15 за пять операций;

в) А5 и А19 за пять операций; г) А10 и А16 за четыре операции.

1.22 Составить программу решения линейного уравнения ax + b = 0 (a0).

1.23 Поменяйте местами значение переменных x,y,z так, чтобы в x оказалось значение переменной y, в y – значение переменной z, а в z – прежнее значение переменной x.

1.24 Найти площадь кольца по заданным внешнему и внутреннему радиусам кругов.

1.25 Вычислить корни квадратного уравнения ax2 + bx + c =0, заданного коэффициентами a, b, c (предполагается, что а0 и что дискриминант уравнения неотрицателен).

ЗАДАЧИ ПОВЫШЕННОЙ ТРУДНОСТИ

1.26 Для двух данных чисел найти среднее арифметическое кубов этих чисел и среднее геометрическое модулей этих чисел.

1.27 Найти площадь равнобедренной трапеции с основаниями a и b и углом  при большем основании.

1.28 Расстояние между моторными лодками – S км. Определить расстояние между ними через T ч, если первая движется со скоростью V1, а вторая - V2 км/ч, скорость течения реки – V км/ч.

1.29 Даны два натуральных числа – двузначное и трехзначное. Найти разность суммы цифр двузначного и трехзначного чисел.

1.30 Известны количество жителей в государстве, его национальный доход и площадь государства. Определить плотность населения в этом государстве и доход на душу населения.

1.31 Дана величина угла, составляющая m градусов и n минут. Выразить эту величину в радианах.

1.32 Дано натуральное число n – расстояние выраженное в миллиметрах. Записать это расстояние, выделив метры, сантиметры и миллиметры.

Например: 12345 мм получаем ответ 12 м 34 см 5 мм.

1.33 Треугольник задан величинами своих углов и радиусом описанной окружности. Найти стороны треугольника.

1.34 Найдите все углы треугольника со сторонами a, b, c. Предусмотреть в программе перевод радианной меры угла в градусы, минуты и секунды.

1.35 Полторы кошки за полтора часа съедают полторы мышки. Сколько мышек съедят X кошек за Y часов?

1.36 Дана величина А, выражающая объем информации в байтах. Перевести А в более крупные единицы измерения информации.

2. Целочисленная арифметика.

Вопросы :

Какие операции можно выполнять над величинами целого типа ? Укажите приоритет их выполнения при расчете значения арифметического выражения.

Как определить остаток от деления одной величины целого типа на другую ?

Можно ли при делении одной величины целого типа на другую использовать знак «/» ?

2.1 Дана масса в килограммах. Найти число полных тонн в ней.

2.2 Дан прямоугольник с размерами 543 х 130 мм. Сколько квадратов со стороной 130 мм можно отрезать от него ?

2.3 Дано двузначное число. Найти :

а) число десятков в нем; б) число единиц в нем;

в) сумму его цифр; г) произведение его цифр.

2.4 Дано трехзначное число. Найти число, полученное при прочтении его цифр справа налево.

2.5 Дано целое число, большее 99. Найти третью от конца его цифру (так, если данное число 2345 то искомая цифра 3)

2.6 Из трехзначного числа Х вычли его последнюю цифру. Когда результат разделили на 10, а к частному слева приписали последнюю цифру числа Х, то получилось число 237. Найти число Х.

2.7 Дано трехзначное число. Найти : а) число, полученное при перестановке первой и второй цифр заданного числа; б) число, полученное при перестановке второй и третьей цифр заданного числа.

2.8 В трехзначном числе Х убрали его вторую цифру. Когда к образовавшемуся двузначному числу справа приписали вторую цифру числа Х, то получилось число 456. Найдите число Х.

2.9 * С начала суток прошло H секунд. Определить:

а) сколько полных часов прошло с начала суток;

б) сколько полных минут прошло с начала очередного часа;

в) сколько полных секунд прошло с начала очередной минуты.

2.10 * Даны целые числа H, M, S (0 < H <=23, 0 <=M<=59, 0<=S<=59), указывающие момент времени: «Н часов, М минут, S секунд». Определить угол (в градусах) между положением часовой стрелки в начале суток и в указанный момент времени.

3. Условный оператор.

Вопросы :

Что такое простое условие ? Какие операции отношения используются в нем ?

Что такое составное условие ? Какие логические операции используются в нем ? Каков приоритет их выполнения ? Как изменить приоритет ?

Какие виды условных операторов используются ?

В каких случаях в программе используется полный условный оператор ? Как он оформляется ? Как он работает (что происходит при его выполнении)? Нарисуйте графическую схему выполнения.

В каких случаях в программе используется неполный условный оператор ? Как он оформляется ? Как он работает (что происходит при его выполнении)? Нарисуйте графическую схему выполнения.

В каких случаях в программе используется вложенный условный оператор ? Как он оформляется ?

В каких случаях в программе используется оператор варианта (выбора)? Как он оформляется ? Как он работает (что происходит при его выполнении)? Нарисовать графическую схему выполнения.

3.1 Вычислить значение логического выражения

если А=Истина, В=Ложь, С=Ложь:

А) А или не (А и B) или С; Б) не А или А и (В или С);

В) (А или В и не С) и С Г) (не А или не В) и не С;

Д) (не А или не В) и (А или В); Е) А и В или А и С или не С.

3.2 Имеется условный оператор : if D<>10 Then writeln(‘ура !’)

Else writeln (‘плохо...’);

Можно ли заменить его следующими операторами :

а) if D=10 Then writeln(‘ура !’)

Else writeln (‘плохо...’);

б) if Not(D=10) Then writeln(‘плохо...’)

Else writeln (’ура !’);

в) if Not(D=10) Then writeln(‘ура !’)

Else writeln (‘плохо...’);

г) if Not(D<>10) Then writeln(‘плохо...’)

Else writeln (’ура !’);

3.3 Какими будут значения переменных j, k после выполнения условного опратора : If j>k Then j:=k-2 Else dec(k,2),

если исходные значения переменных равны :

а) j=3, k=5; б) j=3, k=3 в) j=3, k=2.

В результате выполнения оператора dec(k,2) значение переменной k уменьшается на 2.

3.4 После выполнения операторов :

a:=0;

if a<>0 Then; a:=2;

Значение переменной равно двум. Объясните почему.

начало

а, d

a

y=a-d y=a+d

y

конец

3.5 Вычислите значение функции :

y = a+d, a>=d

a-d , a

в представленной блок-схеме решения данной задачи проставьте да и нет над стрелками перехода.

начало

а, b

a>b

конец

3.6 Даны два числа a и b.

Найдите минимальное из этих

чисел. Обозначьте через y ми-

нимум из a, b. В блок-схеме

заполните пустые блоки.

3.7 В представленной блок-схеме

алгоритма вычисления значения функции

x2, x  2,

y =

x3, x = 2

заполните пустые блоки.

3.8 Вычислить значение функции :

х2+5, при x>3;

начало

х

нет да

y=x3 y=x2

конец

x-8, при x3. Постройте блок-схему алгоритма

3.9 Вывести на экран номер четверти, которой принадлежит точка с координатами (x,y), при условии, что (x<>0) и (y<>0). Постройте блок-схему алгоритма

3.10 Вычислить значение функции : х-12, при x>0

y = 5, при х=0

x2, при x<0

Постройте блок-схему алгоритма

3.11 Используя, составной оператор, упростите следующий фрагмент программы

if a>b Then c:=1;

if a>b Then d:=2;

if a<=b Then c:=3;

if a<=b Then d:=4;

3.12 Каким будет значение переменной a после выполнения операторов :

a:=3;

if a<4 Then Begin Inc(a,2); Inc(a,3); End.

В результате выполнения оператора Inc(a,3); значение переменной a увеличивается на 3.

3.13 Какое значение будет иметь переменная Z после выполнения следующих операторов :

а) z:=0;

if x>0 then if y>0 then z:=1 else z:=2

при x=y=1

б) z:=0;

if x>0 then if y>0 then z:=1 else z:=2

при x=1, y=-1

3.14 В какой строке программы содержится ошибка :

program A;

Var b,c:integer;

Begin

readln(b);

if b>=0 then c:=b*b;

else c:=-b*b*b;

writeln(‘c=’,c)

end. program b;

Var b,c:integer;

begin

readln(b);

if b<>1 then c:=b/b;

else c:=-a*b*b;

writeln(‘c=’,c)

end.

3.15 Какие их перечисленных строк не содержат синтаксических ошибок ?

а) if x y then x:=0 else read(y);

в) if x>=y then x:=0; y:=0 else write(z); г) if a

д) if sqrt(z)<3.17 then z:=z+1; е) if x

3.16 Если целое число М делится нацело на целое число N, то вывести на экран частное от деления в противном случае вывести сообщение «M на N нацело не делится».

3.17 Составьте тесты для проверки работы следующих фрагментов программ:

1) if a>b Then if b<0

then c:=a

else c:=b

Else c:=0;

2) if a>b then c:=1;

if a>b then d:=2;

if a<=b then c:=3;

if a b then if a>c

then if a>d

then c:=1

else c:=2

else c:=3

else if b>c

then if b>d

then c:=4

else c:=5

else c:=6;

3.18 Что будет напечатано ?

Program ex;

Var a,b : integer;

aa, bb, cc : boolean;

begin a:=3; b:=5;

aa:=a c; cc:=a;

if aa then write (’a’);

if bb then write (’b’);

if cc then write (’c’)

end;

3.19 Дано целое число. Определить :

а) является ли оно четным; б) оканчивается ли оно цифрой 7

в) оканчивается ли оно четной цифрой.

3.20 Известны площади круга и квадрата. Определить :

а) уместится ли круг в квадрате; б) уместится ли квадрат в круге ?

3.21 Даны объемы и массы двух тел из разных материалов. Материал какого из тел имеет большую плотность ?

3.22 Дано двузначное число. Определить :

а) какая из его цифр больше первая или вторая;

б) одинаковы ли его цифры.

3.23 Определить, является ли число А делителем числа В ? А наоборот ?

3.24 Даны целые числа X,Y,Z. Вычислить :

а) MAX(X+Y+Z, XYZ) б) MIN(X, Y, X-Y)

3.25 * Даны три действительных числа а, b и с. Определить, можно ли построить треугольник с такими длинами сторон.

3.26 Верно ли, что для заданного четырехзначного числа выполняется соотношение: сумма первой и последней цифры равна разности второй и третьей цифры ?

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

3.28 Проверить, принадлежит ли число, введенное с клавиатуры, интервалу

(-5,3).

3.29 * Определите, является ли треугольник со сторонами a, b , c :

а) равнобедренным; б) равносторонним; с) прямоугольным.

3.30 * Дано натуральное число n (n<=9999). Выяснить, является ли оно палиндромом («перевертышем»), с учетом четырех цифр. (7777, 8338, 0330 и т.д.)

3.31 Дано натуральное число n (n<=9999). Выяснить, верно ли, что это число содержит ровно три одинаковые цифры, если оно записано четырьмя цифрами, как например, числа 3363, 4844, 0300 .

3.32 Определить, является ли заданное шестизначное число счастливым. (Счастливым называют такое шестизначное число, у которого сумма его первых трех цифр равна сумме его последних трех цифр).

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

3.34 Даны три (четыре) целых числа. Вывести на экран те из них, которые являются четными.

3.35 Даны три (четыре) вещественных числа. Определить, сколько из них отрицательных.

3.36 Даны три вещественных числа. Используя только два неполных условных оператора, определить :

а) максимальное значение заданных чисел;

б) минимальное значение заданных чисел.

ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ

3.37 Дано целое число n (1n99), определяющее возраст человека (в годах). Для этого числа напечатать фразу «мне n лет», учитывая при этом, что при некоторых значениях n слово «лет» надо заменить на слово «год» или «года».

3.38 Известны год, номер месяца и день рождения человека, а также год, номер месяца и номер текущего дня месяца (1- январь и т.п.). Определить возраст человека (число полных лет).

3.39 Поезд прибывает на станцию в а часов b минут и отправляется в c часов d минут. Пассажир пришел на платформу в n часов m минут. Будет ли поезд стоять на платформе ? Числа a, b, c, d, n, m - целые,

0 < a  23, 0 < b  59, 0 < c  23, 0 < d  59, 0 < n  23, 0 < m  59.

3.40 Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего угла каждого из них и длины их сторон. Один из прямоугольников назовем первым, другой – вторым. Найти координаты левого нижнего и правого верхнего углов минимального прямоугольника, содержащего указанные прямоугольники.

3.41 Даны вещественные положительные числа А, В, С, Д. Выяснить, можно ли прямоугольник со сторонами А, В уместить внутри прямоугольника со сторонами С, Д так, чтобы каждая из сторон одного прямоугольника была параллельна или перпендикулярна каждой стороне второго прямоугольника.

3.42 В подъезде жилого дома имеется N квартир, пронумерованных подряд, начиная с номера А. Определить, является ли сумма номеров всех квартир четным числом. Формулу суммы членов арифметической прогрессии не использовать.

3.43 Известны даты рождения двух человек в форме (чч.мм.гг). Определить возраст каждого человека (число полных лет) на сегоднящний день. Определить, кто из них старше.

3.44 Работа светофора для водителей запрограммирована следующим образом: в начале каждого часа в течение трех минут горит зеленый сигнал, затем в течение одной минуты – желтый, в течение двух минут – красный, в точение трех минут – опять зеленый и т.д. Дано вещественное число T, означающее время в минутах, прошедшее с начала очередного часа. Определить, сигнал какого цвета горит для водителей в этот момент.

3.45 Даны целое число К (1<=К<=180) и последовательность цифр 10111213…9899, в котором выписаны подряд все двузначные числа. Определить К-ю цифру.

3.46 Дана точка А(x,y). Определить, принадлежит ли она треугольнику с вершинами в точках (x1,y1), (x2,y2), (x3,y3).

3.47 Написать программу, определяющую будут ли прямые A1x + B1y +C1=0 и A1x + B1y +C1=0 перпендикулярны. Если нет, то найдите угол между ними.

3.48 Заданы координаты вершин прямоугольника: (x1,y1), (x2,y2), (x3,y3), (x4,y4). Определиь площадь части прямоугольника, расположенной в I- й координатной четверти.

Оператор варианта (выбора)

3.49 Составить программу, которая в зависимости от порядкового номера дня недели (1, 2, ..., 7) выводит на экран его название (понедельник, вторник, ....воскресенье).

3.50 Составить программу, которая в зависимости от порядкового номера месяца (1, 2, ..., 12) выводит на экран его название (январь, февраль,..., декабрь).

3.51 Составить программу, которая в зависимости от порядкового номера месяца (1,2, ..., 12) выводит на экран количество дней в этом месяце. Рассмотреть 2 случая :

1) год не является високосным; 2) год високосный.

3.52 Игральным картам условно присвоены следующие порядковые номера в зависимости от их достоинства : «валету» - 11, «даме» - 12, «королю» - 13, «тузу» - 14. Порядковые номера остальных карт соответствуют их названиям («шестерка», «девятка» и т.п.). По заданному номеру карты k

(6  k  14) определить достоинство соответствующей карты.

3.53 Мастям игральных карт условно присвоены следующие порядковые номера: «пики»-1, «трефы»-2, «бубны»-3, «червы»-4, а достоинству карт: «валету» - 11, «даме» - 12, «королю» - 13, «тузу» - 14. Порядковые номера остальных карт соответствуют их названиям («шестерка», «девятка» и т.п.). По заданным номеру масти m (1  m  4) и номеру достоинства карты (6  k  14) определить полное название (масть и достоинство) соответствующей карты в виде: «дама пик», «шестерка бубен» - т.п.

3.54 Дано целое число k (1  k  365). Определить, каким днем недели (понедельником, вторником, ..., субботой или воскресеньем) является k-й день не високосного года, в котором 1 января - понедельник.

3.55 Напишите программу, которая по заданной дате определяет время года. Программа должна проверять корректность введенной даты.

3.56 * Пусть элементами прямоугольного равнобедренного треугольника являются:

1) катет а; 2) гипотенуза b; 3) высота, опущенная из вершины прямого угла на гипотенузу h; 4) площадь S. Составьте программу, которая по заданному номеру и значению соответствующего элемента вычисляла бы значение всех остальных элементов треугольника.

3.57 * Составьте программу, позволяющую о последней цифре данного числа определить последнюю цифру куба этого числа.

3.58 * Составить программу для определения подходящего возраста кандидатуры для вступления в брак, используя следующее соображение: возраст девушки равен половине возраста мужчины плюс 7, возраст мужчины определяется соответственно как удвоенный возраст девушки минус 14.

4. Оператор цикла с параметром.

Вопросы :

В каких случаях используется цикл с параметром ?

Как он оформляется ?

Как он работает (что происходит при его выполнении)? Нарисовать блок-схему выполнения.

Что такое тело цикла ?

Может ли тело оператора цикла с параметром не выполнятся ни разу ?

Как должен быть оформлен оператор цикла с параметром, чтобы тело цикла выполнялось при уменьшающихся значениях параметра цикла ? Как он будет работать (что происходит при его выполнении)? Нарисовать графическую схему выполнения.

Чему равно количество повторений тела оператора цикла с параметром, если параметр цикла принимает :

а) все целые значения от 1 до 10;

б) все целые значения от А до В;

в) все нечетные значения от 1 до 20;

г) все нечетные значения от 1 до N;

д) все значения от 10 до 100 с шагом 7 ?

Можно ли в теле цикла с параметром не использовать величину - параметр цикла ?

4.1 Что будет выведено на экран в результате выполнения программы ?

var i:integer;

begin

for i:=1 to 3 write(1)

end.

var i,a,b : integer;

begin

a:=1; b:=2;

for i:=b downto a do

write(i);

end.

4.2 Сколько раз выполнится тело цикла FOR ?

var i,a,b : integer;

begin

a:=1; b:=2;

for i:=b downto a do

write(‘!’);

end. var i,a,b : integer;

begin

a:=1; b:=2;

for i:=a downto b do

write(‘!’);

end.

4.3 Сколько раз будет выполнено тело цикла в следующих фрагментах программ:

а) For k:=-1 To 1 Do ... б) For k:=10 To 20 Do ...

в) For k:=20 To 10 Do г) k:=5; r:=15;

For i:=k+1 To r-1 Do ...

д) k:=5; r:=15;

For i:=0 To k*r Do ... е) k:=r;

For i:=k To r Do...

4.4 Определить значение переменной S после выполнения следующих операторов :

а) s:=0; n:=10;

For i:=2 To n Do s:=s+100 div i; б) s:=0;

for i:=-5 to 0 do

n:=i*i;

s:=s+n;

в) n:=5; s:=0;

for i:=1 to n do s:=i;

writeln(s); г) for i:=1 to 5 do

for j:=1 to 5 do write(‘x’);

4.5 Найдите ошибки в следующих фрагментах программ:

а) var k, i : integer; x, y: real;

Begin y:=0;

For x:=0.1 to 0.9 do y:=y+sin(x)

End. б) var k, i : intreger; x,y : real;

Begin k:=81; y:=1

For i:=1 to sqrt(k) do y:=2*y

End.

в) var k, i : integer; x, y : real;

begin k:=0;

for i:=1 to 9 do k:=k+sqr(i);

k:=k*i end; г) var k, i : intreger; x,y : real;

Begin k:=1;

For i:=1 to 64 do begin i:=2*i;

k:=k+1 end end;

4.6 Составить программу возведения натурального числа в квадрат, используя следующую закономерность :

12 = 1

22 = 1 + 3

32 = 1 + 3 + 5

42 = 1 + 3 + 5 + 7

n2 = 1 + 3 + 5 + 7 + 9 +... + 2n-1

начало

p=2

t=p*k

t

конец

рис 1.

начало

к=1,23

s:=.....

s

конец

рис 2.

начало

a1=3 d=4

a=a1+d(n-1)

n, a

конец

рис 3.

начало

B

k=10, B

Конец

рис 4.

4.7 Получите значения результатов таблицы умножения на 2. Заполните пустые блоки в блок-схеме.(рис 1)

4.8 Вычислить сумму S=1+1/2+1/3+1/4+1/5+.... + 1/23. В блок-схеме заполните пропуски недостающими элементами. (рис2)

4.9 Вычислите поочередно 10 членов арифметической прогрессии, у которой а1=3; d=4. В блок-схеме заполните пропуски недостающими элементами. (рис3).

4.10 Напечатать «столбиком» квадраты всех целых чисел от 10 до В (значение В вводится с клавиатуры). В блок-схеме заполните пропуски недостающими элементами. (рис4).

4.11 Какие из приведенных ниже операторов содержат ошибки ?

а) For a:=30 to 20 Do

if f Mod 3=0 Then d:=d+1; б) For x:=1 to 20 Do s:=s+x;

if (x Mod 2=0) or (x Mod 3=0)

Then d:=d+1;

в) For i:=12 To 15 Do s:=s+i;

4.12 Напечатать числа следующим образом :

а) 10 10.4

11 11.4

.........

25 25.4 б) 25 25.5 24.8

26 26.5 25.8

...............

35 35.5 34.8 в) 21 20.4

22 21.4

.....

35 34.4 г) 16 15.5 16.8

17 16.5 17.8

..........

24 23.5 24.8

4.13 Напечатать таблицу соответствия между весом в фунтах и весом в килограммах для значений 1, 2, ..., 10 фунтов (1 фунт=453 г)

4.14 Вывести «столбиком» значения :

а) sin0,1; sin0,2;...; sin1.1 б)

в) 2,1 2,2 2,3 ... 2,8 г) 2,2 2,4 2,6 .... 4,2

4.15 Даны натуральные числа x, y. Вычислить произведение xy, используя лишь операцию сложения. Задачу решить двумя способами.

4.16 Найти : а) произведение всех целых чисел от А до 20 ( 1А20);

б) среднее арифметическое всех целых чисел от А до В (А и В вводятся с клавиатуры );

в) сумму кубов целых чисел от 20 до 40;

г) сумму квадратов всех целых чисел от К до Р.

4.17 Вычислить : а) 2n! б) (2n-1)! в) (n+3)! г) Пусть n!! означает 1*3*5*7*...*n для нечетного n и 1*2*4*6*...*n для четного n. Для заданного натурального n вычислить n!!.

4.18 Дано натуральное число n. Найти сумму n2 + (n+1)2+ ... +(2n)2.

4.19 Вычислить сумму:

а) -12 + 22 - 32 + 42 + ... + 102. Условный оператор не использовать.

б) 22 + 23 + 24 + ... + 210.

в) 2/3 + 3/4 + 4/5 + ... + 10/11

г) 1 + 1/3 + 1/32 + ... + 1/38

д) 1 - 1/2 + 1/3 - ... +(-1)n+11/n

е ) x + x3/5 + x5/5 + .... + x11/11 при х=2

4.20 Вычислить значение выражения ((...(202 - 192)2 - 182)2 - ... - 12)2.

4.21 Дано пятизначное число. Найти число, получаемое при прочтении его цифр справа налево.

4.22 Составить программу возведения натурального числа в третью степень, учитывая следующую закономерность :

13 = 1

23 = 3 + 5

33 = 7 + 9 + 11

43 = 13 + 15 + 17 + 19

53 = 21 + 23 + 25 + 27 + 29.

4.23 Одноклеточная амеба каждые 3 часа делится на 2 клетки. Определить, сколько клеток будет через 3, 6, 9, ... 24 часа, если первоначально была одна амеба.

4.24 Вычислить сумму 1+ 1/1! + 1/2! + 1/3! + 1/4! + 1/5! +.... + 1/n!

4.25 Последовательность Фибоначчи образуется так : первый и второй члены последовательности равны 1, каждый следующий равен сумме двух предыдущих (1, 1, 2, 3, 5, 8, 13, ...).Дано натуральное число n (n  3).

а) Найти к-й член последовательности Фибоначчи.

б) Получить первые n членов последовательности Фибоначчи.

в) Верно ли, что сумма первых n членов последовательности Фибоначчи есть четное число ?

4.26 Известна масса каждого из 12 предметов. Определить общую массу всего набора предметов.

4.27 Даны числа a1, a2, a3, ... an Определить :

а) их сумму; б) их произведение;

в) сумму их квадратов; г) их среднее арифметическое.

4.28 Известны оценки ученика по 10 предметам. Определить среднюю оценку.

4.29 В области 12 районов. Известны количество жителей (в тысячах человек) и площадь (в км2) каждого района. Определить среднюю плотность населения по области в целом.

4.30 Дано натуральное число n. Получить все его натуральные делители.

5. Оператор цикла с условием.

Вопросы :

В каких случаях используются операторы цикла с условием 7

В каких случаях используется оператор цикла с предусловием ?

Как он оформляется ?

Как он работает (что происходит при его выполнении)?

Нарисовать блок-схему алгоритма выполнения ?

Может ли тело оператора цикла с предусловием :

а) не выполниться ни разу;

б) выполняться бесконечное число раз (или до тех пор, пока пользователь прервет его выполнение) ?

В каких случаях используется оператор цикла с постусловием ?

Как он оформляется ?

Как он работает (что происходит при его выполнении)?

Нарисовать блок-схему алгоритма выполнения ?

Может ли тело оператора цикла с постусловием :

а) не выполниться ни разу;

б) выполняться бесконечное число раз (или до тех пор, пока пользователь прервет его выполнение) ?

Всегда ли можно вместо оператора цикла с параметром использовать оператор цикла с предусловием ? А наоборот ?

Всегда ли можно вместо оператора цикла с параметром использовать оператор цикла с постусловием ? А наоборот ?

5.1 Дана последовательность операторов :

a:=1; b:=1;

While a+b<8 Do

Begin a:=a+1; b:=b+2 End;

s:=a+b;

Сколько раз будет повторен цикл и какими будут значения переменных a, b, s после завершения этой последовательности операторов ?

5.2 Какими будут значения переменных а, b после выполнения последовательности операторов :

a:=1; b:=1;

While a<=3 Do a:=a+1; d:=b+1;

5.3 Определите значение переменной s после выполнения следующих операторов:

а) s:=0; i:=0;

While i<5 Do Inc(i); s:=s+100 div i; б) s:=0; i:=1;

While i>1 Do

Begin s:=s+100 div i; dec(i) End

в) s:=0; i:=1;

Repeat s:=s+5 div i; i:=i-1;

Until i<=1; г) s:=0; i:=1;

Repeat s:=s+1/i; dec(i)

Until i<=1;

5.4 В последовательности операторов для вычисления факториала f числа n содержится пять ошибок. Найдите эти ошибки.

k:=1; f:=0;

While k

k:=k+1,

5.5 Найдите и исправьте ошибки в следующем фрагменте программы, определяющей для заданного натурального числа n число, записанное цифрами числа n в обратном порядке.

p:=n;

While p>=0 Do

Begin

a:=a+p mod 10;

p:=p div 10

End;

5.6 Представлен фрагмент программы вычисления количества цифр в заданном натуральном числе. Найдите в нем ошибки и исправьте их.

a:=n; ck:=0;

While a>=0; Do

Begin

ck:=ck+1;

a:=a div 10

end;

5.7 Какими условиями должны удовлетворять значения переменной k, чтобы следующие циклы были бесконечны :

а) While c<0 Do c:=c+k;

б) While k<>0 Do k:=k+1;

в) While k<>0 Do k:=k-2

начало

X

X=X+1

ДА

X<=10

НЕТ

X

конец

Рис 6

начало

P, Q

P=P-0,5

ДА

P>Q

НЕТ

P

конец

Рис 5

начало

k=1 P=

Нет

k

Да

k=k+1 P=...

P

конец

Рис. 7

начало

k=1 S=

Нет

k

Да

S=... k=....

S

конец

Рис. 8

5.8 Пусть Р - имеющийся вес тела, Q - идеальный вес. Каждый день сбрасывается 0,5 кг. По блок-схеме(рис 5) составьте программу.

5.9 К некоторому числу х прибавляйте 1 до тех пор, пока х не станет равным 10. По составленной блок-схеме (рис 6) определите, сколько раз будет повторятся цикл, если : а) х=3 б) х=7 Напишите программу.

5.10 Вычислите произведение p=1*1/2*1/3*1/4*...*1/13. В блок-схеме (рис 7) заполните пропуски недостающими элементами.

5.11 Найти сумму всех четных чисел в диапазоне от 1 до 40. В блок-схеме (рис 8) заполните пропуски недостающими элементами.

5.12 Дано натуральное число. Определить :

а) количество цифр в нем; б) сумму его цифр;

в) произведение его цифр; г) среднее арифметическое его цифр;

д) сумму квадратов его цифр; е) сумму кубов его цифр;

ж) его первую цифру.

5.13 Напечатать минимальное число, большее 200 которое нацело делится на 17.

5.14 Гражданин 1 марта открыл счет в банке, вложив 1000 руб. Через каждый месяц размер вклада увеличивается на 2% от имеющейся суммы. Определить :

а) за какой месяц величина ежемесячного увеличения вклада превысит 30 руб.;

б) через сколько месяцев размер вклада превысит 1200 руб.

5.15 Составить программу, проверяющую, является ли последовательность из 10 целых чисел, вводимых с клавиатуры, возрастающей.

5.16 Показать, что любой оператор цикла с предусловием можно записать с помощью условного оператора и оператора цикла с постусловием.

5.17 Показать, что любой оператор цикла с постусловием можно записать с помощью условного оператора и оператора цикла с предусловием.

5.18 Найти НОД трех чисел. НОД(a,b,c)=НОД(НОД(a,b),c)

5.19 Два натуральных числа называются взаимно простыми, если их наибольший общий делитель равен 1. Проверить, являются ли два длинных числа взаимно простым.

5.20 Дано натуральное число. Найти его наименьший делитель, отличный от единицы.

5.21 Дана непустая последовательность положительных целых чисел а1, а2,..., оканчивающаяся нулем. Получить а1, а1*а2, а1*а2*а3, ...., 0

5.22 Определить :

а) является ли заданное число степенью числа 3;

б) является ли заданное число степенью числа 5.

5.23 Дано число n. Из чисел 1, 4, 9, 16, 25, ... напечатать те, которые не превышают n.

5.24 Дано натуральное число. Определить :

а) есть ли в нем цифра 3; б) есть ли в нем цифры 2 и 5.

5.25 Дано натуральное число. Выяснить, является ли оно палиндромом («перевертышем»).

5.26 Известны оценки по информатике 28 учеников класса. Выяснить, есть ли среди них двойки.

5.27 Дана последовательность натуральных чисел а1, а2, .... а15. Определить, есть ли в последовательности хотя бы одна пара одинаковых «соседних» чисел. В случае положительного ответа определить порядковые номера чисел первой из таких пар.

5.28 Дано натуральное число.

а) определить его максимальную цифру;

б) определить его минимальную цифру.

5.29 Напечатать все кратные тринадцати натуральные числа, меньшие 100. Задачу решить двумя способами:

а) без использования оператора цикла с условием;

б) с использованием оператора цикла с условием.

5.30 Найти 15 первых натуральных чисел, делящихся нацело на 19 и больших 100.

5.31 Найти 20 первых натуральных чисел, делящихся нацело на 13 или на 17 и больших 500.

5.32 Дано натуральное число. Определить, какая цифра встречается в нем чаще «0» или «9».

5.33 Вывести на экран все целые числа от А до В, кратные числу С.

5.34 Найти :

а) все двузначные(трехзначные) числа, сумма квадратов цифр которых делится на 13;

б) все двузначные (трехзначные) числа, обладающие следующим свойством: если к сумме цифр числа прибавить квадрат этой суммы, то получится снова искомое число;

в) все двузначные (трехзначные) числа, которые делятся на n или содержат цифру n.

5.35 Даны вещественные числа а1, а2.... а10. Верно ли, что их сумма превышает 100,78 ?

5.36 Известны стоимости каждого из восьми предметов в двух наборах. Какой из наборов предметов более дешевый ?

5.37 Даны вещественные числа а1, а2 ... а8. Определить сумму тех из них, которые больше 10,75.

5.38 Дано натуральное число n и вещественные числа а1, а2 ... аn .Определить произведение тех их них, которые меньше Р.

5.39 Даны вещественные числа а1, а2 ... а8. Определить количество тех из них, которые меньше 100.

5.40 Дано натуральное число n и вещественные числа а1, а2 ... аn Определить :

а) количество чисел, которые больше К;

б) количество чисел, которые оканчиваются цифрой «5».

5.41 Известны оценки каждого из учеников класса по физике. Посчитать количество пятерок, количество четверок, количество троек и количество двоек.

5.42 Даны целые числа с1, с2, ...,ск. Определить среднее арифметическое четных из них.

5.43 Дано натуральное число n и целые числа с1, с2, ...,сn. Найти :

а) номер максимального из чисел, если чисел с максимальным значением несколько, то должен быть найден номер последнего из них;

б) номер минимального из чисел, если чисел с минимальным значением несколько, то должен быть найден номер первого из них;

5.44 Известен рост каждого человека из группы. На сколько рост самого высокого из них превышает рост самого низкого ?

5.45 Известны данные о температуре воздуха в течение месяца. Определить, сколько было дней за месяц с самой низкой температурой.

5.46 Даны целые числа с1, с2, ...,с10. Выяснить, верно ли, что количество положительных чисел не превышает 5.

5.47 Даны вещественные числа х1, х2, ...,х10. Выяснить, верно ли, что количество тех из них, которые не больше 50,55, кратно четырем.

ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ (циклы)

5.48 Около стены приставлена палка длиной 4,5 м. Нижний конец находится на расстоянии 3 м от стены. Она начинает скользить в плоскости, перпендикулярной стене. Определить значение угла между палкой и полом (в градусах) с момента начала скольжения до падения палки через каждые 0,2 м.

5.49 Вычислить приближенно площадь фигуры, образованной кривой

y=0,5(x + 1)2 + 2, осью абсцисс, осью ординат и прямой y=2.

5.50 Известны оценки двух учеников по четырем предметам. Определить, какой ученик лучше учится.

5.51 Найти приближенное значение корня уравнения f(x) = 0 на отрезке [a,b] :

а) x4 + 2x3  x – 1 = 0, a=0, b=1;

б) x3 – 0,2x2 – 0,2x –1,2 = 0, a = 1, b = 1,5.

5.52 Выяснить, является ли заданное число m членом геометрической прогрессии, первый член которой равен g, а знаменатель – z.

5.53 Дана непустая последовательность целых чисел, оканчивающихся отрицательным числом. Верно ли, что все элементы последовательности равны между собой ?

5.54 Составить программу, определяющую общее число удалений и общее штрафное время каждой из хоккейных команд во время игры (игроки удаляются на 2, 5 или 10 минут). Окончание игры моделировать вводом числа 0.

5.55 Составить программу, которая ведет учет очков, набранных каждой командой при игре в баскетбол. Количество очков, полученных командами в ходе игры, может быть равно 1, 2 или 3. Осле любого изменения счет выводить на экран. После окончания игры выдать итоговое сообщение и указать номер команды-победительницы. Окончание игры условно моделировать вводом количества очков, равного нулю.

5.56 Известен год рождения каждого человека из группы. Определить общее число людей, родившихся до 1985 года, и число людей, родившихся после 1990 года.

5.57 Известно число жителей, проживающих в каждом доме улицы. Нумерация домов проведена подряд. Дома с нечетными номерами расположены на одной стороне улицы, с четными – на другой. На какой стороне улицы проживает больше жителей? Использовать только один оператор цикла.

5.58 Даны 20 чисел, образующих неубывающую последовательность. Несколько чисел, идущих подряд, равны между собой. Найти количество таких чисел.

5.59 В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. Дано натуральное число n. Как наименьшим количеством таких денежных купюр можно выплатить суммы n, n + 1, …, n +10 ? (Указать количество каждой из используемых для выплаты купюр.) Предполагается, что имеется достаточно большое количество купюр всех достоинств.

5.60 Используя все цифры от 1 до 9 по одному разу в различных комбинациях и операции сложения и вычитания, получить в сумме 100.

5.61 Дано натурально К. Напечатать К-ю цифру последовательности 12345678910111213, в которой выписаны подряд все натуральные числа.

6. Вложенные циклы.

6.1 Что будет напечатано после выполнения следующего фрагмента программы :

а) при n=6 б) при а=13305

a:=1; b:=1;

for i:=0 to n do

Begin

for j:=1 to b do Write(‘*’);

writeln;

c:=a+b; a:=b; b:=c;

end; b:=0;

While a<>0 Do

begin

b:=b*10+a mod 10;

a:=a div 10;

end;

writeln(b);

6.2 Напечатать числа в виде таблицы :

а) 5 б) 1 1 1 1 1

5 5 1 1 1 1

5 5 5 1 1 1

5 5 5 5 1 1

5 5 5 5 5 1

в) 1 г) 5 5 5 5 5

2 2 6 6 6 6

3 3 3 7 7 7

4 4 4 4 8 8

5 5 5 5 5 9

г) 1 д) 5 5 5 5 5

0 1 1 1 1

2 2 0 0 0 0

0 0 1 1 1

3 3 3 5 5 5

0 0 0 2 2

4 4 4 4 0 0

0 0 0 0 2

5 5 5 5 5 5

0 0 0 0 0

6.3 Напечатать числа в виде следующей таблицы :

а) 0 б) 6 5 4 3 2

1 0 5 4 3 2

2 1 0 4 3 2

3 2 1 0 3 2

4 3 2 1 0 2

6.4 Известны оценки каждого из 18 учеников по трем предметам :

а) найти общее количество пятерок в таблице;

б) найти количество троек у каждого ученика;

в) количество двоек по каждому предмету.

6.5 Даны натуральные числа n и k. Составить программу вычисления выражения 1k + 2k + ....+ nk.

6.6 Изменить задачу 6.5 так, чтобы в ней вычислялась сумма 11+22+....+ nn

6.7 Дано натуральное число. Можно ли его представить в виде суммы квадратов трех натуральных чисел ? Если можно, то :

а) указать тройку x, y, z таких натуральных чисел, что x2+y2+z2=n;

б) указать все тройки x, y, z таких натуральных чисел, что x2+y2+z2=n.

6.8 Составить программу для нахождения всех натуральных решений уравнения n2+m2=k2, где n, m, k лежат в интервале [1, 10].

6.9 Найти все положительные четырехзначные числа abcd, для которых выполняются следующие условия :

а) a, b, c, d - разны цифры;

б) ab - cd = a + b + c + d (здесь ab и cd двузначные числа)

6.10 Написать программы решения ребусов :

ОДИН + ОДИН + ОДИН + ОДИН + ОДИН = ПЯТЬ;

КУБ=(К + У + Б)3 ; ТРИ + ДВА = ПЯТЬ;

VOLVO + FIAT = MOTOR.

При решении ребусов одинаковым буквам соответствуют одинаковые цифры.

7. Символьные строки.

Вопросы :

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

Какие операции можно выполнять над символьными строками ?

Укажите стандартные функции для работы с символьными строками.

7.1 Укажите, какие из указанных ниже операций допустимы в Паскале :

Var a1, a2 : string; b1,b2 : string[80];

C : string[5];

а) a1=a2 б) b2>b1; в) a1<= b2; г) с=b1;

д) c:=a2; е) a2:=’b1+b2’ ж) a1:=a2 з) a2:=b2;

и) c>=’12345’; к) a1<> ‘**’; л) c:=a1 +b2.

7.2 Укажите, какие из указанных ниже выражений допустимы в Паскале:

Var a1, a2 : string; b1,b2 : string[80];

C : string[5];

1) copy(a1,5,3) + length(a2); 2) length(b2) + pos(‘aa’,b1);

3) pos(c,a1) + length(copy(c,6,2)); 4) b1 + copy(b2,65,20);

5) insert(copy(c,2,3), a2+b2,3); 6) delete(copy(a2,5,6),3,4);

7) insert(copy(a1,5,5),a2,3); 8) insert(a1,a2,length(a2)).

7.3 Установите значения следующих выражений:

1)concat(‘кро’,a, b) при a=’код’, b=’ил’ 2) str(123, s);

3) copy(s,2,3) при s=’крокодил’; 4) pos(‘око’,s) при s=’крокодил’;

5) pos(‘я’, ‘ крокодил’); 6) insert(‘чо’,w,5) при w=’моряк’

7) delete(s,1,0) при s=’11111’ ; 8) delete(s, -100,1) при s=’12345’

7.4 Пусть объявлена переменная var a : string[11].

Какое значение будет содержать эта переменная после присваивания a:=’сумей’ + ‘,догадайся’ ?

7.5 Подставьте вместо знаков ? буквы русского алфавита так, чтобы получить осмысленное слово и не нарушить истинность логического выражения:

а) ‘конфета’ 'конфета’ = false.

7.6 Установите, какие задачи решают приведенные ниже фрагменты:

a) s:=’’;

for i:=1 to length(t) do

if pos(copy(t,i,1),’aeiouy’) > 0

then s:=s+copy(t,i,1); б) s:=’’;

for i:=length(t) downto 1 do

s:=copy(t,i,1) + s;

7.7 Дано название города. Определить, четно или нет количество символов в нем.

7.8 Даны две фамилии. Определить, какая из них длиннее.

7.9 Дано слово. Верно ли, что оно начинается и оканчивается на одну и ту же букву ?

7.10 Дано слово. Получить и вывести на экран буквосочетание, состоящее из его второго и четвертого символов.

7.11 Дано слово, состоящее из четного числа букв. Вывести на экран его первую половину, не используя оператор цикла.

7.12 Из одного слова путем вырезок и склеек его букв получить слова :

а) из «вертикаль» получить «тир» и «ветка»;

б) из «программа» получить «ром» и «рампа»;

в) из «трос» получить «сорт», «торс» и «рост»;

г) из «клоун» получить «уклон», «кулон» и «колун»;

д) из «апельсин» получить «спаниель».

7.13 Из слова путем замены его букв получить другое слово :

а) из «вирус» получить «фокус»;

б) из «курсор» получить «танцор»;

в) из «пробел» получить «продел»;

г) из «строка» получить «строфа»;

д) из «муха» получить «слон».

7.14 Дано слово s1. Получить слово s2, образованное нечетными буквами слова s1.

7.15 Дано слово s. Получить слово t, получаемое путем прочтения слова s, начиная с его конца.

7.16 Дано предложение. Напечатать все его буквы «и».

7.17 Дано предложение. Вывести столбиком его третий, шестой и т.д. символы.

7.18 Дано предложение. Вывести все имеющиеся в нем буквосочетания «нн».

7.19 Дано предложение. Определить число букв «о» в нем.

7.20 Дано предложение. Определить число пробелов в нем.

7.21 Дано предложение. Определить долю (в%) букв «в» в нем.

7.22 Дано предложение. Все буквы «е» в нем заменить на букву «и».

7.23 Дано предложение. Все пробелы в нем заменить на символ «_».

7.24 Дано предложение. Все его символы, стоящие на четных местах, заменить на букву «ы».

7.25 Дано предложение. Все его символы, стоящие на третьем, шестом, девятом и т.д. местах, заменить на букву «А».

7.26 Дано предложение. Заменить в нем все вхождения буквосочетания «ах» на «ух».

7.27 Дан символ. Выяснить, является ли он цифрой.

7.28 Дан текст. Напечатать все имеющиеся в нем цифры.

7.29 Дан текст, в котором имеются цифры.

а) Найти их сумму. б) Найти максимальную цифру.

7.30 Дан текст имеющий вид: d1 + d2 + ... + dn , где di - цифры (n>1). Вычислить записанную в тексте сумму.

7.31 Дано предложение, в котором имеется несколько букв «е». Найти :

а) порядковый номер первой из них;

б) порядковый номер последней из них.

7.32 Дано слово. Поменять местами его вторую и пятую буквы.

7.33 Дано слово. Поменять местами его третью и последнюю буквы.

7.34 * Устранить имеющуюся в заданном слове ошибку:

а) глинянный; б) граффика в) прроцесор Г) пррогррамма

7.35 Дано предложение. Удалить из него все буквы «о», стоящие на нечетных местах.

7.36 Проверить, является ли перевертышем следующая символьная строка после удаления из нее всех пробелов:

а) «Аргентина манит негра» б) «а роза упала на лапу азора»

7.37 Дано слово. Переставить его первую букву на место последней. При этом вторую, третью, ..., последнюю буквы сдвинуть влево на одну позицию.

7.38 Дано предложение. Определить :

а) количество слов, начинающихся с буквы «н»;

б) количество слов, оканчивающихся буквой «т».

7.39 Дано предложение :

а) найти длину его самого короткого слова;

б) верно ли, что его самое длинное слово имеет больше 10 символов;

в) напечатать его слова в порядке не убывания их длин;

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

7.40 * Написать программу для вывода последовательностей символов :

а) ZYYXXX......AA..AA; б) ABC....ZZ,BC...ZZZ,C...ZZ..ZZ

7.41 Даны три строки. Определить, можно ли из символов первых двух строк получить третью строку.

7.42 *Даны две строки. Определить, можно ли, переставляя символы в первой строке, получить вторую строку.

7.43 * Написать программу «Поле чудес».

7.44 В каждой строке массива найти количество букв «е», расположенных справа от буквы «н».

7.45 Выяснить, есть ли в массиве строки, в которых буква «а» расположена справа от буквы «д».

7.46 Найти количество строк массива, в которых имеется ровно три буквы «о».

7.47 Вывести слова, образованные символами каждой из строк массива, в которой имеются ровно четыре буквы «и».

7.48 Определить максимальное количество пробелов в строках массива.

7.49 Определить, сколько строк массива имеют максимальное число пробелов.

7.50 Одинаковы ли строки массива с номерами s1 и s2 ?

ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ

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

7.52 В слове имеются только две одинаковые буквы. Найти их.

7.53 Даны два слова. Для каждой буквы первого слова (в том числе для повторяющихся в этом слове букв) определить, входит ли она во второе слово. Например, если заданные слова «информация» и «процессор», то для букв первого из них ответом должно быть: «нет нет нет да да нет нет да нет нет».

7.54 Даны два слова. Напечатать только те буквы слов, которые есть только в одном из них (в том числе повторяющиеся). Например, если заданные слова «процессор» и «информация» , то ответом должно быть : «п е с с и ф м а и я»

7.55 Даны три слова :

а) напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать;

б) напечатать неповторяющиеся в них буквы.

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

7.57 Дано предложение. Найти какое-нибудь его слово, начинающееся на букву «к»

7.58 Дано предложение. Найти длину его самого короткого слова.

8. Одномерные массивы.

Вопросы :

Что такое одномерный массив ? Для чего используются одномерные массивы ? Как они описываются ?

Как в программе использовать значение конкретного элемента одномерного массива ?

Как называется номер элемента одномерного массива ?

Как можно заполнить одномерный массив ?

8.1 Какие из приведенных описаний одномерных массивов являются правильными:

а) var a: array[1..20] of integer; б) var sd : array[1..n] of integer;

в) type myarray: array[1..20];

var a: myarray; г) var dd: array[1] of integer;

8.2 Сколько элементов в каждом из следующих массивов :

а) var mb: array[2..20] of integer; б) type myarray1=array[0.8] of integer;

myarray2=array[-5..5] of integer;

var aa: myarray1; bb: myarray2;

8.3 Используя описание массивов из предыдущего пункта, определить, какие из приведенных обращений к элементам массивов неправильные и почему

а) MB[3]; б) myarray1[2]; в) aa[6]; г) BB[6];

д) Aa[0]; е) bb[0]; ж) bb[-3]; з) aa[-3].

8.4 Имеются описания :

var a: array[1..30] of real;

b: array[-2..2] of integer;

c: array[0..3] of string;

а) для каждого из массивов a,b,c указать сколько в нем элеменов;

б) указать имена первых элементов массивов;

в) указать имена последних элементов;

г) указать какие значения элементов не могут быть значениями элементов массива a, b, c ‘1’ 1.14 1.73 ‘A’ 5

8.5 Сколько элементов таблицы сохранят свои значения после исполнения программы, если исходная таблица

А: 3, 7, -2, -8, 4, -11, 12, -1, 0

p:=1;

for i:=1 to 9 do

begin

p:=p*a[i];

if p

end;

8.6 Сколько элементов таблицы станут иметь значения -1 после исполнения фрагмента программы, если исходная таблица

А: 3, 7, -2, -8, 4, -11, 12, -1, 0

а) for i:=1 to 5 do

a[2*i-1]:=-1; б) for i:=1 to 9 do

begin

if a[i]<0 then a[i]:=-1;

if a[i]>0 then a[i]:=1;

end;

8.7 В каком из приведенных ниже фрагментов программы задача «Переставить элементы массива А в обратном порядке» решается правильно ?

а) for i:=1 to n do

begin a[i]:=a[n-i+1];

a[n-i+1]:=a[i] end; б) for i:=1 to n do begin

x:=a[n-i+1]; a[i]:=x

a[n-i+1]:=a[i] end;

в) for i:=1 to n do begin

x:=a[n-i+1]; a[n-i+1]:=a[i];

a[i]:=x end; г) for i:=1 to n div 2 do

begin x:=a[n-i+1];

a[i]:=x end;

8.8 Укажите строку, в которой есть ошибка :

а) var a:array[1..10] of integer;

i,s: integer;

begin

for i:=1 to 9 do readln(a[i]);

s:=a[10];

for i:=1 to 11 do a[i]=a[i]-s

end; б) var a:array[1..10] string;

i,s: integer;

begin

s:=0

for i:=1 to 10 do s:=s+a[i];

end;

8.9 Дан массив целых чисел. Найти :

1) сумму элементов массива, больших числа А, А вводится с клавиатуры;

2) сумму элементов массива, принадлежащих промежутку от А до В;

3) максимальный элемент массива и его номер, при условии, что все элементы различны;

4) номера всех элементов массива с максимальным значением;

5) сумму элементов массива с к1-го по к2, к1, к2 вводятся с клавиатуры;

6) количество нечетных элементов массива;

7) количество отрицательных элементов массива;

8) сумму первых пяти элементов массива;

9) все элементы, кратные 3 или 5, и их количество;

10) сумму всех четных элементов массива, стоящих на четных местах, то есть имеющих четные номера;

11) сумму всех четных элементов массива (или сумму элементов, кратных заданному числу);

12) сумму положительных элементов массива;

13) сумму элементов, имеющих нечетное значение;

14) сумму элементов, имеющих нечетные индексы;

15) сумму положительных элементов, значения которых меньше 10;

16) удвоенную сумму положительных элементов;

17) сумму отрицательных элементов;

18) индексы тех элементов, значения которых больше заданного числа А;

19) количество элементов массива, значения которых больше заданного числа А и кратных 5;

20) индексы тех элементов, значения которых кратны 3 и 5;

21) индексы тех элементов, значения которых больше значения предыдущего элемента;

22) пару соседних элементов с суммой, равной заданному числу.

8.10 Определить ( массив целочисленный) :

1) сколько элементов массива превосходят по модулю заданное число А;

2) есть ли в данном массиве два соседних положительных элемента ? Найти номера первой (последней) такой пары;

3) есть ли в данном массиве элементы, равные заданному числу;

4) есть ли в данном массиве положительные элементы, кратные к;

5) номер первого отрицательного элемента, дающего при делении на 5 остаток 2;

6) есть ли 2 пары соседних элементов с одинаковыми знаками;

7) номер последней пары соседних элементов с разными знаками.

8.11 Напишите программу вычисления факториала числа N, используя массив.

N!=1*2*3*4*5*6*.....*N.

8.12 Заполнить массив из пятнадцати элементов случайным образом :

а) вещественными значениями, лежащими в диапазоне от 0 до 1;

б) вещественными значениями х (22  х  23);

в) вещественными значениями х (0  х  10);

г) вещественными значениями х (-50  х  50).

8.13 Заполнить массив из 12-ти элементов следующим образом :

а) 1 2 ... 12 б) 12 11 .. 1

8.14 Дан вещественный массив. Все элементы : а) увеличить в 2 раза;

б) уменьшить на число А; г) разделить на первый элемент.

8.15 В массиве хранятся сведения о количестве осадков, выпавших за каждый день января. Определить общее количество осадков за январь.

8.16 В массиве хранится информация о сопротивлении каждого из 20 элементов электрической цепи. Все элементы соединены последовательно. Определить общее сопротивление цепи.

8.17 В массиве хранится информация о численности учеников в каждом из 42 классов школы. Выяснить, верно ли, что общее число учеников в школе есть четырехзначное число.

8.18 Дан массив целых чисел. Напечатать :

а) все четные числа; б) все элементы, оканчивающиеся нулем.

8.19 Дан массив целых чисел.

а) все элементы, оканчивающиеся цифрой 4, уменьшить вдвое.

б) все четные элементы заменить на их квадраты, а нечетные удвоить.

в) четные элементы увеличить на А, а из элементов с четными номерами

вычесть В.

8.20 Дан массив целых чисел. Определить :

а) количество неотрицательных элементов;

б) количество элементов кратных К;

в) количество положительных и количество отрицательных элементов;

г) среднее арифметическое элементов;

д) номера всех элементов с максимальными (минимальными) значениями

8.21 В массиве хранится информация о стоимости каждого из 50 марок легковых автомобилей. Определить, сколько стоит самый дорогой автомобиль.

8.22 В массиве хранится информация о стоимости 1 килограмма 30 видов конфет. Определить номер самого дешевого вида конфет.

8.23 В массиве хранится информация о среднедневной температуре за каждый день июля. Определить даты самых теплых дней.

8.24 Дан массив целых чисел. Переписать его второй, четвертый, и т.д. элементы в другой массив такого же размера :

а) расположив элементы на тех же местах, что и в исходном массиве;

б) расположив элементы подряд с начала массива.

8.25 Дан массив из 20 вещественных чисел. Сформировать два массива размером 10, включив в первый их них элементы заданного массива с четными индексами, а во второй - с нечетными.

8.26 Дан массив целых чисел. Выяснить :

а) верно ли, что сумма элементов, которые больше 20 превышает 100;

б) верно ли, что сумма элементов, которые меньше 50, есть четное число.

8.27 Известна численность каждого из 40 групп училища. Верно ли, что в самой многочисленной группе учится на 10 учеников больше, чем в самой малочисленной.

8.28 Удалить из массива вещественных чисел :

а) минимальный (максимальный) элемент;

б) третий элемент; в) к-й элемент.

8.29 Дан массив из 20 элементов. Переставить первые три и последние три элемента, сохранив порядок их следования.

8.30 Вставить в массив целых чисел : а) число 10 после второго элемента;

б) заданное число после первого отрицательного (перед последним четным элементом)

ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ

8.31 Рост 22 учеников класса представлен в виде массива. Рост мальчиков условно задан отрицательными числами. Определить средний рост мальчиков и средний рост девочек.

8.32 В массиве записаны результаты 20 игр футбольной команды (если игра окончилась выигрышем данной команды, то записано число 3, проигрышем – 2, если игра закончилась вничью – 1). Определить количество выигрышей, количество ничьих и количество проигрышей данной команды.

8.33 Изменить знак у максимального по модулю элемента массива. Минимальный элемент массива удвоить.

8.34 Известен возраст группы людей в списке. Какой человек указан в списке раньше: самый старший или самый младший? (Должны учитываться первые из людей одинакового возраста.)

8.35 В массиве хранится информация о среднедневной температуре за каждый день февраля. Определить даты двух самых холодных дней.

8.36 Известны данные о вместимости (в Мб) и стоимости (в руб.) каждого из 22 типов жестких магнитных дисков («винчестеров»). Напечатать вместимость тех винчестеров, которые стоят больше p рублей.

8.37 На плоскости даны 20 точек (x1,y1), (x2,y2), …, (x20,y20). Рассмотрим наименьший рямоугольник, содержащий эти точки со сторонами, параллельными координатным осям. Определить координаты противоположных углов этого прямоугольника – левого нижнего и правого верхнего.

8.38 Даны два массива одного размера, в которых нет нулевых элементов. Получить третий массив, каждый элемент которого равен 1, если элементы заданных массивов с одинаковым номером имеют одинаковый знак, и равен нулю в противном случае.

8.39 Дан массив целых чисел.

а) Напечатать все элементы, предшествующие первому элементу с заданным значением n. Если элементов, равных n, в массиве нет, то должны быть напечатаны все элементы.

б) Напечатать все элементы, следующие за последним элементом, оканчивающимся цифрой “7”. Если элементов, оканчивающихся цифрой “7”, в массиве нет, то ни один элемент не должен быть напечатан.

8.40 Найти количество различных элементов в массиве.

8.41 Дано натуральное число N. Определить количество различных цифр в нем. Например, в числе 1234 количество различных цифр равно 4, в числе 22424 – 2, в числе 333 – 1.

8.42 В массиве имеются только два одинаковых элемента. Найти их.

8.43 Получить последовательность десятичных цифр числа 2100.

8.44 Получить последовательность десятичных цифр числа 100! (N!=1*2*3…*N)

8.45 Имеется список учащихся класса с указанием роста каждого из них. Определить, перечислены ли ученики в списке в порядке убывания их роста.

8.46 Дан одномерный массив М из 12 элементов, переставить его элементы следующим способом: M[1], M[12], M[2], M[11], …, M[5], M[8], M[6], M[7].

8.47 Удалить из массива все повторяющиеся элементы, оставив их первые вхождения, т.е. в массиве должны остаться только различные элементы.

8.48 Вставить число Е между всеми соседними элементами, имеющими одинаковый знак.

9. Двумерные массивы.

Вопросы:

Что такое двумерный массив : Как его описать?

Как заполнить двумерный массив ? Приведите примеры заполнения двумерного массива различными способами.

Как вывести двумерный массив на экран ?

9.1 Дан двухмерный массив целых чисел. Составить программу :

а) вывода на экран элемента, расположенного в правом верхнем углу массива;

б) вывода на экран элемента, расположенного в левом нижнем углу массива;

в) вывода на экран любого элемента второй строки массива;

г) вывода на экран любого элемента третьего столбца массива;

д) вывода на экран любого элемента массива.

9.2 Дан двухмерный вещественный массив. Поменять местами :

а) элементы, расположенные в верхнем правом и нижнем левом углах;

б) элементы, расположенные в нижнем правом и верхнем левом углах;

9.3 Известен номер строки, на которой расположен элемент главной диагонали двумерного массива целых чисел. Вывести на экран значение этого элемента.

9.4 Вывести на экран (в одну строку) :

а) все элементы главной диагонали целочисленного массива, начиная с элемента, расположенного в левом верхнем углу;

б) все элементы главной диагонали вещественного массива, начиная с элемента, расположенного в правом нижнем углу.

9.5 Заменить значения всех элементов главной диагонали целочисленного массива на нулевые.

9.6 Заменить значения всех элементов побочной диагонали целочисленного массива на значения, равные 100.

9.7 Определить :

а) сумму элементов главной диагонали вещественного массива;

б) сумму элементов побочной диагонали целочисленного массива;

в) среднее арифметическое элементов главной диагонали массива целых чисел;

г) среднее арифметическое элементов побочной диагонали вещественного массива;

д) минимальный (максимальный) элемент главной диагонали целого массива;

е) максимальный (минимальный) элемент побочной диагонали вещественного массива;

ж) координаты первого максимального элемента главной диагонали вещественного массива;

з) координаты первого минимального элемента главной диагонали целочисленного массива.

9.8 Верно ли, что сумма элементов главной диагонали целочисленного массива не превышает 100?

9.9 Дан двухмерный массив вещественных чисел .

а) вывести на экран все элементы пятой строки массива;

б) вывести на экран все элементы третьей строки массива, начиная с по следнего элемента этой строки;

в) вывести на экран все элементы s-го столбца массива;

г) заменить значения всех элементов второй строки массива на число 5;

д) заменить значения всех элементов пятого столбца на число 10.

е) определить максимальный (минимальный) элемент третьего столбца;

9.10 Дан двухмерный целых чисел массив. Составить программу :

а) расчета произведения двух любых элементов любой строки массива

б) сумму всех элементов любой строки массива;

9.11 Дан двумерный массив целых чисел. Определить :

а) в каком столбце массива сумма элементов меньше, в первом или в последнем;

б) в какой строке произведение элементов больше, во второй или в третьей.

9.12 Заполнить двумерный массив размером 7х7 следующим образом :

а) 1 0 0 0 0 0 1 б) 1 0 0 1 0 0 1

0 1 0 0 0 1 0 0 1 0 1 0 1 0

0 0 1 0 1 0 0 0 0 1 1 1 0 0

0 0 0 1 0 0 0 1 1 1 1 1 1 1

0 0 1 0 1 0 0 0 0 1 1 1 0 0

0 1 0 0 0 1 0 0 1 0 1 0 1 0

1 0 0 0 0 0 1 1 0 0 1 0 0 1

9.13 * Заполнить массив 5х5 следующим образом :

а) 1 1 1 1 1 б) 1 2 3 4 5

1 2 3 4 5 16 17 18 19 6

1 3 6 10 15 15 24 25 20 7

1 4 10 20 35 14 23 22 21 8

1 5 15 35 70 13 12 11 10 9

9.14 *Заполнить двумерный массив размером nxn числами 1, 2, ... n2, расположенным в нем по спирали : (см 9.13б)

9.15 Дан двухмерный целочисленный массив размером 10 х 10. Вывести на экран часть массива :

а) расположенную выше главной диагонали;

б) расположенную ниже главной диагонали;

в) расположенную выше побочной диагонали;

г) расположенную ниже побочной диагонали;

9.16 Дан двумерный массив целых чисел :

а) в каждом его столбце найти максимальный (минимальный) элемент;

б) координаты максимального (минимального) элемента;

в) сумму нечетных элементов в каждом столбце (строке);

г) количество элементов кратных А или В.

д)* найти строку с максимальной суммой элементов;

е)* найти столбец с минимальной суммой элементов.

9.17 Даны два двумерных вещественных массива одинаковых размеров.

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

б) создать третий массив такого же размера, каждый элемент которого равен 100, если соответствующие элементы двух первых массивов имеют одинаковый знак, и равен нулю в противном случае.

9.18 * Дан двухмерный массив размером nxn , заполненный целыми числами.

а) все его элементы, кратные трем, записать в одномерный массив.

б) все его положительные элементы записать в один одномерный массив, а остальные - в другой.

9.19 Дан двухмерный массив целых чисел.

а) сформировать одномерный массив, каждый элемент которого равен сумме четных положительных элементов соответствующего столбца двумерного массива.

б) сформировать одномерный массив, каждый элемент которого равен количеству нечетных отрицательных элементов соответствующего столбца двумерного массива.

в) сформировать одномерный массив, каждый элемент которого равен количеству отрицательных элементов соответствующей строке двухмерного массива, кратных 3 или 7.

г) сформировать одномерный массив, каждый элемент которого равен количеству положительных элементов соответствующего столбца двухмерного массива, кратных 4 или 5.

9.20 * Дан двумерный массив из четного числа столбцов. Поменять местами первый со вторым, третий - с четвертым и т.д.

9.21 Дан двухмерный массив. а) удалить из него k-ую строку, s-ый столбец.

ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ

9.22 Напечатать строку, образованную символами, расположенными в четырех углах символьного массива (в любом порядке).

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

9.24 Дан двумерный массив размером 5х5, заполненный буквами. Напечатать слово, образованное элементами массива, отмеченными звездочкой (*), при прочтении их:

а) слева направо в каждой строке, начиная с первой;

б) сверху вниз в каждом столбце, начиная с первого.

9.25 Напечатать слова, образованные четными элементами каждой строки массива.

9.26 В каждой строке двумерного символьного массива найти количество букв «Е», расположенных справа от буквы «Н»

9.27 Проверить, одинаковые ли строки целочисленного массива с номерами N и М.

9.28 Найти :

а) номер первой по порядку строки целочисленного массива, содержащей наибольшее число цифр;

б) номер первого по порядку столбца символьного массива, содержащего наибольшее число пробелов;

в) номер последней по порядку строки символьного массива, содержащей наибольшее количество букв «Ш» и «Щ».

9.29 Шахматную доску представить в виде квадратного символьного массива размером 8 х 8. Заполнить массив таким образом, чтобы элементы массива, соответствующие черным полям, имели значение Х. Левое нижнее поле на шахматной доске всегда черное.

10. Функции и процедуры.

Вопросы :

Что такое процедура ?

В чем различие между функцией и процедурой ?

Какие виды функций и процедур используются в программах?

Перечислить несколько стандартных функций и процедур.

В каких случаях целесообразно использовать нестандартные функции ?

Как оформляются нестандартные (определенные в программе) функции и процедуры ?

Что такое формальные параметры функции или процедуры ?

Как в программе выполнить функцию или процедуру ?

Что такое фактические параметры функции или процедуры ? Каковы правила их использования ?

Какие преимущества дает использование нестандартных функций и процедур ?

Что такое рекурсия ?

Как оформляется рекурсивная функция или процедура ?

Могут ли рекурсивные вызовы функции или процедуры продолжается бесконечно ? Как должна быть оформлена рекурсивная функция или процедура, чтобы количество рекурсивных вызовов было конечным ?

Функции

10.1 Рассчитать значение х, определив и использовав функцию :

а)

г)

б)

д)

в)

е)

10.2 Определить значение

а) z=max(a,2b)*max(2a-b,b) б) z=min(a,3b)*min(2a-b,b)

где max(x,y), min(x,y) - максимум и минимум из чисел x,y

При решении:1) не использовать функцию max, min.

2) определить и использовать функцию max,min.

10.3 Даны основания и высоты двух равнобедренных трапеций. Найти сумму их периметров. (Определить функцию для расчета периметра равнобедренной трапеции по ее основаниям м высоте.)

10.4 Даны три квадратных уравнения ax2 + bx + c = 0, bx2 + ax + c = 0, cx2 + ax + + b = 0. Сколько из них имеют вещественные корни ? (Определить функцию, позволяющую распознавать наличие вещественных корней в квадратном уравнении.)

10.5 Найти периметр треугольника, заданного координатами своих вершин. (Определить функцию для расчета отрезка по координатам его вершин)

10.6 Даны вещественные числа a, b, c, d, e, f, g.

Найти площадь пятиугольника, изображенного на рисунке. (Определить функцию для расчета площади треугольника по трем сторонам.) е

g d

a f

c

b

10.7 Даны вещественные числа x1, y1, x2, y2,... x5, y5.Найти площадь пятиугольника (см 10.6) вершины которого имеют координаты (x1, y1), (x2, y2), ...( x5, y5). (Определить функцию для расчета площади треугольника по координатам его вершин).

10.8 Даны две последовательности целых чисел : а1, а2,... а8, и b1, b2, ... b8. Найти количество четных чисел в первой из них и количество нечетных вол второй. (Определить функцию, позволяющую распознавать четные числа.)

10.9 Найти значение выражения (2*5! + 3*8!)/(6! + 4!), где n! функция.

10.10 Даны два натуральных числа. Выяснить, в каком из них сумма цифр больше.(сумма цифр - функция).

10.11 Даны n различных чисел. Определить максимальное из них. (Определить функцию, находящую максимум из двух различных чисел.)

10.12 Найти НОД(a,b,c)=НОД(НОД(a,b),c). (где НОД(a,b) - функция.)

10.13 Даны n натуральных чисел. Найти их НОД. (где НОД(a,b) - функция.)

10.14 Написать рекурсивную функцию :

а) вычисления суммы цифр натурального числа;

б) вычисления количества цифр натурального числа.

10.15 Даны первый член и разность арифметической прогрессии. Написать рекурсивную функцию для нахождения :

а) n-го члена прогрессии; б) суммы n первых членов прогрессии.

10.16 Даны первый член и знаменатель геометрической прогрессии. Написать рекурсивную функцию для нахождения :

а) n-го члена прогрессии; б) суммы n первых членов прогрессии.

Процедуры

10.17 Составить программу, в результате которой величина А меняется значением с величиной В, а величина С - с величиной D. (Определить процедуру, осуществляющую обмен значениями двух переменных величин)

10.18 Даны стороны двух треугольников. Найти сумму их периметров и сумму их площадей. (Определить процедуру для расчета периметра и площади треугольника по его сторонам.)

10.19 Даны основания и высоты двух равнобедренных трапеций. Найти сумму их периметров и сумму их площадей (Определить процедуру для расчета периметра и площади равнобедренной трапеции по ее основаниям и высоте)

10.20 Написать рекурсивную процедуру для вывода на экран цифр натурального числа в обратном порядке.

10.21 Написать рекурсивную процедуру для ввода с клавиатуры последовательности чисел и вывода ее на экран в обратном порядке (окончание последовательности - при вводе нуля).

10.22 Написать рекурсивную процедуру перевода натурального числа из десятичной системы счисления в двоичную.

11. Файлы.

Вопросы:

Что такое файл? В чем заключаются особенности текстовых файлов ?

В чем преимущество использования файлов по сравнению с массивами ?

Какие операции можно проводить с файлами ?

Как производится запись в файл ?

Как производится чтение из файла ?

Как получить доступ к элементу файла с заданным номером ?

Как закрыть файл ?

Типизированные файлы

11.1 Какие из следующих описаний неправильные и почему ?

а) VAR f: Fail Of Real; б) TYPE ff: file Of Integer;

f1, f2: File Of Char; gg: file Of bolean;

VAR f: ff; g: gg;

в) TYPE ff=file of file;

VAR f1, f2 : ff;

11.2 Какие из следующих операторов правильные ?

а) Assign(f1,’a:str1.dat’); б) Reset(f1,f2);

в) Rewrite; г) Assign(f2.’c: t ab1.dat’) д) Rewrite(f1);

11.3 Создать файл и записать в него :

а) 5 одинаковых целых чисел;

б) 5 одинаковых вещественных чисел;

в) 5 одинаковых слов.

11.4 Дан массив из двадцати вещественных чисел. Записать все числа массива в файл в том же порядке.

11.5 Дано предложение. Записать каждый из его символов в файл.

11.6 В конец существующего файла записать : а) число 0; б) любую фразу.

11.7 Имеется файл с числами. Изменить все его элементы, порядковый номер которых кратен трем. Новые значения вводятся с клавиатуры. Рассмотреть два варианта :

а) известно, что в существующем файле записаны 20 чисел;

б) размер существующего файла неизвестен.

11.8 Дан файл, элементами которого являются числа. Напечатать :

а) первый элемент; б) третий элемент;

в) к-й элемент; г) последний элемент

11.9 Дан файл, элементами которого являются отдельные слова. Напечатать

а) первый элемент; б) третий элемент;

в) к-й элемент; г) последний элемент

11.10 Имеется файл с числами. Напечатать все его элементы с нечетными порядковыми номерами. Рассмотреть два варианта :

а) известно, что в существующем файле записаны 20 чисел;

б) размер существующего файла неизвестен.

11.11 Имеется файл, в котором записаны 12 вещественных чисел. Переписать все числа файла в массив в том же порядке.

11.12 Имеется файл, элементами которого являются отдельные буквы.. Получить слово, образованное этими буквами.

11.13 Имеется файл, в котором записаны 18 целых чисел. Переписать все положительные числа файла в массив в том же порядке.

11.14 Имеется файл, элементами которого являются отдельные буквы. Получить слово, образованное элементами файла, имеющими четный порядковый номер.

Текстовые файлы.

11.15 Создать текстовый файл и записать в него фразу «Здравствуй, мир!».

11.16 Создать текстовый файл и записать в него 5 одинаковых строк. Записываемая строка вводится с клавиатуры.

11.17 Создать текстовый файл и записать в него 6 строк. Записываемые строки вводятся с клавиатуры.

11.18 Дан массив строк. Записать их в файл, расположив каждый элемент массива на отдельной строке с сохранением порядка.

11.19 Имеется текстовый файл. Найти :

а) количество строк, начинающихся с букв «А» или «а»;

б) в которых имеется ровно 5 букв «и».

11.20 Имеется текстовый файл, в каждой строке которого первые два символа являются буквами. Получить:

а) слово, образованное первыми буквами каждой строки;

б) слово, образованное вторыми буквами каждой строки;

в) последовательность символов, образованную s-ми символами каждой строки.

11.21 Имеется текстовый файл. Переписать его строки в другой файл. Порядок строк во втором файле должен :

а) совпадать с порядком строк в заданном файле;

б) быть обратным по отношению к порядку строк в заданном файле.

11.22 Имеется текстовый файл. Переписать его строки в перевернутом виде в другой файл. Порядок строк во втором файле должен:

а) совпадать с порядком строк в заданном файле;

б) быть обратным по отношению к порядку строк в заданном файле.

11.23 Имеется текстовый файл. Получить текст, в котором в конце каждой строки из заданного файла добавлен восклицательный знак.

11.24 Имеются два текстовых файла с одинаковым числом строк. Выяснить, совпадают ли их строки. Если нет, то получить номер первой строки, в которой эти файлы отличаются друг от друга.

12. Графика.

12.1 Написать программу, которая сообщает пользователю: «Я умею рисовать отрезок». Запрашивает: «Введите координаты начала и конца отрезка» и рисует отрезок с соответствующими координатами.

12.2 Построить рисунок лодочки.

12.3 Написать программу, которая рисует концентрические окружности.

12.4 Нарисуйте радугу, т.е. разноцветные дуги концентрических окружностей опирающихся на нижнюю границу экрана.

12.5 Написать программу, которая запрашивает координаты центра окружности, ее радиус и рисует закрашенный круг, соответствующий введенным величинам.

12.6 Написать программу, которая рисует лучи исходящие из левого нижнего угла экрана.

12.7 В верхнем левом углу экрана нарисовать солнышко.

12.8 Написать программу, которая рисует произвольную ломанную линию.

12.9 Написать программу, рисующую произвольный бегущий отрезок.

12.10 Написать программу, которая рисует эллипсы.

12.11 Составить программу построения квадрата. На одном из его оснований построить равносторонний треугольник со сторонами произвольной длины.

12.12 Построить ромб со стороной А и острым углом х.

12.13 Изобразите на экране движение точки по окружности.

12.14 «Нарисуйте» часы и «заставьте их «ходить».

12.15 Составить программу построения отрезка штриховой прямой линии, ограниченного точками с координатами А(X,Y) B(X,Y). Размеры штриха и интервала между штрихами возьмите равными. Исходные данные: значения координат точек и размер штриха введите с клавиатуры.

12.16 Изобразите на экране таяние горящей свечи.

12.17 Составить программу рисования спирали.

12.18 Составить программу вычерчивания графиков следующих функций:

а) y=sinx б) y=tgx в) y=cosx г) y=ax+b д) y=ex е) y=logx

12.19 Нарисуйте горизонтальные(вертикальные) линии длиной L располагая их по всей плоскости экрана на расстоянии d.

12.20 Расчертите на клеточки со стороной a весь экран.

в)

б)

12.21 Нарисуйте :

а)

д)

г)

е)

ж)

13. Массивы величин типа запись

13.1 Фамилии и имена 25 учеников класса записаны в двух различных таблицах. Напечатать фамилию и имя каждого ученика на отдельной строке.

13.2 Названия 20 футбольных клубов и городов, которые они представляют, записаны в двух различных таблицах. Напечатать название и город каждого клуба на отдельной строке.

13.3 Даны названия 26 городов и стран, в которых они находятся. Среди них есть города, находящиеся в Италии. Напечатать их названия.

13.4 Известны данные о 16 сотрудниках фирмы: фамилия и отношение к воинской службе (военнообязанный или нет). Напечатать фамилии всех военнообязанных сотрудников.

13.5 Известны данные о мощности двигателя (в л.с.) и стоимость 30 легковых автомобилей. Определить общую стоимость автомобилей, у которых мощность двигателя превышает 100 л.с.

13.6 Известны данные о цене и тираже каждого из 15 журналов. Найти среднюю стоимость журналов, тираж которых меньше 10000 экземпл.

13.7 Известны данные о массе и объеме 30 чел, изготовленных из различных материалов. Определить максимальную плотность материала тел.

13.8 Известны вес, пол, рост каждого из 22 человек. Найти общую массу и средний рост мужчин.

13.9 Известно количество очков, набранных каждой из 20 команд - участниц первенства по футболу. Ни одна пара команд не набрала одинакового количества очков.

а) Определить название команды, ставшей чемпионом.

б) Определить названия команд, занявших второе и третье места.

в) Определить названия команд, занявших первое и второе места, не используя при этом двух операторов цикла (два прохода по массиву).

г) Вывести названия команд в соответствии с занятыми ими местами в чемпионате.

13.10 Известны оценки каждого из 25 учеников класса по десяти предметам. Найти фамилию одного из учеников :

а) имеющих наибольшую сумму оценок;

б) имеющих наименьшую сумму оценок.

13.11 Известны баллы, набранные каждым из 20 спортсменов-пятиборцев в каждом из пяти видов спорта. Определить фамилию спортсмена - победителя соревнований.

13.12 Известны данные о 20 учениках класса: фамилии, имена, отчества, даты рождения (год, номер месяца и число). Определить, есть ли в классе ученики, у которых сегодня день рождения, и если да, то напечатать имя и фамилию каждого.

14. Множества

14.1 Дана непустая последовательность символов. Построить и напечатать множества, элементами которых являются встречающиеся в тексте:

• цифры от ‘0’ до ‘9’ и знаки арифметических операций;

• буквы от ‘A’ до ‘F’ и от ‘X’ до ‘Z’;

• знаки препинания и буквы от ‘E’ до ‘N’.

14.2 Вывести в алфавитном порядке элементы множества, составленного из произвольных букв от ‘A’ ....’Z’.

14.3 Составить программу печати в возрастающем порядке всех цифр, входящих в десятичную запись данного числа..

14.4 Дан текст. Вывести в алфавитном порядке все буквы текста, входящих в него : а) не менее двух раз; б)не более двух раз; в) более двух раз.

14.5 Дан текст. Подсчитать количество строчных и прописных букв.

14.6 Составить программу подсчета общего количества цифр и знаков ‘+’, ‘-‘, ‘*’ в строке s, введенной с клавиатуры.

14.7 Задано множество вычислительных машин. Известен набор машин, имеющих в каждом из 10 техникумов. Построить и распечатать множества, включающие в себя вычислительные машины :

а) которыми обеспечены все техникумы;

б) которые имеет хотя бы один техникум;

в) которых нет ни в одном техникуме.

14.8 Составить программу формирования множества строчных латинских букв, входящих в строку, введенную с клавиатуры, и подсчета количества знаков препинания в ней.

14.9 Написать программы решения ребусов :

а) ЛОБ + ТРИ = САМ, б) ИСК + ИСК = КСИ,

в) ТОЧКА + КРУГ = КОНУС г) VOLVO + FIAT = MOTOR,

д) АВ + ВС + СА = АВС.

14.10 Дана не пустая последовательность символов. Напечатать количество вхождений в данную последовательность заглавных латинских букв ‘A’, ‘B’, ‘C’.

14.11 Вывести на экран все простые числа от 11 до 101.

15. Прикладные задачи

15.1 Вычислить методом Монте-Карло:

а) площадь криволинейной трапеции на интервале [-/2, /2] для f(x)=cosx,

б) площадь фигуры, ограниченной квадратной параболой y=x2, осью абсцисс и прямой x=2.

15.2 Составьте программы нахождения приближенного нахождения корней уравнения методом половинного деления с построением графиков функций

а) sinx=1-x б) cosx=x2 в) cosx=sin2x г) cosx=x2-1 д) x3=8 е) x5=32

15.3 Написать программу исследования сходимости приближений с их выводом на экран для различных x и .

а) квадратных корней; б) корней третьей степени;

в) корней пятой степени; г) корней n-ой степени.

15.4 Дано число x. Вычислить приближенное значение x с точностью  с помощью метода последовательных приближений: y0=x/2,

yi=(yi-1 + x/yi-1)/2, i>=1. Вычисления вести до тех пор, пока |yi – yi-1|<.

15.5 Дано х. Вычислить приближенное значение sinX с точностью , пользуясь формулой : sinx  x – x3/3! + x5/5! – x7/7! +…+ (-1)n x2n+1/(2n+1)!

Считать известным, что точность  будет достигнута, когда

|x2n+1/(2n+1)!|< 

15.6 Дано х. Вычислить приближенное значение ех по формуле :

ex  1 + x + x2/2! + x3/3! + … + xn/n! Вычисление вести пока очередное слагаемое не станет меньше .

15.7 Вычислите бесконечную сумму с заданной точностью  (>0). Считать, что требуемая точность достигнута, если вычислена сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем , - это и все последующие слагаемые можно уже не учитывать. Вычислить:

а) б) в) г)

15.8 Вычислите приближенно значение площади криволинейной трапеции на интервале [c, d] для , используя методы прямоугольников и трапеций.

15.9 Найти все корни уравнений с заданной точностью 0,001 :

а) 10х3 – 8х +1 = 0 б) 2х3 + 3х2 – 12х – 8 = 0 в) х5 – х – 0,2 = 0

15.10 Квадратное уравнение ax2+bx+c=0 задается своими коэффициентами. На писать программу нахождения корней квадратного уравнения.

15.11 Делится ли число 21997 + 3 на 7 ?

15.12 Найти ближайшее число к которое делится на 5.

16. Олимпиадные задачи

16.1 Эксперимент был начат в a часов b минут c секунд и закончен в d часов e минут f секунд. Составьте программу вычисления продолжительности проведения эксперимента и вывода на экран результатов, если продолжительность эксперимента менее 24 часов.

Например:

Начало 7 час 10 мин 0 сек

Конец 13 час 5 мин 10 сек

Продолжительность 5 час 55 мин 10 сек

16.2 С клавиатуры вводится координаты трех точек на плоскости. Программа должна проверить, являются ли эти точки вершинами прямоугольника со сторонами, параллельными координатным осям, и если да, выдать координаты четвертой вершины,

16.3 C клавиатуры вводятся две строки символов. Программа должна найти одинаковую подстроку максимальной длины.

Пример 1. Пример 2.

первая строка: казнить нельзя помиловать каша

вторая строка: отменить невозможно суп

общая подстрока: нить не отсутствует

16.4 Шарики по очереди бросают в устройство, схема которого приведена на рисунке.

Попадая в "воронку", шарик продолжает путь, изменив положение "заслонки". Составьте программу, которая по номеру шарика N определяет, в какой отсек 8, 9, ..., 15 он попадет.

16.5 В районе железной дороги есть два населенных пункта A и B. Требуется выбрать на железной дороге место для строительства станции C так, чтобы сумма расстояний AC и BC была наименьшей.

Считать, что известны координаты (XA,YA) и (XB,YB), а железная дорога идет по оси Ox.

16.6 Для натурального числа n напечатать все представления его в виде произведения трех натуральных чисел (сомножители располагаются в порядке неубывания).

Например, если n =10, то ответ 10 =1*1*10 = 1*2*5.

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

Например Первая строка Вторая строка Ответ

Насос сосна да

Нанос сосна нет

16.8 Для двух строк, введенных с клавиатуры, проверить возможность получения первой из них из второй путем вычеркивания нескольких символов.

Например

Первая строка Вторая строка Ответ

насос сосна нет

нос насос да

16.9 Номер автобусного билета состоит из шести цифр. Требуется, группируя цифры в числа и расставляя между ними знаки арифметических операций + или -, получить число 100.

Задание. Написать программу, которая для заданного номера билета выводит все возможные варианты решения или выдает сообщение о невозможности такового.

Пример:

вход: 475642, вывод: 47+5+6+42=100;

вход: 475342, вывод: нет решения.

16.10 “Электронная сваха”.

Имеется несколько женихов и невест. Каждый жених знаком с несколькими невестами. Ваша программа “Электронная сваха” должна найти максимальное количество пар знакомых, между которыми могут быть заключены браки, при условии, что каждый жених может жениться не более чем на одной невесте и каждая невеста может выйти замуж не более чем за одного жениха.

Например, задано 5 пар:

(1,1) — 1-й жених знаком с 1-й невестой,

(1,2) — 1-й жених знаком с 2-й невестой,

(1,3) — 1-й жених знаком с 3-й невестой,

(2,1) — 2-й жених знаком с 1-й невестой,

(3,1) — 3-й жених знаком с 1-й невестой,

Максимальное число пар равно 2, например (1,2) и (2,1).

Программа должна:

— запросить число пар,

— запросить пары,

— найти и вывести пары, удовлетворяющие условию задачи.

16.11 Слово можно зашифровать последовательностью цифр чисел, указывающих место в русском алфавите его составляющих букв. Для введенного с клавиатуры слова напечатать его шифр и самое длинное слово, которое имеет тот же шифр. (Для справки приведем порядок букв в русском алфавите: абвгдеёжийклмнопрстуфхцчшщъыьэюя)

Например:

яблоко.

Шифр: 33213161216.

Такой же шифр имеет слово ( самое длинное ): ввбаваеабае.

16.12 Напечатать в порядке возрастания n первых натуральных чисел, каждое из которых не имеет иных простых делителей кроме 2, 3 и 5. Например, для n=15 должны быть напечатаны числа:

1, 2, 3, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25.

16.13 Квадратная таблица NxN заполнена целыми числами. Преобразовать таблицу следующим образом: все нулевые элементы каждого столбца переместить вверх этого столбца, ненулевые вниз, но без изменения их порядка следования в столбце.

Например:

Исходная таблица Итоговая таблица

1 1 0 8 0 3 0 0 0 0 0 3

0 0 0 0 5 7 0 0 0 0 0 7

2 0 0 0 6 9 0 0 0 0 0 9

0 1 0 0 0 5 1 0 0 0 0 5

0 0 0 0 0 6 2 1 0 8 5 6

3 0 0 4 0 7 3 1 0 4 6 7

16.14 “Диагонали”.

Вершины выпуклого n-угольника занумерованы в порядке обхода по часовой стрелке. По запросу с клавиатуры вводится n и две пары номеров вершин двух диагоналей. Пересекаются ли они?

Пример:

n=24, первая диагональ — 7 и 13, вторая диагональ 24 и 4. Ответ: не пересекаются.

16.15 “Палиндром”.

Для введенного с клавиатуры натурального числа n определить является ли его запись в двоичной системе счисления палиндромом (числом-перевертышем).

Примеры:

n=843 — палиндром (11010010112),

n=844 — не является палиндромом (11010011002).

16.16 “Книги”.

Имеется несколько произведений одного писателя, для каждого из них известен объем (число страниц). Для издания сочинений автора в шести томах их надо сгруппировать так, чтобы при сохранении порядка следования произведений объемы самого толстого и самого тонкого тома различались как можно меньше.

Программа должна:

— обеспечить ввод числа произведений;

— обеспечить ввод числа страниц для каждого произведения;

— найти требуемую группировку произведений;

— вывести объем и состав каждого тома.

Пример:

Число произведений — 10

Количество страниц — 45, 100, 77, 70, 143, 45, 45, 55, 144, 145.

Том 1: 45+100=145

Том 2: 77+70=147

Том 3: 143=143

Том 4: 45+45+55=145

Том 5: 144=144

Том 6: 145=145

Разность — 4

16.17 “Ход конем”.

Для введенных с клавиатуры начального и конечного положения коня на шахматной доске указать один из возможных маршрутов перевода коня.

Пример:

Начальное положение — b2

Конечное положение — b1

Маршрут — b2 — c4 — a3 — b1

16.18 “Пары цифр”.

Дано n-значное натуральное число, где 2 n 80 Определить количество различных рядом стоящих пар цифр в этом числе и сами эти пары.

Пример:

Исходное число — 2102100312134

Различных пар цифр — 9

А именно — 21,10,02,00,03,31,12,13,34.

16.19 «Число»

Из цифр длинного (до 80 цифр) натурального числа, введенного с клавиатуры, образуют перестановкой цифр наименьшее возможное правильное (не начинающееся с цифры 0) число. Составить программу, которая выводит его на экран.

Пример: Исходное число 9876543210864219375

Ответ 1012233445566778899

16.20 «Параллелограмм». По введенным с клавиатуры координатам (целым числам) точек M, N и К вывести на экран координаты вершин параллелограмма ABCD (возможно вещественные числа), для которого М середина стороны АВ, N – BC, K- AD, или сообщить, что такого параллелограмма не существует. Пример: координаты М – (1,2), N – (5,4), К – (3,0). Ответ: А(0,0), B(2,4), C(8,4), D(6,0).

16.21 “Разность”. Для введенных с клавиатуры двух натуральных чисел (уменьшаемого и вычитаемого) найти разность. Каждое из них может иметь в записи до 100 цифр.

Пример 1. Пример 2.

Уменьшаемое 6543211234567890 333333333333

Вычитаемое 333333333333 6543211234567890

Разность 6542877901234557 -6542877901234557

16.22 “Таблица”. Квадратная таблица 3х3 заолнена числами 1 и 0. За один ход разрешается выбрать одну из строк (или один из столбцов) и заменить в выбранной строке (в столбце) каждый из элементов на противоположный (0 на 1, а 1 на 0). Играющий стремится сделать несколько ходов так, чтобы в итоге в таблице осталось как можно меньше чисел 1.

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

Пример 1. Пример 2.

1 1 1 1 1 1

0 1 0 0 1 0

1 0 1 0 1 1

Минимальное Минимальное

Число единиц: 1 число единиц: 2

Примечание. Первая результат может быть получен так: 1-ая строка, 3-

ья строка, 2-ой столбец, второй: 1-ая строка, 1-ый столбец.

16.23 “Число” Задано натуральное число А. Найти количество натуральных чисел, не превышающих А и не делящихся ни на одно из чисел 2,3,5.

Пример:

Исходное число 2001

Вывод:

Искомое количество 534

16.24 “Даты” Строка содержит 8 символов (шесть цифр и две точки) и представляет собой значение даты в форме: “дд.мм.гг” от 01.01.85 до 31.12.00. Отсортировать по убыванию значений даты одномерный массив, состоящий из таких дат.

Пример:

Число элементов массива 7

Элементы массива до сортировки

02.11.85, 22.02.00, 13.12.87, 24.01.99, 11.11.88, 11.11.98, 29.11.85

Вывод:

Элементы массива после сортировки

22.02.00, 24.01.99, 11.11.98, 11.11.88, 13.12.87, 29.11.85, 02.11.85

16.25 Найти наименьшее натуральное число, пятая степень которого оканчивается тремя одинаковыми ненулевыми цифрами.

16.26 Написать программу, которая по числу N находит все возможные способы расстановки одного белого, двух синих и N черных кругов в ряд. Программа должна вывести каждый из возможных вариантов в текстовом представлении с указанием номера расстановки.

Например: при N=2

1: БССЧЧ 2: БСЧСЧ 3: БСЧЧС … 30: ЧЧССБ

Всего способов расстановки – 30 .

4.1.3 Алгоритмы нахождения наибольшего или наименьшего элемента массива и его индекса

Задача 1. Дан массив K, состоящий из 45 элементов. Элементы массива - произвольные целые числа. Определить минимальный элемент массива и его индекс.

USES Crt;

VAR

K:ARRAY[0..45] OF INTEGER;

I,IND: BYTE; MIN:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO 45 DO Begin

K[I]:=Random(35)+6; Write(K[I]:3);

End; WriteLn;

MIN:=K[1]; IND:=1;

{ нахождение минимального значения и его индекса }

FOR I:=2 TO 45 DO

IF K[I]

WriteLn(' Минимальное значение = ',MIN);

WriteLn(' Индекс минимального значения = ',IND);

END.

Задача 2. Дан массив B, состоящий из N элементов. Элементы массива - произвольные целые числа. Определить сумму элементов, расположенных до максимального элемента массива.

USES Crt;

CONST N=20;

VAR

B:ARRAY[0..N] OF INTEGER;

I,IND: BYTE; MAX,S:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

B[I]:=Random(35); Write(B[I]:3);

End; WriteLn;

MAX:=B[1]; IND:=1;

{ нахождение максимального значения и его индекса }

FOR I:=2 TO N DO

IF B[I]>MAX THEN Begin MAX:=B[I]; IND:=I; End;

WriteLn(' Максимальное значение = ',MAX);

{ нахождение суммы элементов, расположенных до максимального элемента }

S:=0;

FOR I:=1 TO IND-1 DO

S:=S+B[I];

WriteLn(' Cумма элементов, расположенных до максимального элемента =',S);

END.

Задача 3. Дан массив A, состоящий из N элементов. Элементы массива - произвольные целые числа. Заменить нулями все элементы массива, расположенные за минимальным элементом массива. Измененный массив вывести на экран.

USES Crt;

CONST N=15;

VAR

A:ARRAY[0..N] OF INTEGER;

I,IND: BYTE; MIN:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

A[I]:=Random(400); Write(A[I]:4);

End; WriteLn;

MIN:=A[1]; IND:=1;

{ нахождение минимального значения и его индекса }

FOR I:=2 TO N DO

IF A[I]

WriteLn(' Минимальное значение = ',MIN);

{ замена нулями элементов, расположенных за минимальным значением }

FOR I:=IND+1 TO N DO

A[I]:=0;

WriteLn(' Измененный массив');

FOR I:=1 TO N DO

Write(A[I]:4);

END.

Задача 4. Дан массив A, состоящий из N элементов. Элементы массива - произвольные целые числа. Заменить нулями все элементы массива, расположенные между минимальным и максимальным элементами массива, кроме их самих. Измененный массив вывести на экран.

USES Crt;

CONST N=15;

VAR

A:ARRAY[0..N] OF INTEGER;

I, IMIN, IMAX, k1, k2: BYTE; MIN, MAX:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

A[I]:=Random(270); Write(A[I]:4);

end; WriteLn;

MIN:=A[1]; MAX:=A[1]; IMIN:=1; IMAX:=1;

{ нахождение минимального и максимального значения и их индексов }

FOR I:=2 TO N DO Begin

IF A[I]

IF A[I]>MAX THEN Begin MAX:=A[I]; IMAX:=I; End;

End;

WriteLn(' Минимальное значение = ',MIN);

WriteLn(' Максимальное значение = ',MAX);

{ замена нулями элементов, расположенных между минимальным и максимальным

значением }

IF IMIN

ELSE Begin K1:=IMAX+1; K2:=IMIN-1; End;

FOR I:=K1 TO K2 DO

A[I]:=0;

WriteLn(' Измененный массив');

FOR I:=1 TO N DO

Write(A[I]:4);

END.

Задача 5. Дан массив чисел. Найти наибольший элемент, поставить его первым.

USES Crt;

CONST M=100;

VAR

MAS: ARRAY[1..100] OF INTEGER;

I,K,N,NEW: INTEGER;

BEGIN

ClrScr;

Write(' Введите размер массива N= '); ReadLn(N);

{ Заполнение массива с клавиатуры }

FOR I:=1 TO N DO Begin

Write(' Введите ',I,' элемент массива '); ReadLn(MAS[I]);

End;

NEW:=MAS[N]; K:=N;

{ Нахождение наибольшего элемента и его индекса }

FOR I:=N DOWNTO 1 DO

IF MAS[I]>NEW THEN Begin NEW:=MAS[I]; K:=I; End;

{ Перестановка местами первого и наибольшего элементов }

MAS[K]:=MAS[1]; MAS[1]:=NEW;

WriteLn(' Измененный массив');

FOR I:=1 TO N DO

Write(MAS[I]:4);

END.

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

USES Crt;

VAR

MAS: ARRAY[1..12] OF REAL;

I: INTEGER; MIN,MAX:REAL;

BEGIN

ClrScr;

{ Заполнение массива с клавиатуры }

FOR I:=1 TO 12 DO Begin

Write(' Введите среднюю температуру за ',I,' месяц '); ReadLn(MAS[I]);

End;

MAX:=MAS[6]; MIN:=MAS[12];

{ Определение самой высокой температуры летом }

FOR I:=7 TO 8 DO

IF MAX

{ Определение самой низкой температуры зимой }

FOR I:=1 TO 2 DO

IF MIN>MAS[I] THEN MIN:=MAS[I];

WriteLn(' Самая высокая температура летом ',MAX);

WriteLn(' Самая низкая температура зимой ',MIN);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Дан массив чисел. Найти значение максимального элемента. Если таких элементов несколько, то определить, сколько их.

2. Дан массив чисел. Найти среднее арифметическое максимального и минимального элемента. Вывести значения и индексы этих элементов.

3. Дан массив чисел. Определить количество элементов, находящихся в интервале от1 до 12 и расположенных до максимального элемента массива.

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);

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. Из текста удалить все слова, начинающиеся и оканчивающиеся на одну и ту же букву.

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;

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, заполненный случайным образом.

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

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

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

• Заменить максимальный элемент каждой строки на противоположный.

4.1.2 Алгоритмы нахождения суммы, произведения и количества элементов массива. Работа с индексами элементов массива

Задача 1. Определить сумму элементов массива Р(n), значения которых > заданного Т

USES Crt;

CONST N=30;

VAR

P:ARRAY[0..N] OF INTEGER;

I,T:BYTE; S:INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение массива случайными числами }

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

P[I]:=Random(30); Write(P[I]:3);

End; WriteLn;

Write(' Введите значение переменной '); ReadLn(T);

S:=0;

FOR I:=1 TO N DO

IF P[I]>T THEN S:=S+P[I]; { сумма элементов массива > T }

WriteLn(' Сумма элементов массива > заданного значения = ',S);

END.

Задача 2. Дан массив целых чисел, состоящий из 25 элементов. Подсчитать сумму элементов массива, произведение положительных и количество нулевых элементов. Результат вычисления вывести на экран.

USES Crt;

VAR

A:ARRAY[0..25] OF INTEGER;

I: BYTE; S,K: INTEGER; P: REAL;

BEGIN

ClrScr; Randomize;

{ Заполнение массива случайными числами }

WriteLn(' Значения элементов массива');

FOR I:=1 TO 25 DO Begin

A[I]:=Random(10)-3; Write(A[I]:3);

End; WriteLn;

S:=0; K:=0; P:=1;

FOR I:=1 TO 25 DO Begin

S:=S+A[I]; { сумма элементов массива }

IF A[I]>0 THEN P:=P*A[I]; { произведение положительных элементов массива }

IF A[I]=0 THEN K:=K+1; { количество нулевых элементов массива }

End;

WriteLn(' Сумма элементов массива = ',S);

WriteLn(' Произведение положительных элементов массива = ',P:0:0);

WriteLn(' Количество нулевых элементов массива = ',K);

END.

Задача 3. Дан массив четных чисел, состоящий из 15 элементов. Заполнить его с клавиатуры. Найти:

• сумму элементов, имеющих нечетные индексы;

• подсчитать количество элементов массива, значения которых больше заданного числа T и кратны 5;

• номер первого отрицательного элемента, делящегося на 5 с остатком 2.

USES Crt;

CONST T=11;

VAR

A:ARRAY[0..15] OF INTEGER;

I,NP,FL: BYTE; S,K: INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение массива с клавиатуры }

FOR I:=1 TO 15 DO Begin

Write('Введите ',I,' злемент массива '); ReadLn(A[I]);

End; WriteLn;

S:=0; K:=0; FL:=0;

FOR I:=1 TO 15 DO Begin

IF I mod 2 =0 THEN S:=S+A[I]; { сумма элементов, имеющих четные индексы }

IF (A[I]>T) AND (A[I] mod 5 =0) THEN K:=K+1; { количество }

IF (A[I]<0) AND (A[I] mod 5 =-2) AND (FL=0) THEN Begin NP:=I; FL:=1; End;

End;

WriteLn(' Сумма элементов,имеющих четные индексы = ',S);

WriteLn(' Количество элементов, значения которых > ',T,' и кратны 5 = ',K);

WriteLn(' Номер первого отрицательного элемента, делящегося на 5 с остатком 2 = ',NP);

END.

Задача 4. Дан массив четных чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти:

• сумму положительных элементов, значения которых меньше 10;

• вывести индексы тех элементов, значения которых кратны 5 и 3;

• количество пар соседних элементов с суммой равной заданному числу.

USES Crt;

CONST T=21;

VAR

A:ARRAY[0..10] OF INTEGER;

I: BYTE; S,K: INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение массива с клавиатуры }

FOR I:=1 TO 10 DO Begin

Write('Введите ',I,' злемент массива '); ReadLn(A[I]);

End; WriteLn;

S:=0; K:=0;

WriteLn(' Индексы элементов, значения которых кратны 3 и 5');

FOR I:=1 TO 10 DO Begin

IF (A[I]>0) AND (A[I]<10) THEN S:=S+A[I];

IF (A[I] mod 3 =0) AND (A[I] mod 5 =0) THEN Write(I:3) ;

IF I<>10 THEN IF A[I]+A[I+1]=T THEN K:=K+1;

End; WriteLn;

WriteLn(' Сумма положительных элементов, значения которых < 10 = ',S);

WriteLn(' Количество пар соседних элементов с суммой равной ',T,' = ',K);

END.

Задача 5. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти:

• удвоенную сумму положительных элементов;

• вывести индексы тех элементов, значения которых больше значения предыдущего элемента (начиная со второго);

• количество пар соседних элементов с одинаковыми знаками.

USES Crt;

VAR

A:ARRAY[0..10] OF INTEGER;

I: BYTE; S,K: INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение массива с клавиатуры }

FOR I:=1 TO 10 DO Begin

Write('Введите ',I,' злемент массива '); ReadLn(A[I]);

End; WriteLn;

S:=0; K:=0;

WriteLn(' Индексы элементов, значения которых > значения предыдущего элемента');

FOR I:=1 TO 10 DO Begin

IF (A[I]>0) THEN S:=S+A[I];

IF I<>1 THEN IF A[I] > A[I-1] THEN Write(I:3);

IF I<>10 THEN IF (A[I] * A[I+1])>0 THEN K:=K+1;

End; WriteLn;

WriteLn(' Удвоенная сумма положительных элементов = ',S*2);

WriteLn(' Количество пар соседних элементов с одинаковыми знаками = ',K);

END.

Задача 6. Дан массив C, состоящий из N элементов. Элементы массива - произвольные целые числа. Вывести на экран элементы массива в обратном порядке.

USES Crt;

CONST N=20;

VAR

C:ARRAY[0..N] OF INTEGER;

I: BYTE;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

C[I]:=Random(20); Write(C[I]:3);

End; WriteLn;

WriteLn(' Значения элементов массива в обратном порядке');

FOR I:=N DOWNTO 1 DO

Write(C[I]:3);

END.

Задача 7. Дан массив A, состоящий из N элементов. Элементы массива - произвольные целые числа. Распечатать элементы в две строки: в первой строке элементы с нечетными индексами, а во второй - элементы с четными индексами.

USES Crt;

CONST N=25;

VAR

A:ARRAY[0..N] OF INTEGER;

I: BYTE;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO N DO Begin

A[I]:=Random(20); Write(A[I]:3);

end; WriteLn;

I:=1;

WriteLn(' Элементы с нечетными индексами');

WHILE I<=N DO Begin

Write(A[I]:3); I:=I+2;

End; WriteLn;

I:=2;

WriteLn(' Элементы с четными индексами');

WHILE I<=N DO Begin

Write(A[I]:3); I:=I+2;

End;

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти:

• сумму отрицательных элементов;

• количество тех элементов, значения которых положительны и не превосходят заданного числа А;

• номер последней пары соседних элементов с разными знаками.

2. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти:

• сумму элементов, имеющих нечетное значение;

• вывести индексы тех элементов, значения которых больше заданного числа А;

• количество положительных элементов, кратных К. ( К вводится с клавиатуры ).

3. Дан массив целых чисел, состоящий из N элементов. Определить среднее арифметическое положительных элементов.

4. Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.

5. Оценки, полученные учащимися за урок, занесены в массив. Подсчитать количество «5» и «2», полученных учащимися за урок и средний балл.

6. В очереди за билетами стоят мужчины и женщины. Какое количество мужчин стоит в начале очереди до первой женщины.

4.2.3 Алгоритмы нахождения наибольшего и наименьшего элементов двумерного массива

Задача 1. В соревнованиях по плаванию принимали участие 5 спортсменов. Соревнования состояли из 3 заплывов. Результаты заплывов записали в таблицу размерностью 3х5. Получить одномерный массив размером 3, элементами которого будут лучшие результаты в каждом из заплывов.

USES Crt;

VAR

RZ:ARRAY[0..3,0..5] OF INTEGER; LR:ARRAY[0..3] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; WriteLn;

{ Заполнение таблицы }

FOR I:=1 TO 3 DO Begin

WriteLn(' Введите результаты ',I,' заплыва');

FOR J:=1 TO 5 DO Begin

Write(J,' участник - '); ReadLn(RZ[I,J]);

End;

End; WriteLn;

{ Определение лучшего результата в каждом из заплывов }

FOR I:=1 TO 3 DO Begin

LR[I]:=RZ[I,1];

FOR J:=2 TO 5 DO

IF RZ[I,J]

WriteLn(' Лучший результат ',I,' заплыва = ',LR[I]);

End;

END.

Задача 2. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца.

USES Crt;

VAR

M:ARRAY[0..5,0..6] OF INTEGER; MAX:ARRAY[0..6] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 5 DO Begin

FOR J:=1 TO 6 DO Begin

M[I,J]:=Random(20)-8; Write(M[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Формирование одномерного массива}

WriteLn(' Значения элементов одномерного массива');

FOR J:=1 TO 6 DO Begin

MAX[J]:=ABS(M[1,J]);

FOR I:=2 TO 5 DO

IF ABS(M[I,J]) > MAX[J] THEN MAX[J]:=ABS(M[I,J]);

Write(MAX[J]:3);

End;

END.

Задача 3. Дан двумерный массив размерностью NхM, заполненный случайным образом. Определить, есть ли в данном массиве строка, в которой имеется два элемента массива, имеющие наибольшее значение.

USES Crt;

CONST N=6; M=8;

VAR

A:ARRAY[0..N,0..M] OF INTEGER;

I,J,K,FL:BYTE; MAX:INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO N DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(20); Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Нахождение наибольшего значения }

MAX:=A[1,1];

FOR I:=1 TO N DO

FOR J:=1 TO M DO

IF A[I,J]>MAX THEN MAX:=A[I,J];

WriteLn(' Максимальное значение = ',MAX);

{ Нахождение строки, в которой два элемента имеют наибольшее значение }

FL:=0;

FOR I:=1 TO N DO Begin

K:=0;

FOR J:=1 TO M DO

IF A[I,J]=MAX THEN Inc(K);

IF K=2 THEN Begin WriteLn('В ',I,' строке два элемента имеют наибольшее значение');

FL:=1;

End;

End;

IF FL=0 THEN WriteLn(' Нет строк, в которых два элемента имеют наибольшее значение');

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Дан двумерный массив размерностью 5x7, заполненный случайным образом. Найти наименьший и наибольший элементы двумерного массива, поменять их местами.

2. Дан двумерный массив размерностью NxM, заполненный случайным образом. Получить одномерный массив, элементами которого являются сумма наименьшего и наибольшего элементов соответственной строки двумерного массива.

1)Даны два числа. Вывести на экран то из них, которое больше.

2)Даны три числа. Вывести на экран то из них, которое больше.

3)Дано четырехзначное число. Проверить, является ли оно палиндромом. Примечание: палиндромом называется число, слово или текст, которые одинакового читаются слева направо и справа налево. Например, в нашем случае это числа 1441, 5555, 7117 и т. д.

4)Дано четырехзначное число. Проверить, является ли оно «счастливым билетом». Примечание: счастливым билетом называется число, в котором: а) при четном количестве цифр в числе сумма цифр его левой половины равна сумме цифр его правой половины; б) при нечетном количестве цифр – то же самое, но с отбрасыванием серединной цифры. Например, рассмотрим число 1322. Его левая половина равна 13, а правая – 22, и оно является счастливым билетом (т. к. 1 + 3 = 2 + 2). Аналогично: 1735 (1 + 7 = 3 + 5), 1111 (1 + 1 = 1 + 1) и т. д.

5)Дано число типа byte. Проверить, является ли палиндромом его двоичное представление с учетом того, что сохранены старшие нули. Пример таких чисел: 102 (т. к. 102 = 0110 01102, а это палиндром), 129 (129 = 1000 00012) и т. д.

6)Даны вещественные числа a, b и c, причем a отлично от 0. Решить квадратное уравнение ax2 + bx + c = 0 или сообщить о том, что действительных решений нет.

решения

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;

WriteLn(‘Измененный текст:’); WriteLn(A);

END.

Задача 2. Третье предложение в тексте заключить в скобки.

USES Crt;

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. В тексте во втором предложении после слов «Ура» поставить «!!!».

4. Обработка массивов

4.1 Одномерные массивы

4.1.1 Алгоритмы поиска и присвоения значений элементам массива

Задача 1. Составить программу обработки массива размерностью n, заполненного целыми числами, введенными с клавиатуры. Вывести индексы и значения положительных элементов массива.

USES Crt;

CONST N=10;

VAR

A:ARRAY[0..N] OF INTEGER;

I:BYTE;

BEGIN

ClrScr;

{ Заполнение массива }

FOR I:=1 TO N DO Begin

Write('Введите ',I,' элемент массива '); ReadLn(A[I]);

End;

{ Обработка элементов массива }

FOR I:=1 TO N DO

IF A[I]>0 THEN WriteLn('Положительный элемент = ',A[I],' его индекс = ',I);

END.

Задача 2.Составить программу обработки массива K, состоящего из 20 элементов. Заполнить массив случайными числами в диапазоне от -5 до 25. Все элементы массива К, значения которых находятся в интервале от -2 до 20 возвести в квадрат. Измененный массив вывести на экран.

USES Crt;

VAR

K:ARRAY[0..20] OF INTEGER;

I:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение массива случайными числами }

FOR I:=1 TO 20 DO Begin

K[I]:=Random(30)-5; Write(K[I]:3);

End; WriteLn;

FOR I:=1 TO 20 DO

IF (K[I] -2) THEN K[I]:=K[I]*K[I];

WriteLn('Измененный массив');

FOR I:=1 TO 20 DO

Write(K[I]:4);

END.

Задача 3. Составить программу вычисления и печати значений функции Y=sin(x-1)/2x. Значения аргументов задать в массиве X, состоящего из 6 элементов. Значения функции записать в массив Y.

USES Crt;

VAR

X,Y:ARRAY[0..6] OF REAL;

I: BYTE;

BEGIN

ClrScr;

FOR I:=1 TO 6 DO Begin

Write('Введите ',I,' значение аргумента '); ReadLn(X[I]);

End;

FOR I:=1 TO 6 DO Begin

Y[I]:=SIN(X[I]-1)/(2*X[I]);

WriteLn(' X= ',X[I]:4:1,' Y=',Y[I]:5:2);

End;

END.

Задача 4. Дан массив M, состоящий из 30 элементов. Элементы массива - произвольные целые числа. Выдать на экран значение каждого пятого и положительного элемента. Указанные элементы выдать в строку.

USES Crt;

VAR

M:ARRAY[0..30] OF INTEGER;

I: BYTE;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO 30 DO Begin

M[I]:=Random(20)-4; Write(M[I]:3);

End; WriteLn;

I:=5;

WriteLn(' Значения каждого пятого и положительного элемента массива');

While I<=30 DO Begin

IF M[I] > 0 THEN Write(M[I]:3);

I:=I+5;

End;

END.

Задача 5.Из элементов массива Р сформировать массив М той же размерности по правилу: если номер четный, то М[I]=I*P[I],если нечетный, то M[I]=-P[I].

USES Crt;

CONST N=15;

VAR

P, M: ARRAY[0..N] OF INTEGER;

I: BYTE;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива ');

FOR I:=1 TO N DO Begin

P[I]:=Random(70); Write(P[I]:3);

End; WriteLn;

WriteLn(' Значения элементов сформированного массива M');

FOR I:=1 TO N DO Begin

IF I mod 2 =0 Then M[I]:=P[I]*I Else M[I]:=-P[I];

Write(M[I]:4);

End;

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Дан одномерный массив размерностью 10, заполненный целыми числами, введенными с клавиатуры, и величина N. Отрицательные элементы заменить на N. Измененный массив вывести на экран одной строкой.

2. Дан одномерный массив размерностью N, заполненный случайными числами в интервале от -15 до 20. Вывести на экран значения элементов массива, абсолютное значение которых >10.

3. Дан одномерный массив размерностью N, заполненный случайными числами. Каждый третий элемент массива возвести в квадрат, если элемент отрицательный. Измененный массив вывести на экран.

4. Составить программу вычисления и печати значений функции Y=(sinx+1)cos4x. Значения аргументов задать в массиве X, состоящего из 10 элементов. Значения функции записать в массив Y.

5. Заменить первые К элементов массива на противоположные по знаку.

6. Из элементов массива А, состоящего из 25 элементов, сформировать массив D той же размерности по правилу: первые 10 элементов находятся по формуле Di=Ai+i, остальные - по формуле Di=Ai-i.

4.1.4 Алгоритмы удаления, вставки и перестановки элементов

Задача 1. Дан массив A, состоящий из 12 элементов. Элементы массива - произвольные целые числа. Поменять местами значения 1 и 2 элементов, 3 и 4 и т.д. Измененный массив вывести на экран.

USES Crt;

VAR

A:ARRAY[0..12] OF INTEGER;

I: BYTE; PP:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива');

FOR I:=1 TO 12 DO Begin

A[I]:=Random(20); Write(A[I]:3);

End; WriteLn;

I:=1;

WHILE I<=12 DO Begin

{перестановка элементов местами, используя промежуточную переменную PP }

PP:=A[I]; A[I]:=A[I+1]; A[I+1]:=PP;

I:=I+2;

End;

WriteLn(' Значения элементов измененного массива');

FOR I:=1 TO 12 DO

Write(A[I]:3);

END.

Задача 2. Дан массив целых чисел из 15 элементов, заполненный случайным образом числами из промежутка [-20,50].

1. Удалить из него все элементы, в записи которых есть цифра 5.

2. Вставить число K после всех элементов, кратных своему номеру (К вводится с клавиатуры).

3. Поменять местами первый положительный и последний отрицательный элементы.}

USES Crt;

VAR

P,P1:ARRAY[0..15] OF INTEGER; P2:ARRAY[0..30] OF INTEGER;

I,J,E,D,PP,PO,FL: BYTE; K,PRP:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов массива P');

FOR I:=1 TO 15 DO Begin

P[I]:=Random(70)-20; Write(P[I]:4);

End; WriteLn;

J:=1;

{ 1. Удаление }

FOR I:=1 TO 15 DO Begin

E:=ABS(P[I]) mod 10; {Выделение единиц}

D:=ABS(P[I]) div 10; {Выделение десятков}

{ формирование нового массива }

IF (E<>5) AND (D<>5) THEN Begin P1[J]:=P[I]; J:=J+1; End;

End;

WriteLn(' Массив, в котором нет элементов с цифрой 5');

FOR I:=1 TO J-1 DO

Write(P1[I]:4);

WriteLn;

{ 2. Вставка }

Write(' Введите значение переменной '); ReadLn(K);

J:=1;

FOR I:=1 TO 15 DO Begin

P2[J]:=P[I]; J:=J+1;

IF ABS(P[I]) mod I = 0 THEN Begin P2[J]:=K; J:=J+1; End;

End;

WriteLn(' Массив, в котором после элементов, кратных своему номеру, вставлено число =',K);

For I:=1 TO J-1 DO

Write(P2[I]:4);

WriteLn;

{ 3. Перестановка }

{ Нахождение первого положительного и последнего отрицательного элемента }

FL:=0;

FOR I:=1 TO 15 DO Begin

IF (P[I]>0) AND (FL=0) THEN Begin PP:=I; FL:=1; End;

IF P[I]<0 THEN PO:=I;

End;

{ перестановка местами первого положительного и последнего отрицательного'}

PRP:=P[PP]; P[PP]:=P[PO]; P[PO]:=PRP;

WriteLn(' Массив, в котором первый положительный и последний отрицательный');

WriteLn(' поменяли местами');

FOR I:=1 TO 15 DO

Write(P[I]:4);

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

Дан массив целых чисел из 10 элементов, заполненный случайным образом из промежутка [-40, 30].

1. Удалить из него все элементы, которые состоят из одинаковых цифр ( включая однозначные числа).

2. Вставить число К перед всеми элементами, в которых есть цифра 1 (К вводится с клавиатуры)

3. Переставить первые три и последние три элемента местами, сохраняя порядок их следования.

Оглавление

линейные алгоритмы

задачи на линейное программирование

Разветвляющиеся алгоритмы

условный оператор if

условный операто case

задачи на условный оператор

циклические алгоритмы

задачи на циклы

операто цикла for

оператор цикла while

обработка массивов

одномерные массивы

задачи массивы

алгоритмы

алгоритмы

алгоритмы

алгоритмы

алгоритмы

двумерные массивы

алгоритмы

алгоритмы

алгоритмы

алгоритмы

обработка строк

подсчет и вывод символов

удаление символов

вставка символов

сложные варианты

задачи на ветвление

задачи на переменные

картинки