русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Решение


Дата добавления: 2014-11-28; просмотров: 15671; Нарушение авторских прав


Program dni_nedeli;

uses crt;

var k: integer;

begin

clrscr;

writeln(‘введите номер’);

read(k);

case k of

1: writeln(‘понедельник’);

2: writeln(‘вторник’);

3: writeln(‘среда’);

4: writeln(‘четверг’);

5: writeln(‘пятница’);

6: writeln(‘суббота’);

7: writeln(‘воскресенье’)

else writeln(‘не существует’);

end;

Вопросы для самостоятельной работы

1. Для чего используются ветвящиеся алгоритмы?

2. Сколько ветвей может быть у условного алгоритма? Что такое неполное ветвление?

3. Как записывается на языке Pascal оператор условия с двумя ветвями, под каждой из которых выполняется одно действие; несколько действий?

4. Как записывается на языке Pascal оператор условия с неполным ветвлением? (2 варианта)

5. Как можно включить в алгоритм несколько условий одновременно?

6. В чем отличие применения оператора выбора от оператора условия?

7. Как записывается на языке Pascal оператор выбора? Какие варианты существуют в записи?

8. Как обозначается сложное условие в блок-схеме? На алгоритмическом языке?

9. В каком случае знак препинания после слова end не ставится?

Задачи

Уровень A

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

22. Составить программу, позволяющую получить словесное описание школьных отметок (1 – плохо, 2 – неудовлетворительно и т.д.)

23. Даны три действительные числа. Возвести в квадрат те из них, значения которых неотрицательны, и в четвертую степень – отрицательные.

24. Даны целые числа m и n. Если числа не равны, то заменить меньшее число большим, оставив большее неизменным, а если равны, то заменить оба числа нулями.



25. Дано трехзначное число N. Проверить, будет ли сумма его цифр четным числом.

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

27. Подсчитать количество целых чисел среди чисел a, b, c.

28. Составить программу-результат гадания на ромашке – «любит – не любит», взяв за исходное данное количество лепестков.

29. Определить правильность даты, введенной с клавиатуры (число – от 1 до 31, месяц – от 1 до 12).

30. Составить программу, которая по заданным году и номеру месяца определяет количество дней в этом месяце.

Уровень B

31. Даны три стороны одного и три стороны другого треугольников. Определить, имеют ли эти треугольники равные площади.

32. Даны координаты трех вершин треугольника. Определить, будет ли этот треугольник равносторонним.

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

34. Написать программу, которая после введенного с клавиатуры числа (в диапазоне от 1 до 999), обозначающего денежную единицу, дописывает слово "рубль" в правильной форме. Например, 12 рублей, 21 рубль и т. д.

35. Заданы размеры a, b прямоугольного отверстия и размеры x, y, z кирпича. Определить, пройдет ли кирпич через отверстие.

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

Уровень C

37. Написать программу решения системы линейных уравнений:

a1x + b1y = c1

a2x + b2y = c2

38. Даны три положительных числа. Определить, можно ли построить треугольник с длинами сторон, равным этим числам. Если можно, ответить на вопрос, является ли он остроугольным.

39. Пусть элементами равностороннего треугольника являются 1) сторона; 2) площадь; 3) высота; 4) радиус вписанной окружности; 5) радиус описанной окружности. По одному из элементов вычислить остальные.

40. Найти координаты точек пересечения прямой y = kx + m и окружности радиусом R с центром в начале координат.


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

Цикл – многократное повторение последовательности действий по некоторому условию Известны три типа циклических алгоритмических структур:

· Цикл с предусловием;

· Цикл с постусловием;

· Цикл с параметром.

В Паскале существуют операторы, реализующие все три типа циклов.

a) Цикл с предусловием

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

начало цикла

Пока <условие>, повторяй

<действие 1>;

<действие 2>;

<действие n>;

конец цикла;

 

На языке Паскаль эта структура реализуется оператором While:

While <условие> do <действие>;

Так же, как и в ветвящихся конструкциях, если необходимо произвести несколько действий, используются служебные слова begin и end.

While <условие> do begin

<действие 1>;

<действие 2>;

<действие n>;

end;

Пример

Одноклеточная амеба каждые 3 часа делится на 2 клетки. Сколько амеб будет через n часов?

 

Алгоритм амеба;

Целые: a,t,n;

Начало

Ввести: n;

a:=1;

t:=0;

Начало цикла

Пока t<=n повторяй

a:=2*a;

t:=t+3;

Конец цикла;

Вывести: ‘через ‘,n,’ часов будет ‘,a,’ амеб’;

