русс | укр

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

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

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

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


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

Множества


Дата добавления: 2013-12-23; просмотров: 1089; Нарушение авторских прав


End;

Begin

N := 1;

M := 10;

S := 0.0;

S := 0;

S := 0;

End.

ReadLn;

WriteLn;

End;

WriteLn;

Begin

WriteLn;

End;

WriteLn;

Begin

WriteLn;

End;

WriteLn;

Begin

End;

Begin

ClrScr;

Uses WinCrt;

Program Primer_19;

End.

ReadLn;

WriteLn;

WriteLn;

WriteLn;

End;

End;

T:= t - 1;

Begin

T:= m;

Begin

M:= n-1;

WriteLn;

End;

WriteLn;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_18;

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

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

End.

ReadLn;

WriteLn;

WriteLn;

WriteLn;

End;

Begin

WriteLn;

End;

WriteLn;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_17;



. . . . . . . . .

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

End.

ReadLn;

End;

Break;

Begin

End;

End;

Begin

WriteLn;

End;

WriteLn;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_16;

End.

ReadLn;

WriteLn;

End;

WriteLn;

End;

Begin

M:= n Div 2;

WriteLn;

End;

End;

WriteLn;

End;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_15;

7 8 9 9 6 3

Gt; 8 5 2

1 2 3 7 4 1

End.

ReadLn;

WriteLn;

End;

End;

Begin

WriteLn;

End;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_14;

End.

ReadLn;

WriteLn;

End;

End;

WriteLn;

End;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_13;

End.

ReadLn;

WriteLn;

WriteLn;

End;

T := 0;

WriteLn;

End;

WriteLn;

Randomize;

ClrScr;

Begin

M = 7;

Uses WinCrt;

Program Primer_12;

End.

ReadLn;

WriteLn;

WriteLn;

Begin

WriteLn;

WriteLn;

Randomize;

ClrScr;

Begin

M = 4;

N = 3;

Uses WinCrt;

Program Primer_11;

End.

ReadLn;

WriteLn;

WriteLn;

End;

Begin

WriteLn;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_10;

End.

ReadLn;

End;

WriteLn;

WriteLn;

WriteLn;

Begin

WriteLn;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_9;

End.

ReadLn;

WriteLn;

WriteLn;

WriteLn;

End;

Begin

WriteLn;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_8;

End.

ReadLn;

End;

Begin

Then

WriteLn;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_7;

End.

ReadLn;

WriteLn;

WriteLn;

End;

Begin

WriteLn;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_6;

End.

ReadLn;

WriteLn;

Randomize;

ClrScr;

Begin

Uses WinCrt;

Program Primer_5;

End.

ReadLn;

End;

WriteLn;

ClrScr;

Begin

Uses WinCrt;

Program Primer_4;

End.

ReadLn;

WriteLn;

End;

WriteLn;

Begin

End;

Begin

ClrScr;

Begin

Uses WinCrt;

Program Primer_3;

End.

ReadLn;

WriteLn;

End;

Begin

ClrScr;

Begin

Uses WinCrt;

Program Primer_2;

End.

Begin

Uses WinCrt;

Program Primer_1;

End;

Begin

End;

K := i;

Begin

End;

Begin

End;

Begin

End;

WriteLn;

Begin

P := 1;

S := 0;

Begin

N := 11;

S := 0;

Begin

N := 10;

S := 0;

End;

Begin

N := 10;

M := 1;

End.

ReadLn;

S := 0;

ClrScr;

Begin

Uses CRT;

Program Gauss;

End.

ReadLn;

S := 0;

ClrScr;

Begin

Uses CRT;

End;

Оператор;

Оператор;

Оператор;

Begin

Оператор;

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

. . .

Repeat;

Until;

. . .

Repeat

. . .

Repeat

End.

ReadLn;

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

Часто встречающиеся ошибки программирования:

1. Использование в качестве условия выражения не логического типа:

Until (n + m);

2. Отсутствие условия после слова Until:

3. Использование после слова Repeat двоеточия или точки с запятой:

Until (n >= 10);

 

Управление работой циклов с параметром осуществляется не условием, а значением специальной переменной – параметра цикла (счетчика).

Схему цикла с параметром можно представить в следующем виде:

 

 

где i – параметр цикла – любая переменная порядкового типа (целого, символьного, интервального, перечисляемого),

i_нач – его начальное значение,

i_кон – его конечное значение.

Действия цикла:

1. параметру цикла i присваивается его начальное значение i_нач,

2. если оно не превосходит конечного (i_нач ≤ i_кон), то выполняется тело цикла,

3. параметр цикла автоматически увеличивается на единицу, и цикл повторяется до тех пор, пока параметр цикла не достигнет своего конечного значения,

