Шпоры по информатике1 / 31
.doc
31.Линейные массивы Описание массивов: Var A: array[ 1. . 30 ] of byte; S: array[ 1. . 30 ] of string; SO: array[ 1. . 30 ] of string[12]; Присвоение значений элементам массива: A[1]:= 5; A[2]:= 4; и т. д. S[1]:= 'Иванов'; S[2]:= 'Петров'; и т. д. Присвоение значения элементам массива «y» по зависимости: y=sin(x), где x= Pi * i/180, 0<= i <=180 . For i:= 0 to 180 Do y[i]:= sin(Pi * i/180); Присвоение случайных значений в диапазоне от -30 до +40 ста элементам массива «R»: Randomize; for i:=1 to 100 Do R[i]:= - 30+Random(71); Присвоение значений семи элементам массива «A» оператором Readln: For i:= 1 to 7 Do begin Write(‘Введите A[’,i,’] =’); Readln( A [ i ] ) end; Вывод “шапки таблицы” For j:=1 to 66 do Write(‘-‘); Writeln; For j:=1 to 3 do Write(‘|_ _ Фамилия _ _| _ оценка _|’); Writeln; For j:=1 to 66 do Write(‘-‘); Writeln; Вывод значений ста элементов массивов «S» и «A» в три пары колонок: For i:=1 to 100 do begin Write(‘|’,s[i]:11,’|’,a[i]:8,’|’); if (i mod 3) = 0 Then Writeln; if (i mod 60) = 0 then readln end; Определение суммы элементов массива, наибольшего (наименьшего) элемента и создание новых массивов, удовлетворяющие некоторому условию: s:=0; for i:=1 to 100 do s:=s+a[i]; {s-сумма элементов массива} a_max:=a[1]; for i:=1 to 100 do {поиск наибольшего элемента a[j]} if a[i]>a_max then begin a_max:=a[i]; j:=i end; j:= 0; k:= 0; for i:=1 to 100 do {создание новых массивов с элементами: b[j]>=0, c[k]<0} if a[i]>=0 then begin j:=j+1; b[j]:=a[i] end else begin k:= k+1; c[k]:=a[i] end; j:=0; k:=8; for i:=1 to 100 do {создание массива номеров «M» для элементов: a[i]>a[k]} if a[i]>a[k] then begin j:=j+1; M[j]:=i end; Работа с элементами переменной строкового типа Var S: string; C: char; begin S:='Москва', то S[1]='М', S[2]='о' и т. д. C:= S[1]; Перестановка местами элементов массива: N:= ord(S[0]); {число символов в переменной «S» хранится в переменной S[0]} for i:= 1 to N div 2 do {Функция «ord» преобразует символьный тип в целый} begin C:= S[i]; S[i]:= S[N-i+1]; S[N-i+1]:= C end; Writeln(S); { исходное слово выведется справа налево: «авксоМ» }
|
32.Двумерные массивы Var A:array[1..30,1..7] of byte; Случайный ввод с последующим выводом двумерного массива оценок группы студентов по нескольким предметам: for i:= 1 to N do for j:= 1 to M do A[i, j]:= random(4)+2; {ввод эл-в} Writeln; Write('Фамилия\\Предметы:|'); {печать шапки таблицы} For i:=1 to M do write(P[i]:9,’_ |’); for i:= 1 to N do {вывода элементов массива “A”} begin writeln; write(S[i]:19, ‘_ |’; for j:= 1 to M do write(A[i,j]:7, ‘ _ _ |’) end; Пример расчета для массива «SS» сумм «M» элементов в каждой из «N» строк массива «A» (NxM): for i:= 1 to N do begin SS[i]:= 0; for j:= 1 to M do SS[i]:= SS[i] + A[i, j] end; в паск, при описю многом масс., диап. Изм-я индексов, перечис. ч/з запятую
|
33.Текстовые файлы предст. Собой совок. Строк переем-й длины, с послед-м дост-м к дан-м, т.е. зап-ся и счит-ся только посл-но. Var f: Text; Assign(f, ‘Name_f’); где Name_f - имя файла. Например, Assign(f, ‘file. dat’); {файл находится в текущем каталоге} Assign(f,’C:\Pascal\Work\file.dat’) {файл находится} { по указанному пути на диске С} Открытие файла для записи данных ReWrite(f); Запись данных в файл Write(f,»сп»); или Writeln(f,»сп»); {»сп» - список переменных} Открытие файла для считывания данных Reset(f); Считывание данных Read(f, “сп”); или Readln(f, “сп”); Закрытие файла Close(f); Запись данных в конец закрытого файла Append(f); Пример операторов записи и считывания данных Assign(f1,'File1.dan'); {назначить переменой f1, имя файла: File1.dan} ReWrite(f1); {открыть файл для записи в первой программе } Writeln(f1,'Значения «X»,»Y»' ); {начать запись } For i:= 1 to N do begin X:= 0.5*i; Y:= Ln(X); {пример расчета значений переменных } write(f1, X:6:2, Y:10:4); {записать данные в файл File1. dan } If i mod 5 = 0 then writeln(f1) { записать символ #13 } end; Close (f1); {закрыть файл в первой программе } Assign(f2,'File1.dan'); {назначить переменой f1, имя файла: File1.dan} Reset(f2); {открыть файл для чтения во второй программе} Readln(f2); {пропустить первую строчку} For i:= 1 to N do begin read(f2, a[i], b[i]); {считать данные в массивы «A» и «B» } If i mod 5 = 0 then readln(f2) { считать символ #13 } end; Close (f2); {закрыть файл во второй программе } Пример программы для считывания строковых и числовых данных из файла и записи их в другой файл. var c: char; j, i: word; s: array[1..10] of string[12]; a: array[1..10, 1..6] of word; f1, f2: text; BEGIN assign(f1, ‘F1.txt’); reset(f1); assign(f2, ‘F2.txt’); rewrite(f2); for i:= 1 to 10 do begin read(f1, s[i]); { считывание строки } for j:= 1 to 6 do read(f1, a[i,j]); { считывание шести чисел } eadln(f1) {считывание символа конца строки} end; for c:= 'А' to 'Я' do { цикл по перебору символов} for i:= 1 to 10 do if s[i,1] = c then begin write(f2, s[i]); {запись строк в алф.порядке первых символов} for j:= 1 to 6 do write(f2, a[i,j]:2); { запись шести чисел } writeln(F2) end; close(f1); close(f2); END. В файле F1. txt записаны данные, которые в редакторе текста имеют вид: Леонтьев 5 4 4 5 4 3 Ивлев 4 5 3 4 3 4 и т. д. EoF(f); {возвращает признак конца файла} Пример считывания текста из файла FF1. t, кодировки текста и записи в файл FF2. t с сохранением кода #13. assign(f1, ‘FF1. t’); reset(f1); assign(f2, ‘FF2. t’); rewrite(f2); while not EoF(f1) do begin read(f1,c); {считываем переменную типа Char } if c <> #13 then c:=pred©; write(f2,c) {кодируем и выводим на экран } end;
|
||||||||||||||||||||
5.4.Установка атрибутов файла Исходный атрибут файла GetFattr(f, af); Установка атрибута файла SetFattr(f, af); где f - имя файловой переменной, af - имя переменной атрибута (тип Word).
В паск имеется возм-ть прогр. Уст-ки атрибутов файла, они уст. Для закрытых файлов, после связ-я файл пер-й на диске.
|
36 Рекурсивные функции и процедуры Схема циклического взаимодействия процедур
Функция, возвращающая число осколков, будет иметь вид: Рекурсия – ф-я или процесс, кот в своём описании сод-т вызов ** себя. а=а2=1 аn=an-1+an-2 Procedure pr_1; {полное описание процедуры pr_1} var n, n1: integer; begin if i=10 then begin Randomize; n1:= Random(900)+100 end; if (i = 0) then Pr_2 {условие окончания прямой рекурсии} else begin repeat writeln('введите трехзначный номер билета'); Readln(n) until (n<1000) and (n>99); if (n<>n1) then begin writeln('билет без выигрыша'); writeln('осталось ', i-1, 'билетов'); Pr_1(i-1) {прямая рекурсия} end else begin Writeln('Вы угадали, получите выигрыш в банке!'); Pr_2 {косвенная рекурсия} end end; {----------------------------------------------------} BEGIN PR_2 {раздел выполнения основной программы} End.
|
|