Конец.

 

Program ameba;

uses crt;

Var a,t,n: integer;

begin

clrscr;

a:=1;

t:=0;

writeln(‘Введите время (в часах)’);

read(n);

while t<=n do begin

a:=2*a;

t:=t+3;

end;

writeln(‘через ‘,n,’ часов будет ‘,a,’ амеб’);

end.

b) Цикл с постусловием

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

Повторяй <действие 1>;

<действие 2>;

<действие n>

Пока не <условие>;

Аналогичным образом эта структура записывается на языке Паскаль:

Repeat <действие 1>;

<действие 2>;

<действие n>

until <условие>;

Использование служебных слов begin и end для ограничения составного тела цикла не требуется.

Пример

Одноклеточная амеба каждые 3 часа делится на 2 клетки. Сколько амеб будет через n часов?

 

Алгоритм амеба;

Целые: a,t,n;

Начало

Ввести: n;

a:=1;

t:=0;

Повторяй

a:=2*a;

t:=t+3

Пока не t>n;

Вывести: ‘через ‘,n,’ часов будет ‘,a,’ амеб’;

Конец.

 

Program ameba;

uses crt;

Var a,t,n: integer;

begin

clrscr;

a:=1;

t:=0;

writeln(‘Введите время (в часах)’);

read(n);

repeat

a:=2*a;

t:=t+3;

until t>n;

writeln(‘через ‘,n,’ часов будет ‘,a,’ амеб’);

end.

 

c) Цикл с параметром

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

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

· Прямой цикл с параметром

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

Для i:= Kначальное до Kконечное повторяй

начало цикла

<действие 1>;

<действие 2>;

<действие n>;

конец цикла

Kначальное и Kконечное – некоторые значения целого типа, определяемые только один раз в начале цикла, причем Kначальное < Kконечное; параметр цикла принимает поочередно все целые значения, находящиеся в промежутке от Kначальное до Kконечное включительно.

В Паскале это записывается таким образом:

for i:= Kначальное to Kконечное do begin

<действие 1>;

<действие 2>;

<действие n>;

end;

Пример

Найдем сумму чисел от 1 до n, где n – натуральное число.

 

Алгоритм: числа;

Целые: i,n,s;

Начало

Ввести: n;

Для i:=1 до n повторяй s:=s+i;

Вывести: s;

Конец.

 

Program Chisla;

uses crt;

var i,n: integer; s: longint;

begin

clrscr;

Writeln(‘Введите натуральное число’);

read(n);

for i:=1 to n do s:=s+i;

writeln(‘Сумма равна ’,s);

end.

· Обратный цикл с параметром

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

Для i:= Kконечное до Kначальное повторяй

начало цикла

<действие 1>;

<действие 2>;

<действие n>;

конец цикла

В записи на Паскале, кроме этого, слово to меняется на downto:

for i:= Kконечное downto Kначальное do begin

<действие 1>;

<действие 2>;

<действие n>;

end;

Если между begin и end находится только одна инструкция, то слова begin и end можно не писать.

Пример

В стаде 100 овец, каждая из которых за месяц дает 5кг шерсти. Ежемесячно волк крадет одну овцу из стада. Сколько шерсти состригут со всего стада за m месяцев?

 

Алгоритм: овцы;

Целые: o,sh,m;

Начало

Ввести: m;

sh:=0;

Если m>99, то m:=99;

Для o:=100 до (100-m) повторяй sh:=sh+5*o;

Вывести: sh;

Конец.

 

Program ovtsy;

uses crt;

var o,m,sh: integer;

begin

clrscr;

Writeln(‘Введите количество месяцев’);

read(m);

if m>99 then m:=99;

for o:=100 to (100-m) do sh:=sh+5*o;

writeln(‘Состригут ’,sh,‘ кг шерсти’);

end.

d) Принудительный выход из цикла

Иногда бывает удобно проводить проверку на возможный выход из цикла где-нибудь в его середине, а не в начале или конце. Такой выход из цикла обеспечивается процедурой break модуля System, которая прерывает выполнение самого внутреннего вложенного цикла, будь то for, while иди repeat. Указанный модуль подключается к программе автоматически, если в этом есть необходимость.

Пример

Ребенок каждую неделю покупает 2 мороженых по 5 рублей. Каждую неделю мороженое становится дороже на 1%. Сколько денег он потратит за n недель, с учетом, что у него есть только 200 рублей?

 

program morozhenoye;

uses crt;

var n,i: integer; ts,d: real;

begin

clrscr;