4. если начальное значение параметра цикла больше его конечного значения (i_нач > i_кон), то цикл не выполняется ни разу.

В Паскале циклы с параметром реализуются оператором цикла:

For i := iнач To iкон Do это заголовок цикла

или

For i := iнач To iкон Do

Если в заголовке цикла используется служебное слово To (к), то шаг изменения параметра цикла равен +1.

Если в заголовке цикла используется служебное слово DownTo (уменьшаядо), то шаг изменения параметра цикла равен -1.

Внимание! После слова Do точка с запятой никогда не ставится!

Пример: определить сумму s натуральных чисел от 1 до 100.

Схема алгоритма: Программа:

Program Gauss;

Var n, s : Word;

For n:=1 To 100 Do

s := s + n;

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

 

 

Эту же задачу можно решить, суммируя числа справа налево, то есть от 100 до 1:


Var i, s : Word;

For i:=100 DownTo 1 Do

s := s + i;

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


 

 

Построение операторов цикла For подчиняется следующим правилам:

1. начальное и конечное значения параметра цикла можно задавать константами (как в примере), заранее определенными переменными или выражениями,

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

For j := m To n Do

a[j] := j + 10;

m := m + 1; ошибка!

n := n + 1; ошибка!

Выходим из этого цикла со значением параметра цикла j, равным 10.

Нежелательно внутри области цикла самому изменять значение параметра цикла - это может привести к появлению бесконечных циклов:

For k := 1 To n Do

k := k + 1;

s := s + k;

End;

Эта программа вычисляет сумму s четных целых чисел от 2 до 10, равную 30. При этом конечное значение параметра цикла k равно 10 .

Зададим n = 11:

For k := 1 To n Do

k := k + 1;

s := s + k;

End;

Цикл превратится в бесконечный: значение параметра цикла k никогда не будет равным заданному конечному значению 11. Оно перепрыгнет это значение и уйдет в бесконечность.

Если же цикл не выполняется ни разу, то параметр цикла сбрасывается на ноль:

For k := 10 To 1 Do

p := p * k;

s := s + k;

End;

Выходим из этого цикла со значением k, равным 0.

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

For i := 1 To n Do эти циклы выводят элементы массива Anm

Begin в виде матрицы, построчно

For j:= 1 To m Do

Write(a[i,j]:5);

4. после окончания работы цикла значение параметра цикла сохраняется,

5. в область цикла можно входить только через заголовок цикла For;
неразрешается переход с помощью операторов If и GoTo, расположенных вне данного цикла, на операторы в области цикла:

If (p Mod s > 10)

Then GoTo 5; ошибка – переход в тело цикла, минуя его заголовок

For i := 1 To 10 Do

s := s + i;

5: p := p + i;

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

For i := 1 To 100 Do

If (a[i]=0)

Then Goto 2; переход внутри тела цикла

a[i] := 1 / a[i];

2:

7. с помощью оператора Break можно досрочно выйти из цикла:

For i := 1 To 100 Do

If (a[i] < 0)

Then Break; поиск первого отрицательного элемента в векторе

8. оператор Continue позволяет досрочно перейти к следующей итерации цикла:

For i := 1 To 100 Do

If (a[i] = 0)

Then Continue; если ноль, то на следующую итерацию

a[i] := 1 / a[i];

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

Примеры:

1. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max.

Для решения этой задачи используется стандартная функция – генератор случайных чисел Random(k). При каждом обращении к этой функции она вырабатывает целое случайное число, лежащее в диапазоне от 0 до k - 1.

Const n = 10; задание исходных данных в виде именованных констант

vect_min = -10;

vect_max = 20;

Var i : Word; параметр цикла

Vector : Array [1..n] Of Integer; описание вектора сиспользованием константы n

ClrScr; очистка экрана

Randomize; запуск генератора случайных чисел

For i:=1 To n Do заполнение вектора случайными числами

Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;

For i:=1 To n Do форматный вывод вектора на экран в однустроку

Write(Vector[i]:5);

WriteLn; переход на новую строку на экране

ReadLn; задержка картинки на экране до нажатия на ENTER

2. Задать элементы целочисленного массива massivnm случайными числами, лежащими в диапазоне от mass_min до mass_max. Полученный массив вывести на экран построчно.

Const n = 5;

m = 8;

mass_min = -50;

mass_max = 50;

Var i, j : Word; параметры циклов

Massiv : Array [1..n, 1..m] Of Integer; описание массива сиспользованием констант n и m

Randomize; запуск генератора случайных чисел

For i:=1 To n Do заполнение массива случайными числами

For j:=1 To m Do в заданном диапазоне

