Лекция_4_TP.ppt
- Количество слайдов: 32
Оператор безусловного перехода GOTO Общий вид оператора GOTO: GOTO < Метка > Метка это идентификатор с двоеточием, стоящий перед оператором, который должен быть выполнен после оператора GOTO. 1
Пример 7. Найти частное от деления целых чисел. Program Example_7 ; Label Out ; Var x, y, Rez : Integer ; Begin Write. Ln(‘Введите делимое’) ; Read. Ln( x ) ; Write. Ln(‘Введите делитель’) ; Read. Ln( y ) ; 2
Программа (продолжение) If y = 0 Then begin Write. Ln(‘Деление на ноль’) ; Goto Out ; end ; Rez : = x div y ; Write. Ln(‘Частное равно: ’, Rez) ; Out : { метка “пустого” оператора } End. 3
Пустой оператор не выполняет никакого действия и никак не отображается в программе ( за исключением, быть может, метки или точек с запятыми, отделяющих пустой оператор от предыдущих или последующих операторов). Он может потребоваться для осуществления на него безусловного перехода. 4
Составной оператор Begin < оператор 1 > ; < оператор 2 > ; . . . < оператор N > End ; 5
Структурированный оператор • • Составной оператор Условный оператор IF Условный оператор CASE Оператор цикла FOR Оператор цикла REPEAT Оператор цикла WHILE Оператор над записями WITH 6
МАССИВЫ Объявление массива Имя : Array [ нижний _индекс. . верхний индекс ] of Тип ; где Имя имя переменной-массива; Array ключевое слово, обозначающее, что переменная является массивом; нижний_индекс и верхний_индекс целые числа, определяющие диапазон изменения индексов (номеров) элементов массива и, неявно, количество элементов (размер) массива; Тип тип элементов массива. 7
Массив может быть одномерным и многомерным Примеры: Var a, b : array [1. . 5] of real ; c, d : array [-7. . 3] of integer ; Var a : array [0. . 3] of array [5. . 7] of real; или Var a: array [0. . 3, 5. . 7] of real ; 8
Следует соблюдать следующие правила: 1. Нижняя граница диапазона должна быть не больше верхней. 2. Между верхней и нижней границами диапазонов ставятся две точки и не должно быть никаких пробелов. 3. У многомерных массивов диапазоны разделяются запятыми, количество измерений неограничено ( за исключением, конечно, правила о 65520 байтах). 4. Границы диапазонов находятся в пределах либо -32768. . 32767, либо 0. . 65535. 5. В качестве границ диапазонов могут использоваться не только числа, но и определенные к этому моменту константы. 9
Например, описание массивов Var a, c : array [1. . 3] of real ; b, d : array [5. . 7, 1. . 3] of real и Const k 1 = 1 ; k 2 = 3 ; l 1 = 5, l 2 = 7; Type vector = array [k 1. . k 2] of real ; matrix = array [l 1. . l 2] of vector; Var a, c : vector; b, d : matrix эквивалентны между собой. 10
Почти все действия с массивами осуществляются поэлементно, например: a[2] : =3; read(b[5, 6]) ; a[2] : = c[3] + d[7] ; Write. Ln(c[3] : 5 : 2, c[3] - d[5] : 5 : 1); 11
Пример: Var A, B : Array[1. . 7] of real; C : Array[1. . 7] of real; Операторы A : = B; B : = A; верны, а оператор A : = C ; не верен. 12
Некоторые типичные действия с массивами • • • вывод массива; ввод массива; поиск в массиве заданного элемента; поиск в массиве максимального или минимального элемента; сортировка массива. 13
Пример 8. Создать два одномерных массива по правилам и образовать из них двумерный массив по правилу , где ; . 14
Блок-схема 15
Программа: program Vector_Matrix; Var {Описание переменных} A : array[1. . 6] of real ; B : array[3. . 7] of real ; C : array[1. . 6, 3. . 7] of real ; i, j : Integer; { начало основного блока } BEGIN for i: = 1 to 6 do for j : = 3 to 7 do begin a[i] : = exp(i*ln(2)) ; {Вычисление элементов массива A} b[j] : = sqr(j) ; {Вычисление элементов массива B} c[i, j] : = a[i] + b[j] ; {Вычисление элементов массива C} end; 16
Программа (продолжение) {Выводим массив A} Write. Ln('Массив A') ; for i: = 1 to 6 do Write(a[i]: 4: 1, ' '); Write. Ln ; {перевод курсора на следующую строку} {Выводим массив B} Write. Ln('Массив B') ; for j: = 3 to 7 do Write(b[j]: 4: 1, ' ') ; Write. Ln ; {перевод курсора на следующую строку} {Выводим массив C} Write. Ln('Массив C') ; for i: = 1 to 6 do begin for j : = 3 to 7 do Write(c[i, j]: 5: 1, ' ') ; Write. Ln ; {перевод курсора на следующую строку} end; End. 17
Вид печати: Массив A 2. 0 4. 0 8. 0 16. 0 32. 0 64. 0 Массив B 9. 0 16. 0 25. 0 36. 0 49. 0 Массив C 11. 0 18. 0 27. 0 38. 0 51. 0 13. 0 20. 0 29. 0 40. 0 53. 0 17. 0 24. 0 33. 0 44. 0 57. 0 25. 0 32. 0 41. 0 52. 0 65. 0 41. 0 48. 0 57. 0 68. 0 81. 0 73. 0 80. 0 89. 0 100. 0 113. 0 18
Поиск минимального (максимального) элемента массива Пример: Дан одномерный массив из десяти целых чисел Определить минимальный элемент в массиве 19
Блок-схема 20
Программа: Program Example ; Var A : Array[1. . 10] of integer ; { массив целых чисел ] ; Min : Integer ; { номер минимального элемента массива } i : Integer ; { номер элемента сравниваемого с минимальным} Begin Write. Ln(‘ Введите 10 целых чисел в одной строке через пробел ‘) ; for i : =1 to 10 do Read. Ln(A[i]) ; { Ввод массива целых } Min : = A[1] ; for i : = 2 to 10 do if A[i] < Min then Min : = A[i] ; Write. Ln(‘ Минимальный элемент массива : ‘, Min: 3) ; End. 21
Сортировка массива Пример. Задан двумерный массив где ; по правилу Упорядочить массив A по возрастанию элементов дробной части третьего столбца. Вывести на печать исходный и отсортированный массивы. 22
Блок-схема 23
Программа: program Sortirovka; TYPE Matrix=array [1. . 9, 1. . 6] of real; VAR a : Matrix; R : Real; k, i, j : Integer; BEGIN for i: =1 to 9 do for j: =1 to 6 do a[i, j]: = ln(i+j); {Вычисляем элементы массива} } { Печатаем массив в виде таблицы } Write. Ln('Матрица A' ; for i: =1 to 9 do begin for j: =1 to 6 do write(a[i, j]: 6: 3, ' '); { Вывод на экран массива A } writeln; end ; 24
Программа (продолжение): writeln; {Пропуск пустой строки} for i: =2 to 9 do for j: =9 downto i do if Frac(a[j-1, 3]) > Frac(a[j, 3]) then for k : = 1 to 4 do do {Перестановка строк} begin R : = a[j-1, k] ; a[j-1, k] : = A[j, k] ; a[j, k] : = R; end; Write. Ln(‘Отсортированная матрица A имеет вид ') ; for i: =1 to 9 do begin for j: =1 to 6 do write(a[i, j]: 6: 3, ' '); {Вывод на экран отсортированного массива A} writeln; end ; End. 25
Матрица A 0. 693 1. 099 1. 386 1. 609 1. 792 1. 946 2. 079 2. 197 2. 303 2. 398 2. 485 2. 565 1. 792 1. 946 2. 079 2. 197 2. 303 2. 398 2. 485 2. 565 2. 639 2. 708 Отсортированная матрица A имеет вид 1. 792 1. 946 2. 079 2. 197 2. 303 1. 946 2. 079 2. 197 2. 303 2. 398 2. 079 2. 197 0. 693 1. 099 1. 386 1. 609 2. 197 2. 303 2. 398 2. 485 2. 565 2. 398 2. 485 1. 099 1. 386 1. 609 1. 792 2. 485 2. 565 1. 386 1. 609 1. 792 1. 946 2. 565 2. 639 1. 609 1. 792 1. 946 2. 079 2. 639 2. 708 26
27
Блок-схема 28
Программа: program Matr; TYPE Matrix=array [2. . 7, 1. . 9] of real; VAR a : Matrix; sum, Max : Real; N_Max : Integer; i, j : Integer; BEGIN for i: =2 to 7 do for j: =1 to 9 do a[i, j]: = sin(i+j) + cos(i-j); {Вычисление элементов массива} 29
Программа (продолжение): { Печатаем массив в виде таблицы } Write. Ln('Массив A') ; for i: =2 to 7 do begin for j: =1 to 9 do write(a[i, j]: 6: 3, ' '); writeln; {перевод курсора на следующую строку} end ; sum: =0; { Обнуляем переменную для подсчета суммы } for i: =2 to 7 do begin if odd(i)=false then begin { Присваиваем максимуму значение первого элемента в столбце } Max : = a[i, 1]; 30
Программа (окончание): { Ищем максимальный элемент и его номер, начиная со следующей строки } for j: =2 to 9 do if Max < a[i, j] then begin Max : = a[i, j] ; N_Max : = j ; end ; sum : = sum + Max; Write. Ln(i: 2, ' строка: ', ' наибольший элемент в ', N_Max: 1, ' столбце ', 'равен ', Max: 6: 3) ; end; Write. Ln('сумма наибольших элементов равна ', sum: 6: 3) ; End. 31
Результаты работы программы: Массив A 0. 681 0. 243 -0. 419 -0. 696 -0. 333 0. 336 0. 696 0. 416 -1. 173 -0. 419 0. 721 1. 197 0. 573 -0. 578 -1. 198 -0. 716 -1. 949 -0. 696 1. 197 1. 989 0. 952 -0. 960 -1. 990 -1. 190 -0. 933 -0. 333 0. 573 0. 952 0. 456 -0. 460 -0. 953 -0. 570 0. 941 0. 336 -0. 578 -0. 960 -0. 460 0. 463 0. 960 0. 574 1. 950 0. 696 -1. 198 -1. 990 -0. 953 0. 960 1. 991 1. 191 2 строка: наибольший элемент в 7 столбце равен 0. 696 4 строка: наибольший элемент в 4 столбце равен 1. 989 6 строка: наибольший элемент в 7 столбце равен 0. 960 сумма наибольших элементов равна 3. 645 -0. 246 0. 424 0. 704 0. 337 -0. 340 -0. 704 32
Лекция_4_TP.ppt