ts:=5;

writeln(‘введите количество недель’);

read(n);

for i:=1 to n do begin

ts:=ts*1.01;

d:=d+ts*2;

if d>200 then begin

break;

repeat d:=d-ts until d<200;

end;

end;

writeln(‘Ребенок потратит ’,d,‘ руб. за’,n,‘ недель’);

end.

 

Вопросы для самостоятельной работы

  1. Что такое цикл?
  2. Какие существуют виды циклов? В чем особенности применения циклов каждого вида?
  3. Как задается цикл с предусловием на алгоритмическом языке? На языке Паскаль?
  4. Как выглядит блок-схема для цикла с предусловием?
  5. Как задается цикл с постусловием на алгоритмическом языке? На языке Паскаль?
  6. Как выглядит блок-схема для цикла с постусловием?
  7. Какие разновидности цикла с параметром существуют? В каких случаях они применяются?
  8. Как задается каждая из разновидностей цикла с параметром на алгоритмическом языке? На языке Паскаль?
  9. Как выглядит блок-схема для цикла с постусловием? Как отличается блок-схема для разновидностей цикла?
  10. Составьте алгоритм рабочей недели с учетом, что каждый день, кроме воскресенья повторяются одни и те же основные действия (подъем, завтрак, уход в школу и т.д.)

Задачи

Уровень A

41. Начав тренировки, спортсмен в первый день пробежал 10 км. каждый день он увеличивал дневную норму на 10% нормы предыдущего дня какой суммарный путь пробежит спортсмен за 7 дней?

42. Одноклеточная амеба каждые три часа делится на две клетки. Определить, сколько амеб будет через 3, 6, 9, …, 24 часа.

43. Ежемесячная стипендия студента составляет A руб., а расходы на проживание превышают стипендию и составляют B руб. в месяц. Рост цен ежемесячно увеличивает расходы на 3%. Составьте программу расчета необходимой суммы денег, которую надо единовременно попросить у родителей, чтобы можно было прожить учебный год (10 месяцев), используя только эти деньги и стипендию.

44. Написать программу, которая выводит на экран таблицу стоимости, яблок в диапазоне от 100 г до 1 кг с шагом 100.

45. Написать программу, которая выводит таблицу значений функции у = |х|. Диапазон изменения аргумента — от -4 до 4, шаг приращения аргумента — 0,5.

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

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

48. Составить программу, которая запрашивает пароль (четырехзначное число) до тех пор, пока он не будет правильно введен.

49. Написать программу, которая "задумывает" число в диапазоне от 1 до 10 и предлагает пользователю угадать число за 5 попыток.

50. Написать программу проверки знания таблицы умножения. Программа должна вывести 10 примеров и выставить оценку: за 10 правильных ответов — "отлично", за 9 и 8 —"хорошо", за 7 и 6 — "удовлетворительно", за 6 и менее — "плохо".

Уровень B

51. Составить программу нахождения суммы всех делителей натурального числа, включая 1 и само это число.

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

53. Найти сумму всех n-значных чисел (1 ≤ n ≤ 4).

54. Найти сумму всех n-значных чисел (1 ≤ n ≤ 4), кратных m.

55. Написать программу, которая вычисляет наибольший общий делитель двух целых чисел.

56. Составить программу проверки утверждения: «Результатами вычислений по формуле x2 + x + 41 при 0 ≤ x ≤ 40 являются простые числа». Все результаты вывести на экран.

Уровень C

57. У гусей и кроликов вместе 64 лапы. Сколько могло быть кроликов и гусей (указать все возможные варианты)?.

58. Написать программу, которая преобразует введенное пользователем десятичное число от 1 до 255 в двоичное.

59. Сколько можно купить быков, коров и телят, платя за быка 10 р., за корову – 5 р., а за теленка – 0,5 р., если на 100 р. надо купить 100 голов скота?

60. Покупатель должен заплатить в кассу S рублей. У него имеются купюры достоинством в 1, 2, 5, 10, 50, 100, 500 руб. Сколько купюр отдаст покупатель, если он начинает платить с самых крупных?


9. Работа с массивами

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

Существует два вида массивов: линейные (одномерные) и многомерные (матрицы n-ного порядка)

a) Одномерные массивы

Одномерным называется массив, состоящий из простых переменных. Он задается с помощью команды такого вида:

<имя массива>: array[<нижний индекс>..<верхний индекс>] of <тип элементов>;

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

Если необходимо обратиться к компоненте с определенным номером (индексом), прибегают к записи вида:

<Имя массива>[<индекс>]