Massiv[i, j]:=Random(mass_max – mass_min + 1) + mass_min;

For i:=1 To n Do форматный вывод массива на экран построчно

For j:=1 To m Do

Write(Massiv[i, j]:5);

WriteLn; переход на новую строку на экране

3. Задать элементы целочисленного массива massivnm в виде чисел от 1 до n*m . Полученный массив вывести на экран построчно:

Const n = 3;

m = 5;

Var i, j, k : Word;

Massiv : Array [1..n, 1..m] Of Word;

k:= 0; рабочая переменная для задания элементов массива

For i:=1 To n Do заполнение массива

For j:=1 To m Do

k:= k + 1;

Massiv[i, j]:= k;

For i:=1 To n Do форматный вывод массива на экран построчно

For j:=1 To m Do

Write(Massiv[i, j]:5);

4. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран в одну строку. Определить индекс i_max и значение vector_max максимального элемента вектора.

Перед поиском максимального элемента вектора за таковой принимается первый элемент вектора, а затем он сравнивается с остальными элементами:

Const n = 10; задание исходных данных в виде именованных констант

vect_min = -10;

vect_max = 10;

Var i, i_max, vector_max : Integer;

Vector : Array [1..n] Of Integer;

Randomize;

For i:=1 To n Do

Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;

For i:=1 To n Do

Write(Vector[i]:5);

Vector_max:= Vector[1]; пока максимальный элемент – первый

i_max:= 1; элемент вектора

For i:=2 To n Do поиск начинаем со второго элемента!

If (Vector[i] > Vector_max) Then если очередной элемент больше

Begin текущего максимального,

Vector_max := Vector[i]; то максимальным элементом

i_max := i; становится очередной элемент вектора

WriteLn(‘Vector_max=’, Vector_max);

WriteLn(‘i_max=’, i_max);

5. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Определить сумму S элементов вектора.

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

Const n = 10; задание исходных данных в виде именованных констант

vect_min = -50;

vect_max = 50;

Var i, s : Integer;

Vector : Array [1..n] Of Integer;

For i:=1 To n Do

Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;

For i:=1 To n Do

Write(Vector[i]:5);

S := 0; начальная сумма равна нулю!

For i:=1 To n Do добавляем в сумму очередной

s := s + Vector[i]; элемент вектора

WriteLn(‘s=’, s);

6. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Перевернуть вектор: поменять местами первый и последний элементы, второй и предпоследний, и так далее (поплавок):

Const n = 10;

vect_min = -50;

vect_max = 50;

Var i, k, m : Integer;

Vector : Array [1..n] Of Integer;

For i:=1 To n Do

Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;

WriteLn(‘Исходный вектор:’);

For i:=1 To n Do

Write(Vector[i]:5);

m:= n Div 2; средина вектора

For i:=1 To m Do идем до средины вектора

k:= Vector[i];

Vector[i]:= Vector[n – i + 1];

Vector[n – i + 1]:= k;

WriteLn(‘Полученный вектор:’);

For i:=1 To n Do

Write(Vector[i]:5);

7. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Определить сумму S элементов вектора, лежащих в диапазоне от min до max, и количество count этих элементов.

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

Const n = 10; задание исходных данных в виде именованных констант

vect_min = -50;

vect_max = 50;

min = -10;

max = 10;

Var i, s, count : Integer;

Vector : Array [1..n] Of Integer;

For i:=1 To n Do

Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;

For i:=1 To n Do

Write(Vector[i]:5);

count:= 0;

s:= 0; начальная сумма равна нулю!

For i:=1 To n Do

If (Vector[i] >= min) And (Vector[i] <= max) проверка условия

s:= s + Vector[i];

count:= count + 1;

WriteLn(‘s=’, s);

WriteLn(‘count=’, count);

8. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Поменять местами максимальный max и минимальный min элементы вектора.

Перед началом поиска максимального и минимального элементов за таковые принимается первый элемент вектора. Для обмена местами этих элементов необходимо определить их номера (индексы) i_min и i_max:

Const n = 10; задание исходных данных

vect_min = -50;

vect_max = 50;

Var i, k, min, max, i_min, i_max : Integer;

Vector : Array [1..n] Of Integer;

For i:=1 To n Do

Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;

WriteLn(‘Исходный вектор:’);

For i:=1 To n Do

Write(Vector[i]:5);

min:= Vector[1]; начальные значения минимального

max:= Vector[1]; и максимального элементов массива

i_min:= 1; индексы этих элементов

i_max:= 1;

For i:=2 To n Do начинаем просмотр со второго элемента

If (Vector[i] < min) Then если очередной элемент вектора

Begin меньше минимального,

