Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Работа N3. Обработка массивов




Работа N 1. Разветвления

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

Условный оператор может принимать одну из двух конструкций:

 

IF B THEN S1 ELSE S2 IF B THEN S1

 

где B - логическое выражение, а S1, S2 - операторы. Эти операторы могут быть простыми или составными (т.е. сгруппированными вместе при помощи операторных скобок Begin End).

В первом варианте если логическое выражение истинно, то выполняется оператор S1, если логическое выражение ложно, то выполняется оператор S2.

 

Пример. Вычислить A=k+40, если 15<k<25. При всех других значениях k A=20*k.

Условный оператор имеет вид

If (k>15) And (k<25) Then A:= K+40 Else A:= 20*k

Другой вариант решения этой же задачи предполагает использование краткой формы условного оператора

A:= 20*k

If (k>15) And (k<25) Then A:=K+40

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

 

Case (селектор) OF (список констант 1): (Оператор 1); (список констант 2): (Оператор 2); ........... (список констант N): (Оператор N); End;

 

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

 

Пример. Пусть k - переменная целого типа.

Case k of

1: A:=Sin(x);

2, 3: A:=Sin(x)+2;

4..10, 15: A:=Cos(x)+Sin(x);

End;

Если требуется нарушить естественный порядок выполнения операторов можно воспользоваться оператором безусловного перехода, имеющим вид GOTO (Метка)

Метка является числом или идентификатором, описанным в разделе описания меток, например

Label 10, 20, Lab1, Metka;

 

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

 

Задание. Напишите программу решения задачи, с использованием операторов организующих разветвления.

 

Варианты заданий.

 

1. Если сумма трех попарно различных чисел x, y, z меньше 10, то наименьшее из этих трех чисел заменить полусуммой двух других, в противном случае заменить меньшее из x и y полусуммой двух оставшихся значений.

 

2. Для заданного числа a найти корень уравнения f(x)=0, где

3. Дано число х. Напечатать в порядке возрастания числа ch(x), 1+│x│, (1+x2)x.

 

4. Даны числа A1, B1, C1, A2, B2, C2. Напечатать координаты точки пересечения прямых, описываемых уравнениями A1*X + B1*Y + C1 = 0 A2*X + B2*Y + C2 = 0 либо сообщить, что эти прямые совпадают, не пересекаются либо вообще не существуют.

 

5. Даны произвольные числа a, b, c. Если нельзя построить треугольник с такими длинами сторон, то сообщить об этом, в противном случае сообщить является ли треугольник равносторонним, равнобедренным или треугольником общего вида.

 

6. Даны действительные числа x, y. Определить принадлежит ли точка с координатами (x, y) заштрихованной части плоскости рис.1, а.

7. Даны действительные числа x, y. Определить принадлежит ли точка с координатами (x, y) заштрихованной части плоскости рис.1, б.

 

8. Даны действительные числа x, y. Определить принадлежит ли точка с координатами (x, y) заштрихованной части плоскости рис.1, в.

9. Даны действительные числа x, y. Определить принадлежит ли точка с координатами (x, y) заштрихованной части плоскости рис.1, г.

 

10. Даны действительные числа x, y. Определить принадлежит ли точка с координатами (x, y) заштрихованной части плоскости рис.1, д.

 

11.Даны действительные числа x, y. Определить принадлежит ли точка с координатами (x, y) заштрихованной части плоскости рис.1, е.

 

12.Даны действительные числа x, y. Определить принадлежит ли точка с координатами (x, y) заштрихованной части плоскости рис.1, ж.

 

13.Даны действительные числа x, y. Определить принадлежит ли точка с координатами (x, y) заштрихованной части плоскости рис.1, з.

14.Пусть D-заштрихованная часть плоскости (рис 2. а) и пусть U определяется по x, y следующим 0, если (x, y)ÎD, u= x, в противном случае. Даны действительные числа х,у. Определить U.

 