Индекс – выражение порядкового типа, идентификатор компоненты массива.

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

Пример

Создадим программу, собирающую массив из двадцати псевдослучайных целых чисел в диапазоне от 0 до 100 и отображающую элемент массива с номером, введенным пользователем.

 

program massiv;

uses crt;

var m: array[1..20] of integer; n,i,: integer;

begin

clrscr;

for i:=1 to 20 do m[i]:=random(100);

writeln(‘введите номер элемента’);

read(n);

writeln(‘На позиции ’,n,‘ находится число ’,m[n]);

end.

b) Многомерные массивы

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

Многомерный массив задается аналогично линейному:

<имя массива>: array[<нижний индекс1>..<верхний индекс1>, <нижний индекс2>..<верхний индекс2>, … ,<нижний индекс n>..<верхний индекс n>] of <тип элементов>,

где n –порядок матрицы.

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

Пример

Составим и выведем на экран таблицу умножения.

 

program umnoheniye;

uses crt;

var u: array[1..10,1..10] of integer; i,j: integer;

begin

clrscr;

for i:=1 to 10 do begin

for j:=1 to 10 do u[i,j]:=i*j;

end;

for i:=1 to 10 do begin

for j:=1 to 10 do writeln(u[i,j]:3);

writeln;

end;

end.

 

Вопросы для самостоятельной работы

  1. Что такое массив? Из чего он состоит?
  2. Какие виды массивов существуют?
  3. Что есть одномерный массив? В каком виде он используется в жизни?
  4. Из чего состоит многомерный массив?
  5. Какие многомерные массивы существуют? Какой вид чаще всего используется?
  6. Какая команда в Паскале задает массивы?
  7. В чем отличие записей одно- и многомерных массивов?
  8. Как можно обратиться к отдельной компоненте массива в ходе программы?
  9. Как вводятся элементы массивов?
  10. Как вывести массив на экран? Какой прием для этого используется?

Задачи

Уровень A

61. Составить массив из псевдослучайных чисел [0; 1] и отобразить значение и номер наименьшего элемента.

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

63. В целочисленной последовательности есть нулевые элементы. Составить массив из номеров этих элементов.

64. Составить массив из псевдослучайных чисел в диапазоне [-10; 10], вывести его на экран. Подсчитать, сколько в нем положительных, отрицательных и нулевых элементов.

65. Дан массив натуральных чисел. Найти сумму элементов, кратных данному k.

66. Дана последовательность действительных чисел. Заменить все ее члены, большие числа-предела z, значением z.

67. Написать программу, которая вычисляет среднее арифметическое ненулевых элементов введенного с клавиатуры массива целых чисел.

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

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

70. Создать массив из действительных чисел. Поменять местами наибольший и наименьший элементы.

71. Записать элементы данного одномерного массива в другой в обратном порядке.

72. Каждый солнечный день улитка, сидящая на a-метровом дереве, поднимается вверх на 2 см, а каждый пасмурный день опускается вниз на 1 см. В начале наблюдения улитка находилась в b см от земли. Имеется 30-элементный массив, содержащий сведения о том, был ли соответствующий день пасмурным или солнечным. Написать программу, определяющую местоположение улитки на дереве к концу 30-го дня наблюдения.

73. Последовательность чисел оканчивается нулем. Найти количество членов этой последовательности.

74. Сформировать и вывести на экран матрицу второго порядка размером m×n по заданному образцу:

1 1 1 ... 1 1 1

1 0 0 ... 0 0 1

. . . . . . . . . . .

1 0 0 ... 0 0 1

1 1 1 ... 1 1 1

75. Построить квадратную матрицу со стороной 2n таким образом:

n n

1 1 … 1 2 2 … 2

1 1 … 1 2 2 … 2 n

………………..

1 1 … 1 2 2 … 2

3 3 … 3 4 4 … 4

3 3 … 3 4 4 … 4 n

………………...

3 3 … 3 4 4 … 4

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

77. Дана квадратная матрица. Записать вместо отрицательных элементов нули, а вместо положительных – единицы и вывести матрицу на экран.

78. Создать прямоугольную матрицу и вывести на экран. Записать данные из нее в новый массив, поменяв местами строки и столбцы.

79. Найти наибольший и наименьший элементы матрицы размером m×n и поменять их местами.

80. Дана прямоугольная матрица. Найти строки с наибольшей и наименьшей суммами элементов. Вывести на печать найденные строки и суммы их элементов.

81. Для целочисленной квадратной матрицы найти число элементов, кратных k, и наибольший из полученных результатов деления.