min:= Vector[i]; то за минимальный принимаем

i_min:= i; этот очереднойэлемент

End; и запоминаем его индекс

If (Vector[i] > max) Then если очередной элемент вектора

Begin больше максимального,

max:= Vector[i]; то за максимальный принимаем

i_max:= i; этот очереднойэлемент

End; и запоминаем его индекс

 

WriteLn(‘Минимальный элемент=’, Vector[i_min]);

WriteLn(‘Его индекс=’, i_min);

WriteLn(‘Максимальный элемент=’, Vector[i_max]);

WriteLn(‘Его индекс=’, i_max);

k:= Vector[i_min]; меняем их местами через

Vector[i_min]:= Vector[i_max]; третью переменную

Vector[i_max]:= k;

WriteLn(‘Полученный вектор:’);

For i:=1 To n Do

Write(Vector[i]:5);

9. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Поменять местами первый отрицательный и последний положительный элементы массива. Предусмотреть случай, когда элементы массива имеют один знак – только отрицательные или только положительные.

Обозначим их индексы как i_otr и i_pol. Перед началом поиска сбросим их на ноль. Если после поиска какой-нибудь из них останется равным нулю, то в векторе – элементы одного знака:

Const n = 10; задание исходных данных

vect_min = -50;

vect_max = 50;

Var i, k, i_otr, i_pol : Integer;

Vector : Array [1..n] Of Integer;

For i:=1 To n Do

Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;

WriteLn(‘Исходный вектор:’);

For i:=1 To n Do

Write(Vector[i]:5);

i_otr:= 0;

i_pol:= 0;

For i:=1 To n Do

If (Vector[i] < 0) Then если очередной элемент вектора

Begin меньше нуля,

i_otr:= i; тозапоминаем его индекс

Break; и выходим из цикла

End;

For i:=1 To n Do

If (Vector[i] > 0) если очередной элемент вектора

Then i_pol:= i; больше нуля, тозапоминаем его индекс

If (i_otr = 0)

Then WriteLn(‘В векторе только положительные элементы’);

If (i_pol = 0)

Then WriteLn(‘В векторе только отрицательные элементы’);

If (i_otr > 0) And (i_pol > 0) Then

WriteLn(‘Первый отрицательный элемент=’, Vector[i_otr]);

WriteLn(‘Его индекс=’, i_otr);

WriteLn(‘Последний положительный элемент=’, Vector[i_pol]);

WriteLn(‘Его индекс=’, i_pol);

k:= Vector[i_otr]; меняем их местами через

Vector[i_otr]:= Vector[i_pol]; третью переменную

Vector[i_pol]:= k;

WriteLn(‘Полученный вектор:’);

For i:=1 To n Do

Write(Vector[i]:5);

10. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Сдвинуть элементы вектора вправо на один шаг, причем последний элемент должен встать на первое место.

Для решения этой задачи запомним последний элемент вектора на переменной posl, сдвинем все элементы на шаг вправо, начиная с предпоследнего, а затем значение переменной posl поместим в первый элемент массива:

Const n = 10; задание исходных данных

vect_min = -50;

vect_max = 50;

Var i, k, posl : Integer;

Vector : Array [1..n] Of Integer;

For i:=1 To n Do

Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;

WriteLn(‘Исходный вектор:’);

For i:=1 To n Do

Write(Vector[i]:5);

posl:= Vector[n]; запоминаем последний элемент вектора

For i:= n DownTo 2 Do

k:= Vector[i]; сдвигаем элементы вектора

Vector[i]:= Vector[i-1]; на один шаг вправо

Vector[i-1]:= k;

Vector[1]:= posl; вставляем последний элемент

на первое место

WriteLn(‘Полученный вектор:’);

For i:=1 To n Do

Write(Vector[i]:5);

11. Задать элементы целочисленного вектора vectork случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Разместить элементы вектора в массиве massivnm построчно (n*m = k):

Const k = 12; задание исходных данных в виде именованных констант

vect_min = -50;

vect_max = 50;

Var i, j, t : Integer;

Vector : Array [1..k] Of Integer;

Massiv : Array [1..n, 1..m] Of Integer;

For i:=1 To k Do

Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;

WriteLn(‘Исходный вектор’);

For i:=1 To k Do

Write(Vector[i]:5);

t := 0; номер очередного элемента вектора

For i:=1 To n Do

For j:=1 To m Do

t := t + 1;

Massiv[i, j] := Vector[t];

End;

WriteLn(‘Полученный массив’);

For i:=1 To n Do

Begin

For j:=1 To m Do

Write(Massiv[i, j]:5);

End;

12. Задать элементы целочисленного квадратного массива massivnm случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Разместить элементы массива в векторе Vectork построчно (k = n*m):

