Табличная организация данных Массивы
Для организации таблиц в программах используют массивы. Массив - упорядоченная последовательность величин, обозначенных одним именем. Элементы массива - индексированные переменные. Индексы - выражения, имеющие целые положительные значения, разделяются запятой, если их несколько. Отрицательный индекс - ошибка! Индексы могут быть заданы: Числом: А(2), С(3,5) Переменной: А(i), B(i,j) Выражением: А(к+1), В(5, к/2+3) Удобной формой для организации данных являются таблицы. Различают таблицы: 1. Линейные. Данные располагаются в одну строку R=[ 165,170,171,158,160] R(1) R(2) R(3) R(4) R(5) 2.Прямоугольные ( несколько строк) Все элементы таблицы имеют одно имя и отличаются только номером. А(1,1)=3 А(2,3)=-8 А(3,4)= 0 В линейных таблицах – один номер(индекс) В прямоугольных – два (номер строки, номер столбца) A=
Для описания в программах таблиц (массивов) используется команда DIM (DIMENSION - размерность), которая пишется в программе до использования массива. DIM A(15) DIM B(3,4) Одной командой DIM можно описывать несколько массивов: DIM A%(9), B$(12), C(3,5) Команда DIM определяет: 1.Имя массива (таблицы) 2.Тип элементов массива (числ., символьный) 3.Размерность массива ( определяется количеством индексов): одномерный (линейный, вектор) - один индекс двумерный (матрица) – два индекса 4.Количество элементов (указан номер последнего элемента, номер первого по умолчанию=0) 5.Занимает место в оперативной памяти для элементов массива
Для ввода значений элементов массива используют команды LET(присвоить), INPUTи DATA, READ. Для вывода PRINT. Ввод, вывод, обработка элементов линейных массивов выполняется как правило с использованием циклов, где параметром цикла является номер элемента массива. Выводить значения элементов можно в столбец или строку. Примеры: 1. DIM A(8) Имя – А Тип - числ. вещ. один. точн. Размерность – линейный Кол-во элементов – 8 2. DIM B%(2,3) Имя – В% Тип - числовой целый Размерность – двумерный Кол-во элементов: 2 3=6 PS. (Если не учитывать нулевой элемент) 3. DIM C$(5) Имя - C$ Тип – символьный Размерность – вектор Кол-во элементов - 5 ( Имена выводятся в столбец) Примеры: DIM A(12) FOR I= 1 TO 12 INPUT Элемент; A(I) NEXT I DIM C$(5) DATA ИРА, САША, ОЛЯ, МАША, ТОЛЯ FOR I=1 TO 5 READ C$(I) PRINT C$(I) NEXT I
Задача. Создать массив, N элементов которого являются случайные целые числа из интервала [-40;40]. Определить: 1.Сумму элементов с нечетными номерами 2.MIN элемент и его номер 3.Кол-во элементов, имеющих четные значения 4.Произведение элементов, значения которых >5 5.Упорядочить элементы таблицы по возрастанию I.Математическая модель Дано: N – кол-во элем. А(N) – массив случ. чисел Найти: 1. S – сумма элем. нечет. номер 2. M – min элемент, L – номер min 3. K – кол-во элем. с четн. энач. 4. P – произвед. элемен. >5 5. Сортировка по возрастанию Связь: I – счетчик чисел, параметр цикла A(I) = INT(RND*80-40) 1.Если номер I нечетный, то S=S+A(I) 2.Пусть M=A(1), L=1 Если A(I)5, то P=P*A(I)
Программа: CLS INPUT N; N DIM A(N) REM Создание массива и вывод его элементов на экран FOR I=1 TO N A(I) = INT(RND*80-40) PRINT «A(»; I ; «)=»; А(I) NEXT I REM Сумма нечет. номер. S=0 FOR I=1 TO N STEP 2 S=S+A(I) NEXT I PRINTS=;S REM MIN элем. M=A(1) :L=1 FOR I=2 TO N IF A(I)5 P=1 FOR I=1 TO N IF A(I) >5 THEN P=P*A(I) NEXT I PRINT P= ; P
FOR I=1 TO N-1 M=A(I): K=I FOR J=I+1 TO N IF M>A(J) THEN M=A(J): K= J NEXT J SWAP A(I), A(K) NEXT I REM Вывод элементов FOR I=1 TO N PRINT A(I); NEXT I Сортировка методом прямого выбора: М - минимальный элемент массива К - его номер 1.Выбирается элемент с наименьшим значением 2.Меняется с первым элементом массива 3.Процесс повторяется с оставшимися N-1 элементами, N-2 элементами и т.д., до тех пор, пока не останется один, самый большой элемент Команда SWAP A(I), A(K) - обмен значениями элементов A(I), A(K) A(1)A(2)A(3)A(4)A(5)A(6) REM Cортировка по возрастанию P.S.Для выполнения сортировки по убыванию необходимо искать максимальный элемент и ставить его на первое место в рассматриваемой части массива.
Ввод, вывод, обработка элементов двумерных массивов выполняется, как правило, с использованием сложных циклов, где параметром внешнего цикла является номер строки массива, а внутреннего - номер столбца. Выводить значения элементов можно в строку, столбец или, чаще всего, в виде таблицы. 10 DIM A(3,4) 20 FOR I=1 TO 3 30 FOR J= 1 TO 4 40 A(I,J)= INT(RND*40-20) 50 PRINT A(I,J); 60 NEXT J 70 PRINT 80 NEXT I В строке 50 точка с запятой(;) обеспечивают вывод элементов одной строки матрицы в одну строку экрана. Строка 70 PRINT (пустой) обеспечивает вывод элементов новой строки матрицы с новой строки экрана. (Примерный вид матрицы на экране) – Пример: Элементы матрицы - случайный целые числа выводятся в виде таблицы
Задача. «Анализ успеваемости класса» В классе N учеников. Создать массивы их фамилий и оценок за полугодие по М предметам. 1.Напечатать ведомость успеваемости 2.Найти кол-во ударников и напечатать их фамилии 3.Найти средний балл успеваемости класса 4.Найти средний балл каждого ученика, результаты сохранить в массиве 5.Найти средний балл по каждому предмету, результаты сохранить в массиве F$(1)Пац F$(2)Гуц F$(3)Рец F$(4)Пак ,5 P(1)P(2)P(3)P(4)P(5) 4,4U(1) 3U(2) 4,8U(3) 3,4U(4) Средний балл успеваемости класса: SB= 3,9 Ударников К= 2: Пац Рец B(N,M)
I.МАТЕМАТИЧЕСКАЯ МОДЕЛЬ Дано: N – кол-во учеников M – кол-во предметов F$(N) – массив фамилий B(N,M) – массив оценок Результат: 1.Ведомость успеваемости 2.К – кол-во Ударников 3.SB – ср. балл успев. класса 4.U(N) – средний балл ученика 5.P(M) - средний балл предмета Связь: I – счетчик учеников J – счетчик предметов 2. Если «ударник», то К=К+1 3. S=S+B(I,J) – суммирование элементов матрицы, строк или столбцов SB=S/(N*M) 4. U(I)=S/M – средний балл ученика 5. P(J)=S/N – средний балл предмета
Программа: CLS N=4: M=5 DATA Пац,4,5, 5, 4, 4 DATA Гуц, 3, 3, 3, 3, 3 DATA Рец, 5, 5, 5, 5, 4 DATA Пак, 4, 4, 3, 3, 3 DIM F$(N), B(N,M), U(N), P(M) REM Создание массивов FOR I =1 TO N READ F$(I) FOR J =1 TO M READ B(I, J) NEXT J NEXT I PRINT «Ведомость» FOR I =1 TO N PRINT F$(I); FOR J =1 TO M PRINT B(I, J); NEXT J PRINT NEXT I PRINT «Ударники» FOR I =1 TO N Z=0 (сигнальная переменная) FOR J =1 TO M IF B(I,J) < 4 THEN Z=1 NEXT J IF Z=0 THEN K=K+1: ? F$(I) NEXT I PRINT K=; K
PRINT «Средний балл класса» S=0 FOR I =1 TO N FOR J =1 TO M S=S+ B(I, J) NEXT J NEXT I SB= S/ (N*M) PRINT «SB=»; SB
PRINT «Средний балл ученика» FOR I =1 TO N S=0 FOR J =1 TO M S=S+ B(I, J) NEXT J U(I) = S/M PRINT F$(I); U(I) NEXT I PRINT «Средний балл предмета» FOR J =1 TO M S=0 FOR I =1 TO N S=S+ B(I, J) NEXT I P(J) = S/N PRINT «Средний балл по»; J; «предмету=» ; P(J) NEXT J
Задача. Задан список участников соревнований по плаванию и их результаты. Напечатать фамилию и результат чемпиона Дано: N – кол-во спортсменов F$(N) – массив фамилий R(N) – массив результатов Найти: L – номер MIN F$(L)- фамилия чемпиона Программа: CLS N=5 DIM F$(N), R(N) DATA Иванов, 15, Петров, 20, Сидоров, 13,Ким, 16,Пац,18 REM создание массивов FOR I=1 TO N READ F$(I), R(I) NEXT I REM поиск MIN M=R(1) :L=1 FOR I=2 TO N IF R(I)