15.Пусть D-заштрихованная часть плоскости (рис 2. б) и пусть U определяется по x, y следующим образом-3, если (x, y) ÎD, u= y*y, в противном случае. Даны действительные числа х,у. Определить U.

 

16.Пусть D-заштрихованная часть плоскости (рис 2. б) и пусть U определяется по x, y следующим образом
x-y, если (x, y) ÎD, u= y*x+7, в противном случае. Даны действительные числа х,у. Определить U.

 

17.Пусть D-заштрихованная часть плоскости (рис 2. б) и пусть U определяется по x, y следующим образом x*x-1, если (x, y) ÎD, u= │x-1│, в противном случае. Даны действительные числа х,у. Определить U.

 

18.Пусть D-заштрихованная часть плоскости (рис 2. б) и пусть U определяется по x, y следующим образом x*x-1│, если (x, y) ÎD, u= x+y, в противном случае. Даны действительные числа х,у. Определить U.

 

19.Пусть D-заштрихованная часть плоскости (рис 2. б) и пусть U определяется по x, y следующим образомx+y, если (x, y) ÎD, u= x-y, в противном случае. Даны действительные числа х,у. Определить U.

 

20.Известно, что астрологи делят год на 12 периодов и каждому из них ставят в соответствие один из знаков Зодиака.

 

20.01 - 18.02 - Водолей   23.07 - 22.08 - Лев
19.02 - 20.03 - Рыбы   23.08 - 22.09 - Дева
21.03 - 19.04 - Овен   23.09 - 22.10 - Весы
20.04 - 20.05 - Телец   23.10 - 22.11 - Скорпион
21.05 - 21.06 - Близнецы   23.11 - 21.12 - Стрелец
22.06- - 22.07 - Рак   22.12 - 19.01 - Козерог

Напишите программу, которая вводит дату некоторого дня года и печатает название соответствующего знака Зодиака.

Работа N2. Циклы.

Сочетания цикла и разветвления.

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

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

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

Форма записи оператора цикла с предусловием:

 

While <логическое выражение> do begin <операторы циклической части> end;

 

Например, найти наименьшее положительное число для данной ЭВМ.

Program MinEps;

var Eps, Eps_Min: real;

begin

Eps:=1;

While Eps>0 do {Заголовок оператора цикла}

begin

Eps_Min:=Eps; {Тело оператора цикла }

Eps:=Eps/2;

end;

writeln('Eps_Min=', Eps_Min);

end.

Форма записи оператора цикла с постусловием:

Repeat < операторы циклической части> Until < логическое выражение >

 

Например, найти наименьшее положительное число для данной ЭВМ.

Program MinEps;

var Eps_Min: real;

begin

Eps_Min:=1;

Repeat {Заголовок оператора цикла}

Eps_Min:=Eps_Min/2; {Тело оператора цикла }

Until Min_Eps/2=0;

writeln('Eps_Min=', Eps_Min);

end.

 

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

1. используется при изменении переменной цикла i по возрастанию

 

For i:=m1 to m2 do begin <операторы циклической части> end;

 

2. используется при изменении переменной цикла i по убыванию

 

For i:=m1 Downto m2 do begin <операторы циклической части> end;

 

Например, вычислить сумму первых 10 натуральных чисел

Program Sum10;

var i, Sum:integer;

begin

Sum:=0;

For i:=1 to 10 do

Sum:=Sum+i;

writeln('Сумма=', Sum);

end.

Замечание. Если циклическая часть оператора цикла состоит из одного оператора, операторные скобки Begin - End можно не использовать.

 

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

ЗАДАНИЕ. Напишите программу решения задачи, с использованием операторов организующих циклические вычисления.

 

ВАРИАНТЫ ЗАДАНИЙ.

1. Дано натуральное число N. Вычислить

 

2. Дано натуральное число N. Вычислить N корней

3. Дано натуральное число n. Вычислить

 

4. Дано натуральное число n. Вычислить a (a+1)... (a+n-1)

 