82. Дана действительная матрица размером m×n, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы элемента с найденным значением.

83. Для заданной квадратной матрицы сформировать одномерный массив из ее диагональных элементов и вывести его на экран.

84. Создать прямоугольную матрицу. Преобразовать ее, переставив столбцы в обратном порядке, т.е. последний столбец становится первым, предпоследний – вторым и т.д.

Уровень B

85. Дан одномерный массив a[n]. Найти

max(a[2], a[4], …, a[2k]) + min(a[1], a[3], …, a[2k+1]).

86. Дана последовательность действительных чисел. Указать номера тех ее элементов, которые принадлежат отрезку [c, d].

87. Последовательность чисел состоите из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.

88. Дана неубывающая последовательность действительных чисел. Вставить в нее действительное число b так, чтобы последовательность осталась неубывающей.

89. Дан массив натуральных чисел. Найти среди них те, которые являются квадратами целых чисел.

90. Дан массив из n натуральных чисел. Образовать новый массив, элементами которого будут числа из исходного, оканчивающиеся на k.

91. Написать программу, которая объединяет два упорядоченных по возрастанию одномерных массива в один, также упорядоченный по возрастанию массив.

92. Задан массив, содержащий несколько нулевых элементов. «Сжать» его, выбросив эти элементы. Дополнительный массив не использовать.

93. Дан целочисленный массив с количеством элементов n. «Сжать» массив, выбросив из него каждый второй элемент. Дополнительный массив не использовать.

94. Составить программу, которая заполняет квадратную матрицу со стороной n числами 1, 2, 3, …, n2, записывая их в нее по спирали.

95. Проверить, какие значения встречаются во введенной с клавиатуры матрице более одного раза, и заменить остальные значения нулями.

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

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

98. Дана действительная квадратная матрица 2n×2n. Получить новую матрицу, переставив ее блоки n×n по часовой стрелке.

99. Дана вещественная матрица размером m×n. Переставляя ее столбцы и строки, добиться того, чтобы наибольший элемент оказался в левом верхнем углу.

100. Определить, является ли заданная целая квадратная матрица симметричной относительно главной диагонали.

Уровень C

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

101. Сортировка выбором. Требуется расположить элементы последовательности по убыванию. Для этого в массиве, начиная с первого, выбирается наибольший элемент и ставится на первое место, а первый – на место наибольшего. Затем, начиная со второго, эта процедура повторяется.

102. Сортировка обменами. Требуется расположить элементы последовательности по возрастанию. Для этого сравниваются два соседних числа и, если первое из чисел больше второго, то делается перестановка. Так продолжается до тех пор, пока все элементы не станут расположены в порядке возрастания.

103. Сортировка вставками. Требуется расположить элементы последовательности по возрастанию. Делается это так. Пусть a1, a2, …, ai – упорядоченная последовательность. Следующее число вставляется в последовательность так, чтобы новая последовательность была также возрастающей. Процесс производится до тех пор, пока все оставшиеся элементы не займут нужные места.

104. Сортировка Шелла. Требуется расположить элементы последовательности по возрастанию. Для этого сравнивается пара соседних чисел ai и ai+1. Если ai ai+1, то пара продвигается на один элемент вперед, иначе производится перестановка, и пара сдвигается на один элемент назад.

105. Алгоритм фон Неймана. Требуется расположить элементы последовательности по убыванию с помощью алгоритма сортировки слияниями: каждая пара соседних элементов сливается в одну группу из двух элементов (последняя группа может состоять из одного элемента); каждая пара соседних групп сливается в одну четырехэлементную группу и т.д. При каждом слиянии новая группа упорядочивается.

106. Расположить элементы матрицы в порядке возрастания с помощью сортировки выбором.

107. Расположить элементы матрицы в порядке возрастания с помощью сортировки обменами.


10. Работа со строковыми переменными

a) Строковые переменные

Строковыми называют константы и переменные, значением которых служит набор символов, заключенный в апострофы, обозначающие начало и конец набора (сами апострофы в состав набора не входят). Строковые константы и переменные имеют тип string.Этот тип данных относят к структурированным.

Формат этого типа данных – string[n], где n - константа из диапазона 0...255.

Например, '2%', '12345', 'Коля'. В данном случае '12345' не число, а набор символов - цифр, математические операции с таким набором проводить нельзя.

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

Пример

const

с = 'созидание';

k = '1993';

При описании переменных тип указывается обязательно.

var

a: char;

b: string[20];

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

Строковая переменная может быть «пустой»,т.е. не содержать ни одного символа, например, s:=".