Const n = 5;

k = n * m;

mass_min = -50;

mass_max = 50;

Var i, j, t : Integer;

Vector : Array [1..k] Of Integer;

Massiv : Array [1..n, 1..m] Of Integer;

For i:=1 To n Do

For j:=1 To n Do

Massiv[i, j]:= Random(mass_max – mass_min + 1) + mass_min;

WriteLn(‘Исходный массив:’);

For i:=1 To n Do

Begin

For j:=1 To m Do

Write(Massiv[i, j]:5);

WriteLn;

For i:=1 To n Do

For j:=1 To m Do

Begin

t := t + 1;

Vector[t] := Massiv[i,j];

WriteLn(‘Полученный вектор’);

For i:=1 To k Do

Write(Vector[i]:5);

13. Задать элементы целочисленного квадратного массива massivnn случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Транспонировать массив, заменив его строки соответствующими столбцами: первую строку – на первый столбец, вторую – на второй, и так далее. Транспонированный массив вывести на экран построчно:

Const n = 5;

mass_min = -50;

mass_max = 50;

Var i, j, k : Integer;

Massiv : Array [1..n, 1..n] Of Integer; описание массива сиспользованием константы n

For i:=1 To n Do

For j:=1 To n Do

Massiv[i, j]:=Random(mass_max – mass_min + 1) + mass_min;

WriteLn(‘Исходный массив:’);

For i:=1 To n Do

Begin

For j:=1 To n Do

Write(Massiv[i, j]:5);

WriteLn;

For i:=1 To n Do строки начинаем с первой

For j:=i To n Do столбцы начинаем с главной диагонали

Begin

k:= Massiv[i,j]; транспонирование массива с использованием

Massiv[i,j]:= Massiv[j,i]; алгоритма циклического обмена

Massiv[j,i]:= k; значениями двух переменных через третью

WriteLn(‘Транспонированный массив:’);

For i:=1 To n Do

Begin

For j:=1 To n Do

Write(Massiv[i, j]:5);

WriteLn;

14. Задать элементы целочисленного массива massivnm случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Сдвинуть столбцы массива на шаг вправо, причем последний столбец должен встать на место первого.

Решение задачи заключается в запоминании элементов последнего столбца и последующем сдвиге элементов каждой строки на шаг вправо. Запомненный элемент становится на первое место в текущей строке:

Const n = 5;

m = 6;

mass_min = -50;

mass_max = 50;

Var i, j, k, posl : Integer;

Massiv : Array [1..n, 1..m] Of Integer;

For i:=1 To n Do

For j:=1 To m Do

Massiv[i, j]:= Random(mass_max – mass_min + 1) + mass_min;

WriteLn(‘Исходный массив:’);

For i:=1 To n Do

Begin

For j:=1 To m Do

Write(Massiv[i, j]:5);

WriteLn;

For i:=1 To n Do перебираем строки массива

posl:= Massiv[i, m]; запоминаем последний элемент строки

For j:=m DownTo 2 Do

Begin

k:= Massiv[i,j]; сдвигаем элементы строки на шаг Massiv[i,j]:= Massiv[i, j-1]; вправо

Massiv[i, j-1]:= k;

Massiv[i,1]:= posl; вставляем последний элемент
на первое место в строке

End; конец цикла по строкам

WriteLn(‘Полученный массив:’);

For i:=1 To n Do

Begin

For j:=1 To m Do

Write(Massiv[i, j]:5);

WriteLn;

15. Задать элементы целочисленного квадратного массива massivnn случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Повернуть массив на 900 по часовой стрелке, например:

Для выполнения этой операции массив сначала транспонируют, а затем применяют для каждой строки поплавок – переворачивают строки:

Const n = 5;

mass_min = -50;

mass_max = 50;

Var i, j, k, m : Integer;

Massiv : Array [1..n, 1..n] Of Integer;

For i:=1 To n Do

For j:=1 To n Do

Massiv[i, j]:= Random(mass_max – mass_min + 1) + mass_min;

WriteLn(‘Исходный массив:’);

For i:=1 To n Do

Begin

For j:=1 To n Do

Write(Massiv[i, j]:5);

WriteLn;

For i:=1 To n Do строки начинаем с первой

For j:=i To n Do столбцы начинаем с главной диагонали

Begin

k:= Massiv[i,j]; транспонирование массива с использованием

Massiv[i,j]:= Massiv[j,i]; алгоритма циклического обмена

Massiv[j,i]:= k; значениями двух переменных через третью

WriteLn(‘Транспонированный массив:’);

For i:=1 To n Do

Begin

For j:=1 To n Do