5. Дано натуральное число N и действительное число x. Вычислить Sin(x)+Sin2(x)+…+Sinn(x).

 

6. Дано натуральное число N. Сколько цифр в числе N

 

7..Дано натуральное число N. Вычислить сумму его цифр.

 

8. Пусть A 0=1, Ak=k*Ak-1+1/k, k=1,2,...Для заданного k получить A­k.

 

9. Дано натуральное число n и действительное число a. Получить a*(a+1)*(a+2)*…*(a+n-1)/

 

10. Вычислить

10. Вычислить

11. Вычислить

12. Вычислить

13. Вычислить

14. Дано натуральное число n. Получить все натуральные числа, меньшие n и взаимно простые с ним.

 

15. Дано натуральное число n. Получить все простые делители этого числа.

 

16. Найти натуральное число от 1 до 10000 с максимальной суммой делителей.

 

17. Даны целые числа P, Q. Получить все делители числа Q взаимно простые с Р.

 

18. Найти первые 100 простых чисел.

 

19. Натуральное число называется совершенным, если оно равно сумме всех своих делителей, за исключением себя самого. Число 6 - совершенное, так как 6=1+2+3. Число 8 - не совершенное, так как 8<>1+2+4. Дано натуральное n. Получить все совершенные числа, меньшие n.

 

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

Работа N3. Обработка массивов.

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

Type

T1 = Array [1..N] of Integer;

T2 = Array [1..5] of Char;

Var

A:T1; {описан массив с именем A}

B:T2; {описан массив с именем B}

C: Array [1..25] of Real; {описан массив с именем C }

Возможно использование многомерных массивов, т.е. массивов. Двумерные массивы еще называют матрицами. Описание многомерных массивов может иметь вид:

Type

T1 = Array [1..N, 1..4] of Integer;

Var

A:T1; {описана матрица с именем A размера N*4}

B: Array [1..5, 1..4] of Real {описана матрица B ра змера 5*4}

Рассмотрим некоторые простейшие алгоритмы обработки массивов:

Ввод-вывод массивов.

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

Program Example1;

Uses Crt;

Const n=5;

Var A: Array [1..n] of Integer;

i: Integer;

Begin

ClrScr;