Строковые переменные можно получать, соединяя значения переменных типа char:

Пример

For i:=1 to 10 do begin

read(z);

s:=s+z;

end;

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

Пример

'пролив'> Результат операции: true.

'11111 '>'111' Результат операции: true.

'11111 '>'2' Результат операции: false.

 

Специальные процедуры и функции для обработки строковых величин

· Length(st)

- значением функции является длина строковой переменной st.

Пример Length ('Привет!'); Результат: 7 (типа integer).

· Copy(st,m,n)

- значением функции является подстрока из n символов, вырезанных из строки st, начиная с позиции, указанной параметром m

Пример сору('водопровод',6,3); Результат операции строка 'ров'

· Delete(st,m,n)

- данная процедура удаляет n символов из строки st, начиная с позиции, указанной параметром m.

Пример

х:= 'abcdef;

Delete(x,2,3); Результат: переменной х типа string присвоено значение 'aef'.

· Concat(st1,st2,...stn)

- соединение строк. Можно использовать конструкцию st1+st2,+...+stn.

Пример f := 'пи'; d := 'лот'; s := f + d; или s:=Concat(f,d) . Результат: s='пилот'

· Insert(stl,st2,m)

- вставка в строку st2 строки st1, начиная с позиции m. Общая длина строки не превышает длину строки st2.

Пример

х:= 'aef';

Insert(x,'bcd',2); Результат: переменной х типа string присвоено значение 'abcdef'.

· Pos(st1,st2)

- значением функции будет номер позиции, в которой в строке st2 первый раз встречается строка stl.

Пример pos('cd','abcdef); Результат: 3 (типа integer).

· Str(x,st)

- заданное числовое значение преобразуется в строку символов. Значение присваивается переменной st.

Пример

х:=7;

Str(x,s); Результат: переменная s приобрела значение '7' (string).

Y:=7.0;

Str(y,s); Результат: переменная s приобрела значение '7.0000000000Е+00' (string).

· Val(st,x,c)

- строка символов st, состоящая из цифр, преобразуется в число. Значение передается переменной х. Параметр определяется средствами Турбо Паскаля.

Пример

s:='27';

Val(s,x,p); Результат: переменная х приобрела значение 27 (integer), переменная р значение 0.

s:='7.6';

Val(s,y,p); Результат: переменная у приобрела значение 7.6000000000Е+00 типа real, переменная р значение 0.

· UpCase('текст')

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

Пример

UpCase('p') = 'P'

UpCase('B') = 'B'

UpCase('+') = '+'

· LowCase('текст')

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

b) ASCII коды клавиш

Символам и некоторым командам присвоены десятичные ASCII коды (ASCII – American Standard Code for Information Interchange – американский стандартный код для обмена информацией), которые очень удобно использовать при решении некоторых задач в Паскале, особенно задач со строковыми переменными.

Для работы с ASCII кодами используются переменные типа char и специальные функции:

· Readkey

- считывание кода клавиши

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

· Ord(x)

- возвращает код символьного аргумента

· Chr(x)

- возврат клавиши по числовому коду


NUL
SOH
STX
ETX
EOT
ENQ
ACK
Звуковой сигнал динамика
Возврат курсора на одну позицию
Горизонтальная табуляция
Перевод строки
VT
Прогон страницы
Возврат каретки
SO
SI
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
Конец файла
Символ Escape
FS
GS
RS
US
SP
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
А
Б
В
Г
Д
Е
Ж
З
И
Й
К
Л
М
Н
О
П
Р
С
Т
У
Ф
Х
Ц
Ч
Ш
Щ
Ъ
Ы
Ь
Э
Ю
Я
а
б
в
г
д
е
ж
з
и
й
к
л
м
н
о
п
р
с
т
у
ф
х
ц
ч
ш
щ
ъ
ы
ь
э
ю
я
Ё
ё
Є
є
Ї
ї
Ў
ў
.
¤

Вопросы для самостоятельной работы

  1. Какие переменные называют строковыми? Какой тип используется для таких переменных?
  2. Как задаются строковые переменные?
  3. Какие правила действуют для сравнения строковых переменных?
  4. Для чего используются функции length, copy, delete?
  5. Какая функция позволяет соединить строки; вставить одну строку в другую; найти символы одной строки в другой?
  6. Какие функции используются для перевода значений строкового типа в числовой и наоборот?
  7. Какие функции позволяют изменять регистр символов? Как ограничена область их применения?
  8. Что такое ASCII коды клавиш?
  9. Какой тип используется для ASCII кодов клавиш? Вспомните особенности этого типа (раздел «Типы переменных в Паскале»).
  10. Какие функции применяются для работы с ASCII кодами клавиш?