Write(Massiv[i, j]:5);

WriteLn;

For i:=1 To n Do перебираем строки массива

For j:=1 To m Do переворачиваем каждую строку

k:= Massiv[i,j];

Massiv[i,j]:= Massiv[i, n – j + 1];

Massiv[i, n – j + 1] := k;

WriteLn(‘Полученный массив:’);

For i:=1 To n Do

Begin

For j:=1 To n Do

Write(Massiv[i, j]:5);

WriteLn;

16.Задать элементы целочисленного массива massivnm случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Определить седловую точку массива. Седловой точкой массива называется элемент, наименьший в своей строке и одновременно наибольший в своем столбце:

Const n = 5;

m = 10;

mass_min = -50;

mass_max = 50;

Var i, j, k, i_max, j_min : Word;

min, max : Integer;

Massiv : Array [1..n, 1..m] Of Integer;

For i:=1 To n Do

For j:=1 To m Do

Massiv[i, j]:= Random(mass_max – mass_min + 1) + mass_min;

WriteLn(‘Исходный массив:’);

For i:=1 To n Do

Begin

For j:=1 To m Do

Write(Massiv[i, j]:5);

For i:=1 To n Do перебираем строки массива

min:= Massiv[i,1];

j_min:= 1; номер столбца с минимальным элементом в этойстроке

For j:=2 To m Do

If (Massiv[i,j] < min) Then

Begin

min:= Massiv[i,j];

j_min:= j;

max:= Massiv[1, j_min]; ищем максимальный элемент в столбце,

i_max:= 1; содержащем минимальный элемент этой строки

For k:=2 To n Do

If (Massiv[k,j_min] > max) Then

Begin

max:= Massiv[k,j_min];

i_max:= k;

If (i = i_max) Then

WriteLn(‘Номер строки=’,i,

‘ Номер столбца=’,j_min,

‘ Седловая точка=’, Massiv[i, j_min]);

End; конеццикла по строкам

17. Задать элементы целочисленного квадратного массива ann случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Заполнить вектор vk суммами элементов исходного массива, расположенных параллельно побочной диагонали (k = 2n – 1).

Для решения этой задачи рассмотрим исходный массив поэлементно:

a11 a12 a13 a14 . . . a1n

a21 a22 a23 a24 . . . a2n

a31 a32 a33 a34 . . . a3n

an1 an2 an3 an4 . . . ann

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

v1 = a11 сумма индексов элемента 1 + 1 = 2

v2 = a21 + a12 сумма индексов элементов 1 + 2 = 3

v2 = a31 + a22 + a13 сумма индексов элементов 1 + 3 = 4

v2n-1 = ann сумма индексов элемента n + n = 2n

Таким образом, сумма индексов элементов массива, входящих в сумму элементов, на единицу меньше индекса соответствующего элемента вектора:

Const n = 5;

k = 2*n - 1;

mass_min = -50;

mass_max = 50;

Var i, j, t : Integer;

vector : Array [1..k] Of Integer;

a : Array [1..n, 1..n] Of Integer;

For i:=1 To n Do

For j:=1 To n Do

a[i, j]:= Random(mass_max – mass_min + 1) + mass_min;

WriteLn(‘Исходный массив:’);

For i:=1 To n Do

Begin

For j:=1 To n Do

Write(a[i, j]:5);

WriteLn;

For i:=1 To k Do обнуляем выходной вектор

vector [i]:= 0;

For i:=1 To n Do

For j:=1 To n Do

t:= i + j - 1; определяем индекс элемента вектора

vector[t]:= vector[t] + a[i,j]; вычисляем сумму элементов массива

WriteLn(‘Полученный вектор’);

For i:=1 To k Do

Write(vector[i]:5);

18. Задать элементы целочисленного квадратного массива ann случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Заполнить вектор vk суммами элементов исходного массива, расположенных параллельно главной диагонали (k = 2n – 1).

Для решения этой задачи рассмотрим исходный массив поэлементно:

a11 a12 a13 a14 . . . a1n

a21 a22 a23 a24 . . . a2n

a31 a32 a33 a34 . . . a3n

an1 an2 an3 an4 . . . ann

Заменим элементы исходного массива элементами вычисляемого вектора:

vn vn-1 vn-2 vn-3 . . . v2 v1

vn+1 vn vn-1 vn-2 . . . v3 v2

vn+2 vn-1 vn vn-2 . . . v4 v3

V2n-1 v2n-2 v2n-3 v2n-4 . . . vn+1 vn

Алгоритм очевиден:

Const n = 5;

k = 2*n - 1;

mass_min = -50;

mass_max = 50;

Var i, j, m, t : Integer;