{Writeln (' Введите элементы массива ');

For i:=1 to n do

Begin

Write('A[',i,']=');

Readln(a[i]);

End;

{Вывод элементов массива}

Writeln(' Массив A');

For i:=1 to n do Writeln(a[i]:5);

Readln;

End.

Поиск минимального в массиве.

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

Max:=A[1];

IndexMax:=1;

For i:=2 to n do

If Max<A[i] then

begin

Max:=A[i];

IndexMax:=i;

end;

Результат работы содержится в переменных: Max - наибольший элемент массива, IndexMax - номер этого элемента в массиве.

 

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

Задания.

1. Даны действительные числа A[1900], A[1901].A[1950] - количество осадков в мм, выпавших в Симферополе в течении первых 50 лет. Надо вычислить среднее количество осадков и отклонение от среднего для каждого года.

 

2. Даны действительные числа A[1],A[2],A[3],...,A[2*n]. Переставить числа в следующем порядкe A[1],A[n+1],A[2],A[n+2],A[n],A[2*n].

3. Даны действительные числа A[1],A[2],A[3],...,A[2*n]. Переставить числа в следующем порядкe A[1], A[2n], A[2], A[2n-1]...,A[n], A[n+1].

 

4. Даны действительные числа A[1],A[2],A[3],...,A[2*n]. Получить A[1]+A[2n],A[2]+A[2n-1],...,A[n] + A[n+1].

 

5. Даны действительные числа A[1],A[2],A[3],...,A[n].Если в результате замены отрицательных членов последовательности их квадратами члены будут организовывать неубывающую последовательность, то получить сумму членов исходной последовательности; в противном случае получить их произведение.

6. Даны действительные числа A[1],A[2],A[3],...,A[n].Получить новую последовательность, выбросив из исходной все члены созначением max(A[1],A[2],A[3],...,A[n]).

 

7. Даны действительные A[1],A[2],A[3],...,A[n].Все члены последовательности с четными номерами, предшествующие первому по порядку члену со значением Max(A[1],A[2],A[3],...,A[n]) умножить на Max(A[1],A[2],A[3],...,A[n].).

 

8. Даны целые числа A[1],A[2],A[3],...,A[n], каждое из которых отлично от нуля. Поменять местами наибольший член последовательности и член с номером M.

 

9. Даны целые числа A[1],A[2],A[3],...,A[n].Если в данной последовательности ни одно четное число не расположено после нечетного, то получить все отрицательные числа последовательности, иначе - все положительные. Порядок следования чисел в обоих случаях заменяется на обратный.

 

10. Даны целые числа A[1],A[2],A[3],...,A[n]. Наименьший член последовательности заменить целой частью среднего арифметического всех членов последовательности, остальные члены оставить без изменения. Если в последовательности несколькo членов со значением Min(A[1],A[2],A[3],...,A[n]), то заменить последний по порядку.

 

11. Даны целые числа A[1],A[2],A[3],...,A[n], каждое из которых является либо 0, либо 1, либо 2. Переставить числа так, чтобы сначала шли только 0, затем только 1, затем только 2.

 

12. Элементы массива Х преобразовать по следующему правилу (воспользоваться массивом У, как вспомогательным): все отрицательные элементы массива Х перенести в его начало, а все остальные - в конец, сохраняя исходное взаимное расположение как среди отрицательных, так и среди всех остальных элементов.

 

13. Элементы массива Х преобразовать по следующему правилу (воспользоваться массивом У, как вспомогательным): все элементы массива Х циклически сдвинуть вправо на k позиций.

 

14. Даны действительные числа A[1],A[2],A[3],...,A[n]. Найти сумму чисел этой последовательности, расположенных между максимальным и минимальным числами (в сумму включить и оба этих числа).

 

15. Даны две последовательности по 30 чисел в каждой. Найти наименьшее среди тех чисел первой последовательности, которые не входят во вторую последовательность (считая, что хотя бы одно такое число есть).

 

16. Даны целые числа A[1],A[2],A[3],...,A[n] (в этой последовательности могут быть повторяющиеся члены). Получить все числа последовательности, которые входят в нее по одному разу.

 

17. Построить пересечение последовательностей A[1],A[2],A[3],...,A[n] В[1],В[2],В[3],...В[n]. Т.е. получить в каком либо порядке числа, принадлежащие одновременно обеим последовательностям.

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

 

18. Даны целые числа A[1],A[2],A[3],...,A[n]. Для каждого из этих чисел выяснить сколько раз оно входит в эту последовательность. Результат представить в виде ряда строк, первая из которых есть А[1] - k, где k - есть число вхождений А[1] в последовательность. Вторая строка будет иметь вид А[i] - m, где А[i]- есть первый по порядку член, отличный от А[1], m – число вхождений этого члена в последовательность и т.д.

 

19. Даны целые числа A[1],A[2],A[3],...,A[n]. Получить новую последовательность, заменяя A[i] нулями, если │A[i]│<>Max(A[1],A[2],A[3],...,A[n]) и заменяя A[i] единицей в противном случае.

 

20. Даны целые числа A1,A2,... An. Оставить ее без изменения, если она упорядочена по неубыванию или по невозрастанию; в противном случае удалить из последовательности те члены, порядковые номера которых кратны четырем, сохранив прежним порядок оставленных членов.

 

 





Поделиться с друзьями:


Дата добавления: 2015-10-27; Мы поможем в написании ваших работ!; просмотров: 1263 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Не будет большим злом, если студент впадет в заблуждение; если же ошибаются великие умы, мир дорого оплачивает их ошибки. © Никола Тесла
==> читать все изречения...

2602 - | 2280 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.