Задачи

Уровень A

108. Написать программу, которая запрашивает имя пользователя и здоровается с ним.

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

110. Дана строка. Подсчитать, сколько в ней слов.

111. Дана строка. Подсчитатать количество вхождений букв k, r, t.

112. Дана строка. Подсчитать, сколько различных символов встречаются в ней. Вывести их на экран.

113. Дана строка (без знаков препинания). Удалить те слова, которые содержат хотя бы одну букву k.

114. Имеется строка, содержащая буквы латинского алфавита и цифры. Вывести на экран длину наибольшей последовательности идущих подряд цифр.

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

116. Определить, сколько раз в строке встречается заданное слово.

117. Упорядочить данный массив строчных английских букв по алфавиту.

Уровень B

118. Из заданной строки выбрать и вывести на экран те символы, которые встречаются только один раз, в том порядке, в котором они встречаются в тексте.

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

120. Строка содержит слово. Определить, является ли оно палиндромом.

121. В данном тексте слова зашифрованы – каждое слово записано наоборот. Расшифровать сообщение.

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

123. Дана строка. Подсчитать, какие символы и сколько раз в ней встречаются.

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

Уровень C

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

126. Упорядочить строку русских слов по алфавиту.

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

 


11. Подпрограммы

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

a) Подпрограмма-функция

Подпрограмма-функция может иметь несколько переменных с входными данными (параметров-аргументов) и только одну переменную в результате. Подпрограмма-функция имеет следующий формат описания:

Function <имя функции>(var <параметры - аргументы>: <тип>): <Тип результата>;

const <описание локальных констант>;

var <описание локальных переменных>;

begin

<инструкции подпрограммы>;

end;

Тип результата (тип функции) может быть только простым типом или типом string. Основная часть подпрограммы содержит локальные для функции описания и раздел операторов

Обращение к подпрограмме-функции является операндом в выражении и осуществляется посредством имени подпрограммы.

Пример

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

 

Program naibolshie_tsifry;

uses crt;

var ch: array[1..20] of longint; s,k,h: integer;

function maxts(n: longint): integer;

var ts: array[1..10] of integer; i,j: integer;

begin

for i:=1 to 10 do begin

ts[i]:=n mod 10;

n:=n div 10;

if n=0 then break;

end;

for j:=1 to (i-1) do begin

if ts[j]>ts[j+1] then maxts:=ts[j] else maxts:=ts[j+1];

end;

end;

begin

clrscr;

writeln(‘введите количество чисел’);

readln(k);

for h:=1 to k do begin

writeln(‘введите ’,h,‘ число’);

readln(ch[h]);

s:=s+maxts(ch[h]);

end;

writeln(s);

readkey;

end.

b) Подпрограмма-процедура

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

Procedure <Имя процедуры>(<параметры-аргументы>: <типы>; var <параметры-результаты>: <типы>);

const <описание локальных констант>;

var <описание локальных переменных>;

begin

<инструкции подпрограммы>;

end;

Обращение к процедуре – отдельный оператор.

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

Пример

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

 

Program naibolshiye_tsifry_2;

uses crt;

var n,m: longint; nt,mt,mr,nr: integer;

procedure maxnum(a: longint; var t,r: integer);

var p,i,ts: integer;

begin

t:=0;

while a<>0 do begin

ts:=a mod 10;

a:=a div 10;

inc(p);

if ts>t then begin

t:=ts;

r:=p;

end;

end;

for i:=1 to (r-1) do r:=r*10;

end;

begin

clrscr;

writeln(‘Введите первое число’);

read(n);

writeln(‘Введите второе число’);

read(m);

maxnum(n,nt,nr);

maxnum(m,mt,mr);

m:=m-mt*mr+nt*mr;

n:=n-nt*nr+mt*nr;

writeln(n,‘ ’,m);

readskey;

end.

 

Вопросы для самостоятельной работы

  1. Что такое подпрограммы?
  2. Какую роль исполняют подпрограммы? В каких случаях удобно их использовать?
  3. Какие виды подпрограмм существуют?
  4. Чем характеризуются подпрограммы-функции?
  5. Как задается подпрограмма-функция в Паскале?
  6. Как осуществляется обращение к подпрограмме-функции?
  7. Чем характеризуются подпрограммы-процедуры?
  8. Как задается подпрограмма-процедура в Паскале?
  9. Как осуществляется обращение к подпрограмме-функции?
  10. В чем важнейшее различие двух видов подпрограмм?

