Читайте также: |
|
1. Рассчитать средний балл по шести предметам для каждого из десяти учащихся. Массивы наименований предметов и фамилий учащихся задать в программе. Массив оценок "A" задать с использованием функции Random. Вывести на экран таблицу: Фамилии (по вертикали), предметы (по горизонтали), все оценки, а также колонку со средними значениями оценок каждого учащегося. Вывести фамилии учеников и наибольшим и наименьшим средним баллом.
2. Исходя из данных массива "A" п. 1, создать массивы "B", "C", "D", содержащие число пятерок, четверок и троек соответственно, полученных каждым учеником по всем шести предметам. Вывести на экран таблицу: фамилии, предметы, оценки с колонками данных массивов "B", "C", "D".
Примечание к п. п. 1- 2: Вывести гистограммы с указанием фамилии ученика и его среднего балла, либо число троек полученных по всем предметам.
3. Модифицировать массив. Исходные данные п. 1. Вставить в список учащихся новую фамилию ученика с номером 5. Фамилию и оценки ученика ввести оператором Read. Убрать из таблицы предмет с номером два. Вывести на экран исходную и новую таблицы - фамилии, предметы, массив оценок.
4. К заданию п. 1. Создать два массива оценок учеников с четными и нечетными номерами. Вывести на экран таблицы - массивы оценок для каждой группы с указанием предметов и фамилий учащихся.
5. К заданию п. 1. Создать и вывести на экран три таблицы фамилий учеников со средним баллом: от 3-х до 4-х (не включая 4), от 4-х до 5-ти и 5 (отличников) с указанием всех оценок и среднего балла.
6. К заданию п. 1. Создать и вывести на экран таблицу фамилий десяти учеников, имеющих пятерки по шести, пяти, и т. д. предметам в порядке убывания.
Для этого создать линейный массив "B" - число пятерок у каждого ученика. Создание нового массива фамилий "S1" можно проводить используя циклы: k:=0; for i:=1 to 10 do for o:=6 downto 0 do if B[i]=o then k:=k+1; S1[k]:=S[i];
Создание баз данных с использованием массивов записей
При работе с записями можно использовать массивы в полях записи или создавать массивы записей. Приведем примеры операторов для обоих случаев.
Type Pupil = Record
Fam: String[20]; { Фамилия }
Name: String[10]; { Имя }
Otmetka: array[1..5] of Byte { Отметки по пяти предметам }
End;
Var _10_A, _10_B: array[1..30]of Pupil; {Переменные типа массив записей }
N, i: byte; { N - Число учеников в классе }
Begin N:= 13;
_10_A[1]. Fam:= 'Гришин';
_10_A[1]. Name:= 'Анатолий';
{ и т. д. }
Writeln ('Введите оценки учеников по первому предмету: ');
For i:= 1 to N do begin
With _10_A[i] do Begin
Write(Fam:21, Name:11, '_');
Readln(Otmetka[1])
End
End
End.
{---------------------------------------------------------------- }
Type pupil = Record { массивы в полях записи }
Fam: array[1..30] of String[20]; { Фамилия }
Name: array[1..30] of String[10]; { Имя }
N: Byte; { Число учеников в классе }
Otmetka: array[1..5, 1..30] of Byte { Отметки по пяти предметам }
End;
Var _10_A, _10_B: Pupil; { Переменные типа запись }
I: byte;
Begin
With _10_A do Begin N:= 13;
Fam[1]:= 'Гришин';
Name[1]:= 'Анатолий'; { и т. д. }
Writeln ('Введите оценки учеников по первому предмету: ');
For i:= 1 to N do begin
Write(Fam[i]:21, Name[i]:11,'_');
Readln(Otmetka[1, i])
End
End
End.
Практическое задание N 1. 23
Создать базу данных для десяти учащихся класса с оценками по трем предметам. Вывести на экран таблицу учащихся в алфавитном порядке с оценками по всем предметам. Вывести на экран таблицу в порядке увеличения средней оценки ученика.
Работа с большими массивами
Поскольку суммарный размер всех переменных, описанных в программе, не может превышать длины сегмента (64 К), то использование массивов больших размеров вызывает определенные трудности. Опишем известный способ "разбиения" двумерного массива с использованием переменных типа ссылка.
Program Big_Mas;
CONST N1= 30; N2= 50;
type M1= array [1.. N1 ] of REAL; { тип M1 - массив переменных вещественного типа}
M2= array[1..N2] of ^M1; { тип M2 - массив ссылок на начальные адреса
элементов массивов типа M1}
var a1, a2: M2; { двумерные массивы N1xN2 переменных вещественного типа }
i, j: word;
BEGIN
for i:=1 to N2 do New(a1[i]); { размещение массива в оперативной памяти }
for i:=1 to N2 do New(a2[i]);
for j:= 1 to N1 do
for i:= 1 to N2 do begin
a1[i]^[j]:= j + Sin(Pi*i/N2); { пример расчета значений }
a2[i]^[j]:= j - Cos(Pi*i/N2) { элементов двумерных массивов }
End;
for i:= 1 to N2 do Dispose(a1[i]); { освобождение оперативной памяти }
for i:= 1 to N2 do Dispose(a2[i]);
Readln;
END.
Таким образом в оперативной памяти отводится место не под двумерные массивы "a1" и "a2" размером N1xN2, а под одномерные массивы (размером N2) адресов первых элементов линейных массивов (размером N1). Операция a1[i]^[j] (a2[i]^[j]) называется разыменование переменной (элемента массива).
Большие двумерные массивы часто применяются при решении "сеточных" задач.
1, 1 1, 2 1, 3 1, 4 Пусть дана сетка, узлы которой пронумерованы
* * * * двумя цифрами, каждая из цифр равна номеру узла
2, 1 2, 2 2, 3 2, 4 в соответствующем направлении.
* * * * При решении задачи требуется хранить значения
3, 1 3, 2 3, 3 3, 4 некоторых функций в узлах, т. е. использовать
* * * * элементы двумерных массивов. Значения индексов
элементов показывают расположение узла на сетке.
Дата добавления: 2015-10-29; просмотров: 111 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Двумерные массивы | | | Текстовые файлы |