vector : Array [1..k] Of Integer;

a : Array [1..n, 1..n] Of Integer;

For i:=1 To n Do

For j:=1 To n Do

a[i, j]:= Random(mass_max – mass_min + 1) + mass_min;

WriteLn(‘Исходный массив:’);

For i:=1 To n Do

Begin

For j:=1 To n Do

Write(a[i, j]:5);

WriteLn;

For i:=1 To k Do обнуляем выходной вектор

vector[i]:= 0;

For i:= 1 To n Do

m:= m+1;

For j:=1 To n Do

vector[t]:= vector[t] + a[i,j];

WriteLn(‘Полученный вектор’);

For i:=1 To k Do

Write(vector[i]:5);

19.Задать элементы целочисленного трехмерного массива massivknm по слоям в виде чисел от 1 до k*n*m . Вывести на экран верхнюю, переднюю и правую грани массива:

 

Const k = 3; количество слоев

n = 4; количество строк в слое

m = 5; количество столбцов в слое

Var i, j, b, c : Word;

Massiv : Array [1..k, 1..n, 1..m] Of Word;

Begin порядок следования индексов: слой, строка,столбец

c:= 0; рабочая переменная для задания элементов массива

For i:=1 To k Do заполнение слоев массива

For j:=1 To n Do заполнение строк массива

For b:=1 To m Do заполнение столбцов массива

c:= c + 1;

Massiv[i, j, b]:= c;

WriteLn('Верхняя грань:');

For i:=1 To n Do

For j:=1 To m Do

Write(Massiv[1, i, j]:5);

WriteLn('Передняя грань:');

For i:=1 To k Do

For j:=1 To m Do

Write(Massiv[i, n, j]:5);

WriteLn('Правая грань:');

For i:=1 To k Do

For j:=1 To n Do

Write(Massiv[i, j, m]:5);

 

Результат работы программы:

Верхняя грань:

1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

16 17 18 19 20

 

Передняя грань:

16 17 18 19 20

36 37 38 39 40

56 57 58 59 60

 

Правая грань:

5 10 15 20

25 30 35 40

45 50 55 60

Часто встречающиеся ошибки программирования:

1. Заголовок цикла заканчивается точкой с запятой. Это приводит к тому, что цикл отрабатывает пустой оператор заданное количество раз, и после этого один раз вычисляется тело цикла:

For i := 1 To 100 Do;

s := s + i; в этом случае s = 100

2. При использовании слова To конечное значение параметра цикла превосходит его начальное значение. В этом случае цикл не выполняется ни разу:

For i := 100 To 1 Do

s := s + i; в этом случае s = 0

3. Использование в качестве параметра цикла переменной вещественного типа:

For i := 1.0 To 100.0 Do

s := s + i;

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

For j := m DownTo n Do

a[j] := j + 10;

j := j + 1; ошибка!

m := m + 1; ошибка!

n := n – 1; ошибка!

 

 

Множества – это структуры данных, наряду с переменными, массивами и строками.

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

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

Под множеством в Паскале понимается неупорядоченный набор фиксированного количества (не более 255) неповторяющихся однотипных элементов, имеющих общее имя – имя множества.

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

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

1. целого (множество целых чисел, не более 255 чисел),

2. логического (множество, состоящее из двух логических констант: TRUE и FALSE),

3. символьного (множество символов таблицы ASCII),

4. перечисляемого,

5. интервального.

Таким образом, в Паскале не определено множество, состоящее из чисел с дробной частью (REAL).

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

1. объявлением его имени и типа в разделе описания переменных Var :

Var r : Set Of ‘a ’. . ’c’;

d : Set Of 1 . . 4;

Описано множество r символов алфавита от ‘a’ до ‘c’ и множество d целых чисел 1, 2, 3, 4.

Внимание! Между начальным и конечным значениями интервала ставятся две точки!

2. объявлением типа множества в разделе определения типов Type и его имени – в разделе описания переменных Var :

Type TSymb = Set Of ‘a’ . . ‘c’;

TNumb = Set Of 1 . . 4;

Var r : TSymb;

d : TNumb;

3. заданием множества как типизированной константы:

Constr : Set Of ‘a ’. . ’c’ = [‘a’,’c’];

d : Set Of 1 . . 4 = [2,1,3];

Внимание! Элементы множества перечисляются в квадратных скобках через запятую.

Элементы множества можно задавать следующими способами:

a)перечислением отдельных его значений:

[‘c’, ‘a’, ‘e’] [76, 102, 5, 12]

b)интервалом базового типа:

[25..45, 3..10] [‘a’..’d’, ‘k’..’n’]

c)выражениями базового типа:

[Ord(109),’s’] [Succ(3), Pred(9), Round(Sin(1.0))]

Множество может принимать значения любых наборов элементов, указанных в его описании. Например, описанное ранее множество r может принимать следующие значения:


[‘a’, ‘b’, ‘c’]

[‘a’, ‘b’]

[‘a’, ‘c’]

[ ‘b’, ‘c’]

[‘a’]

[ ‘b’]

[ ‘c’]

[] пустое множество


а множество d - следующие:


[1, 2, 3, 4]

[1, 2, 3]

[1, 3, 4]

[1, 2, 4]

[2, 3, 4]

[1, 2]

[1, 3]

[1, 4]

[2, 3]

[2, 4]

[3, 4]

[1]

[2]

[3]

[4]

[]


Таким образом, любое множество может принимать 2n значений, где n – количество элементов в описании множества.

Порядок следования элементов во множестве не устанавливается, поэтому, например, значения множества [‘a’, ‘b’, ‘c’] и [‘b’, ‘c’, ‘a’] эквивалентны.

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

+ объединение (сумма) множеств,

* пересечение (произведение) множеств,

- разность множеств,

Inвхождение элемента во множество.

Пересечением двух множеств называется множество, состоящее из элементов, одновременно входящих в оба множества-сомножителя:

[3, 4, 5] * [1, 3, 5] = [3]

[3, 4, 5] * [3, 4, 5] = [3, 4, 5]

[2, 1, 0] * [] = []

[2, 9, 8] * [6, 7] = [] пустое множество

[‘a’, ‘b’, ‘c’] * [‘d’, ‘c’, ‘a’] = [‘a’, ‘c’]

Объединением двух множеств называется множество, состоящее из элементов, входящих хотя бы в одно из множеств-слагаемых:

[3, 4, 5] + [1, 3, 5] = [1, 3, 4, 5]

[2, 9, 8] + [] = [2, 9, 8]

[1, 2, 3] + [1, 2, 3] = [1, 2, 3]

[‘a’, ‘b’, ‘c’] + [‘d’, ‘c’, ‘a’] = [‘a’, ’b’, ‘c’, ‘d’]

Разностью двух множеств называется множество, состоящее из элементов множества-уменьшаемого без элементов множества-вычитаемого:

[3, 4, 5] – [1, 3, 5] = [4]

[2, 9, 5] – [3, 7] = [2, 9, 5]

[2, 4] – [5, 4, 2] = []

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

([3, 4, 5] + [1, 3, 6, 7]) * [5, 6, 7] – [6] = [5, 7]

Пример: в группе 12 студентов. Заданы множества номеров студентов:

1. множество спортсменов sport = [1, 2, 3, 4, 5]

2. множество отличников otl = [2, 3, 6, 7]

3. множество курящих smok = [7, 8]

Определить:

1. множество спортсменов-отличников:

sport * otl = [1, 2, 3, 4, 5] * [2, 3, 6, 7] = [2, 3]

2. множество спортсменов или отличников:

sport + otl = [1, 2, 3, 4, 5] + [2, 3, 6, 7] = [1, 2, 3, 4, 5, 6, 7] = [1 . . 7]

3. множество курящих спортсменов:

sport * smok = [1, 2, 3, 4, 5] * [7, 8] = [] - пустое множество – спортсмены не курят!

4. множество некурящих отличников:

otl – smok = [2, 3, 6, 7] – [7, 8] = [2, 3, 6]

Для проверки вхождения какой-либо константы или переменной в определенное множество используется операция In , результатом которой является TRUE, если это значение входит во множество, и FALSE – если не входит:

5 In [1, 5, 7] = TRUE

‘b’ In [‘a’, ‘c’, ‘d’] = FALSE

Наряду с этими операциями, над множествами определены и операции сравнения, используемые для сравнения однотипных множеств. Пусть A и B -два однотипных множества, тогда:

A <= B равно TRUE, если все элементы множества A входят во множество B:

[5, 3, 2] <= [1, 2, 3, 4, 5] = True

A >= B равно TRUE, если все элементы множества B входят во множество A:

[‘d’, ‘e’, ‘f’, ‘g’] >= [‘d’, ‘g’] = True

A = B равно TRUE, если элементы этих множеств полностью совпадают:

[1, 2, 3] = [3, 2, 1] = TRUE

A <> B равно TRUE, если эти множества различаются хотя бы одним элементом:

[1, 2, 3] <> [5, 2, 1] = TRUE

Выражения со множествами, построенные с помощью операций *, + и - , могут быть использованы в операторах присваивания вида:



<== предыдущая лекция | следующая лекция ==>
Case (Month) Of | Типизированные файлы


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


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

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

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


 


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

 
 

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

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