Задачи

Во всех задачах этого раздела использовать подпрограммы.

Уровень A

128. Написать программу нахождения наибольшего и наименьшего из трех чисел.

129. На плоскости заданы своими координатами n точек (координаты занесены в массив). Составить программу, определяющую между какими точками расстояние наибольшее.

130. Даны две дроби и (A, B, C, D – натуральные числа). Составить программу: деления, умножения дроби на дробь, сложения и вычитания дробей. Ответ должен быть несократимой дробью.

131. Сформировать массив x(n), n-ый член которого определяется по формуле .

132. Составить программу вычисления суммы факториалов всех четных чисел от m до n.

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

134. Дано натуральное число. Найти следующее за ним простое число.

135. Дано натуральное число n. Составить программу формирования массива, элементами которого являются цифры числа n.

136. Составить функцию нахождения наименьшего нечетного натурального делителя k (k≠1) для любого заданного натурального числа.

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

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

Уровень B

139. Треугольник задан координатами своих вершин. Составить программу вычисления его площади.

140. Составить программу нахождения наибольшего общего делителя четырех чисел.

141. Два натуральных числа называют «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого. Найти все пары «дружественных» чисел, которые не больше данного числа n.

142. Натуральное число, в записи которого n цифр, называется числом Амстронга, если сумма его цифр, возведенная в степень n, равна самому этому числу. Найти все такие числа от 1 до k.

143. Найти все натуральные n-значные числа, цифры в которых образуют строго возрастающую последовательность.

144. Найти все натуральные числа, не превосходящие заданного n, которые делятся на каждую из своих цифр.

145. На части катушки с автобусными билетами номера шестизначные. Составить программу, определяющую количество счастливых билетов на катушке, если меньший номер билета – n, больший – m (билет считается счастливым, если сумма первых трех цифр равна сумме трех последних).

Уровень C

146. Дано четное число n>2. Проверить для него гипотезу Гольдбаха: каждое четное число представляется в виде суммы двух простых чисел.

147. Составить программу перевода данного натурального числа в p-ичную систему счисления (2 ≤ p ≤ 9).

148. Дана символьная строка, представляющая собой запись натурального числа в p-ичной системе счисления. Составить программу перевода этого числа в десятичную систему счисления.


12. Графика в Паскале

Графический экран работает в двух режимах:

· Текстовой режим (каждый символ занимает 6 пикселов по горизонтали и 8 по вертикали);

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

a) Переход в графический режим

До начала составления программы необходимо подключить графический драйвер (программа, которая обслуживает адаптер дисплея) ***.bgi - расширение файла драйвера.

InitGraph (Driver, Mode,'<полный путь>');

Путь к папке BGI (C:\BP\BGI).

Обязательно Driver, Mode должны быть определены в области описания переменных Var.

Пример:Var driver, mode: Integer;

При обращении к процедуре InitGraph используется автоматически определенный тип адаптера, который переводи экран в графический видеорежим, номер которого содержит переменная Mode.

Когда графический адаптер больше не нужен, необходимо закрыть видеорежим: CloseGraph;

b) Цветовое оформление

SetColor (<цвет>); – установка цвета элемента

SetBkColor (<цвет>); – установка цвета фона

SetFillStyle (<стиль заполнения>,<цвет>); – установка способа закраски элемента

В Паскале при выборе цвета он указывается в соответствии с приведенной таблицей.

Константа Цвет  
Имя Значение
Black Черный
Blue Синий
Green Зеленый
Cyan Бирюзовый
Red Красный
Magenta Малиновый
Brown Коричневый
Lightgrey Светло-серый
Darkgrey Темно-серый
Lightblue Светло-голубой
Lightgreen Светло-зеленый
Lightcyan Светло-бирюзовый
Lightred Светло-красный
Lightmagenta Светло-малиновый
Yellow Желтый
White Белый

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

Константа Тип
Имя Значение
EmptyFill Заполнение цветом фона
SolidFill Заполнение текущим цветом
LineFill Заполнение линиями -----
LineSlashFill Заполнение линиями /////
SlashFill Заполнение линиями/////
BkSlashFill Заполнение линиями \\\\\
HatchFill Заполнение вертикально-горизонтальными тонкими штриховыми линиями ++++++
XHatchFill Заполнение ХХХХХ
InterLeaveFill


<== предыдущая лекция | следующая лекция ==>
Решение | Поиск в сети Интернет


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.407 сек.