авторефераты диссертаций БЕСПЛАТНАЯ БИБЛИОТЕКА РОССИИ

КОНФЕРЕНЦИИ, КНИГИ, ПОСОБИЯ, НАУЧНЫЕ ИЗДАНИЯ

<< ГЛАВНАЯ
АГРОИНЖЕНЕРИЯ
АСТРОНОМИЯ
БЕЗОПАСНОСТЬ
БИОЛОГИЯ
ЗЕМЛЯ
ИНФОРМАТИКА
ИСКУССТВОВЕДЕНИЕ
ИСТОРИЯ
КУЛЬТУРОЛОГИЯ
МАШИНОСТРОЕНИЕ
МЕДИЦИНА
МЕТАЛЛУРГИЯ
МЕХАНИКА
ПЕДАГОГИКА
ПОЛИТИКА
ПРИБОРОСТРОЕНИЕ
ПРОДОВОЛЬСТВИЕ
ПСИХОЛОГИЯ
РАДИОТЕХНИКА
СЕЛЬСКОЕ ХОЗЯЙСТВО
СОЦИОЛОГИЯ
СТРОИТЕЛЬСТВО
ТЕХНИЧЕСКИЕ НАУКИ
ТРАНСПОРТ
ФАРМАЦЕВТИКА
ФИЗИКА
ФИЗИОЛОГИЯ
ФИЛОЛОГИЯ
ФИЛОСОФИЯ
ХИМИЯ
ЭКОНОМИКА
ЭЛЕКТРОТЕХНИКА
ЭНЕРГЕТИКА
ЮРИСПРУДЕНЦИЯ
ЯЗЫКОЗНАНИЕ
РАЗНОЕ
КОНТАКТЫ


Pages:     | 1 | 2 ||

«ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ РОССИЙСКОЙ ФЕДЕРАЦИИ МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ИНСТИТУТ ...»

-- [ Страница 3 ] --

2. Какие исходные данные представлены правильно для ввода че тырёх целых чисел операторами readln(i,j);

readln(k,l);

5 6 5 10 6 5, 10, 6, 3. В каком случае операторы тела цикла не выполнятся ни одного раза:

i:=1;

repeat... until i=1;

i:=1;

while i=10 do...;

i:=1;

while i=10 do...;

3. АЛГОРИТМЫ 3.1. Массив счётчиков, формируемый без проверок Алгоритм задачи массив счётчиков интересен тем, что при правильной организации, формирование его может проходить без операторов if и case. Пусть вводится любое количество оценок (oc), результат зимней сессии по потоку 1ACY. Требуется определить полученное количество двоек, троек и т.д. и средний балл потока за эту сессию. Заведём массив счётчиков с индексами 2, 3, 4, 5, тогда при вводе оценки два следует увеличить на единицу счётчик именно с этим индексом. По алгоритму счётчиков мы знаем о необходимо сти его обнуления.

var k, s:word;

oc, i: 2..5;

mc: array [2..5] of word;

...

for i:=2 to 5 do mc[i]:=0;

k:=0;

while not eof do begin inc(k);

read(oc);

inc(mc[oc]);

end;

s:=0;

for i:=2 to 5 do s:=s+ i*mc[i];

writeln (‘Средний балл: ‘, s/k);

...

Исходные данные: 2 4 4 5 3 3 3 4 4 5 5 5 3 2 …Ctrlz, Enter Вторая задача: вводятся строки символов, количество символов в каждой - не более 70. Определить, сколько раз встречается каждая прописная буква латинского алфавита. Результат вывести в обрат ном порядке (от ‘Z’ до ‘A’).

var mc: array[‘A’..’Z’] of byte;

st: string[70];

ch: char;

i, n: byte;

...

for ch:=’A’ to ‘Z’ do mc[ch]:=0;

while not eof do begin readln(st);

n:=length(st);

for i:=1 to n do begin ch:=st[i];

if (ch=’A’) and (ch=’Z’) {лучше: if ch in [‘A’..’Z’] } then inc(mc[ch]);

end;

end;

for ch:=’Z’ downto ‘A’ do writeln (ch:5, ‘:’, mc[ch]:6);

...

Исходные данные: A+. B! а я UCtrlz.,Enter.

3.2. Удаление пробелов в строке символов Работа со строками символов требует чёткого представления, о том, что пробел такой же символ, как любой другой (‘A’ ‘ A’ – две разные строки), и о том, как исходные данные следует задавать, если в одном операторе ввода представлены несколько перемен ных типа строки символов или строки символов и числа.

Вот ошибка, которая может быть Вами допущена.

Из трёх вводимых слов вывести самое короткое слово.

var s1, s2, s3: string[5];

k1, k2, k3: byte;

...

readln(s1, s2, s3);

k1:=length(s1);

k2:=length(s2);

k3:=length(s3);

{теперь сами подумайте, как найти минимальное значение среди k1, k2, k3, и вывести соответствующее значение s1, s2, s3} При исходных данных:

Иа КенгаПухEnter Будет выведено значение Пух и если нам понадобится опре делить, есть ли в этом списке Иа ответ будет – нет. Символом обозначен пробел, т.е. после Иа следует три пробела. Выход из по ложения: или использовать три оператора ввода и каждую строку задавать с новой строки экрана, или после ввода каждой строки удалять все имеющиеся пробелы.

readln(s1);

readln(s2);

readln(s3);

или while pos(‘ ’, s1) 0 do delete (s1, pos(‘ ’, s1), 1);

- это просто пробел!

3.3. Удаление и вставка элемента в массив Следующие алгоритмы будут касаться удаления элементов из массива. Самые простые из них связаны с созданием нового масси ва, в который элементы будут попадать по какому-то условию. Пусть требуется из массива А удалить все элементы, равные нулю.

… k:=0;

for i:=1 to n do if a[i]0 then begin inc(k);

b[k]:=a[i] end;

...

Теперь по тому же принципу сформируем новый массив, в ко торый не войдёт элемент с индексом K, (это может быть индекс максимального элемента в массиве чисел, или самого длинного слова в массиве слов и пр.).

... for i:=1 to k-1 do b[i]:=a[i];

for i:= k to n-1 do b[i]:=a[i+1];

...

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

Закончим вопрос по удалению из массива A элемента с номе ром K, при этом новый массив заводить не будем, а выполним пе ремещение элементов в исходном массиве.

i1 2 3... k n...

ak=ak+1...

Место удаляемого элемента с номером K должен занять сле дующий и т.д., пока на место n-1 элемента не встанет n элемент.

... for i:=k to n-1 do a[i]:=a[i+1];

...

Рассмотрим два алгоритма вставки в массив A после элемента с номером K нового данного (T), будем создавать новый массив B или «раздвигать» элементы в исходном массиве, чтобы поместить туда добавляемый элемент. Не забудьте продумать вопросы, свя занные с количеством элементов в этих массивах.

Вариант с новым массивом:

... for i:=1 to k do b[i]:=a[i];

b[k+1]:=t;

for i:=k+2 to n+1 do b[i]:=a[i-1];

...

Вариант добавления в исходный массив:

...for i:=n+1 dowto k+2 do a[i]:=a[i-1];

a[k+1]:=t;

...

4. ЦИКЛИЧЕСКИЕ УЧАСТКИ В ВЫЧИСЛЕНИЯХ И ИХ ЗАПИСЬ В ПРОГРАММЕ 4.1. Лабораторная работа «Одномерные массивы» (выполняет ся Ваш вариант по заданиям № 4, 6 задачника [7]) В вариантах работ по заданию №4 предусмотрены простые алгоритмы по определению суммы, произведения элементов мас сивов, и формированию новых массивов без каких-то дополнитель ных условий. В вариантах по заданию №6 предусмотрена более сложная обработка одномерных массивов.

Требования к этим лабораторным работам:

• исходные данные для задания №4 – желательно, а для №6 – обязательно задавать во внешнем файле;

• для задания №6 готовится схема алгоритма;

• количество операторов цикла должно быть минимальным, т.е.

по возможности совмещать действия в одном цикле.

Пример для задания № Заданы значение переменной A и значения элементов двух массивов x1, x2,..., x6;

y1, y2,..., y6. Элементы нового массива D xi y i должны вычисляться по формуле: d i = i =1 6 (y i a).

xi i = В задаче пять или шесть циклических участков:

• ввод элементов массивов X и Y;

элементы будут следовать в таком порядке: x1, y1,..., x6, y6 – иначе для ввода потребуется два циклических участка;

• накопление суммы выражений xi*yi;

• накопление произведения элементов xi;

• формирование элементов нового массива di;

• вывод элементов нового массива di.

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

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

program prog4;

var x, y, d: array[1..6] of real;

a, s, p, t: real;

i: byte;

begin s:=0;

p:=1;

for i:=1 to 6 do begin read (x[i], y[i]);

s:=s+x[i]*y[i];

p:=p*x[i];

end;

t:=s/p;

read (a);

for i:=1 to 6 do begin d[i]:=t*(y[i]-a);

writeln(‘D[‘, i, ‘]=’, d[i]:10:3);

end;

writeln(s, p, t);

end.

Не забудьте, что чисел следует задать тринадцать. Перемен ная t позволяет не вычислять шесть раз одно и то же значение s/p.

Последний оператор вывода покажет, удачно ли выбран формат для вывода элементов массива D, может быть количество цифр в дробной части надо будет увеличить.

Пример для задания № Заданы элементы массива t1, t2,..., t20. Сформировать новый массив, в который войдут элементы исходного массива до первого отрицательного элемента в нём. Найти сумму элементов с чётными индексами после этого отрицательного элемента.

Анализ задачи на количество циклических участков:

• ввод элементов массива T;

• поиск индекса первого отрицательного элемента;

• формирование нового массива до первого отрицательно го элемента;

• вывод элементов нового массива;

• накопление суммы элементов массива T с чётными ин дексами после первого отрицательного элемента.

В алгоритме будем использовать цикл по формированию эле ментов нового массива и определению индекса отрицательного элемента. Этот индекс (i) может быть чётным, тогда накопление суммы начнётся с индекса i=i+2, или нечётным, тогда с индекса i=i+1.

Схема алгоритма приведена на рис. 4.1.

Конечно, вариант объединения нескольких циклических участ ков в один может быть и другим. В одном цикле с вводом элементов массива T можно найти и индекс первого отрицательного элемента, но это потребует дополнительного анализа, проверки, введения ещё одной переменной – счётчика или логической:

…L:=0;

for i :=1 to 20 do begin read(f, t[i]);

if t[i]0 then inc(L);

if L=1 then k:=i;

end;

...

При чтении текста программы следите за блоками схемы, ввод элементов массива – из внешнего файла. Найдите на схеме алго ритма блок, задающий начальное значение параметра цикла для подсчёта суммы.

Начало i= s= Ввод ti i i=i+ i не чет i= i=i+1 i=i+ i= s=s+ti ti i=i+ и i= k=i ri=ti i= Вывод ri Вывод i=i+1 K,S Конец Рис. 4.1. Схема алгоритма по заданию № Текст программы:

F3 prog6[.pas] program prog6;

var t, r: array[1..20] of real;

s: real;

i, k: byte;

f: text;

begin assign (f, ‘prog6.id’);

reset(f);

for i:=1 to 20 do read (f, t[i]);

close (f);

i:=1;

while (i=20) and (t[i]=0) do begin r[i]:=t[i];

writeln(‘R[‘, i:2, ‘]=’, r[i]:10:3);

inc(i);

end;

k:=i;

s:=0;

if i20 then {если нет отрицательного элемента – сумма равна ну лю} begin if odd (i) then inc(i) else inc(i, 2);

while i=20 do begin s:=s+t[i];

inc(i, 2);

end;

end;

writeln (‘Сумма чётных по номеру элементов, после ‘, k, ‘ –го эле мента’, s);

end.

F Файл с исходными данными:

F3prog6.id 3 8 4 3 7 8 9 18 2 4 0 12 15 -6 -10 1 0 0 0 0Enter F В массив R войдёт тринадцать элементов (3, …, 15), а сумма после четырнадцатого элемента будет равна единице.

4.2. Лабораторная работа «Простые» циклические задачи (выполняется Ваш вариант по заданию № 5 задачника [7]) В этой лабораторной работе требуется подготовить рекур рентные формулы, которые позволят, в довольно простой форме, представить алгоритм своей задачи.

Циклическими эти задачи называются потому, что действия по алгоритму выполняются многократно, а простыми не из-за простоты реализации, а потому, что массивы в них не используются. Такие задачи (без массивов) в том числе и с вложенными циклами у нас уже встречались, но там не требовалось готовить рекуррентные формулы, а именно это самая сложная и ответственная часть.

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

Это используется, например, в задачах определения значений тригонометрических функций через ряды, нахождения суммы ряда с заданной точностью. Примеры:

• Y=X3+X6+X9+X12+X •рекуррентные формулы начальные значения B=B*X Y=Y+B i = i + 3 (шаг цикла) i= • Y=X3/2 – X6/4 + X9/6 – X12/ рекуррентные формулы начальные значения B = B * (- X3 ) - i = i + 2 (шаг цикла) Y = Y + B/i i= Простые циклические программы - это программы без масси вов, но с использованием циклов. В простых циклических програм мах может присутствовать любая из трех модификации оператора цикла. Для рекуррентных формул обязательно задаются начальные значения programe prog5_a;

var x, y, b, t: real;

i: byte;

begin read(x);

t:= -sqr(x)*x;

b:=-1;

y:=0;

i:=2;

while i=8 do begin b:=b*t;

y:=y+b/i;

inc(i, 2);

end;

writeln(‘ При X= ‘, x, ‘ Y=’, y);

end.

• Y=X3/2 – X6/4 + X9/6 –..., |X|=1, определить с точностью.

рекуррентные формулы начальные значения B = B * (- X3 ) - i = i + 2 (шаг цикла) Y = Y + B/ i |B/i| и i= В этом варианте определяется сумма бесконечного ряда. За дача будет решена, когда разница между новым и предыдущим зна чениями Y станет меньше, чем заданная точность (значения точ ности 0.001, 0.0001, 0.000001 и т.д. увеличивают количество сла гаемых).

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

• Y=X3/(2*3!) – X6/(4*5!) + X9/(6*7!) –..., |X|=1, определить с точ ностью.

рекуррентные формулы начальные значения i = i + 2 (шаг цикла) B = B * (- X3 ) / (i*(i+1)) - Y = Y + B/ i |B/i| и i= 3!=1*2*3;

5!= 1*2*3*4*5, т.е. чтобы получить новое значение нечётных факториалов нужно взять предыдущее значение (3!) и ум ножить его на i (4) и на i+1 (5), что и отражено в формуле для B.

Можно было для знаменателя завести свою переменную F=F*i*(i+1) с начальным значением единица, тогда B=B*(-X3), Y=Y+B/i/F.

В приведённой ниже программе показан контроль исходных данных. Проверяется, правильно ли задано значение X (abs(x)=1) и точность, которая должна быть не более чем 0.01 и всегда задаёт ся единицей с некоторым количеством нулей перед ней, (это не кон тролируется, но Вы должны об этом помнить). Так из трёх вводимых наборов данных (X и ) расчёт будет проведён только по последне му набору.

Исходные данные:

5 0.001 (неправильно задано X), (неправильно задано ), -1 0.01 (данные представлены корректно).

program prog5_b;

var x, b, y, e, t: real;

i: byte;

begin repeat writeln (‘Введите |X|=1 и E=0.01’);

readln (x, e);

until (abs(x)=1) and (e=0.01);

t:= -sqr(x)*x;

b:=-1;

y:=0;

i:=0;

repeat {попробуйте заменить на оператор цикла while} inc(i, 2);

b:=b*t/i/(i+1);

y:=y+b/i;

until (abs (b/i)=e) or (i50);

if i50 {проверяем по какому из условий завершился цикл} then writeln (‘Авария при X=’, x, ‘ Y=’, y) else writeln (‘Ответ при ’, i div 2, ‘ шагах равен :’, y);

end.

• Пример, когда очень загадочная задача, становится просто решаемой.

3 + 6 + 9 +... + 99 Вот рекуррентные формулы:

i=i-1 y=3*i+y i= 4.3. Документированный вывод При выполнении этой лабораторной работе Вы должны полу чить навыки представления числовых и символьных данных во внешних файлах и вывод результатов в виде таблиц (документиро ванный вывод) с форматированием данных, помещаемых в столбцы таблицы. Требования к лабораторной работе:

• ввод исходных данных проводить из внешнего файла;

• результат должен быть представлен в виде таблицы, имею щей заголовок, заголовки столбцов и т.д.;

• для оформления таблицы могут использоваться:

а) для горизонтальных линий: б) для вертикальных линий:

* - знак умножения, * - знак умножения, - - "минус", ! - восклицательный знак,. - точка, I - буква i.

_ - подчеркивание.

в) для любых линий - коды символов псевдографики:

в строке, задающей список вывода, помещается последователь ность #код#код#код#код#код#код... или нажимаются клавиши altкод, altlкод,... при этом коды набираются на числовой клавиа туре (этот способ на экране выглядит более наглядно).

Коды символов псевдографики:

218 194 191 213 209 184 196 195 197 180 198 216 181 179 192 193 217 212 207 214 210 183 201 203 199 215 182 204 206 211 208 189 200 202 • работа начинается с разработки макета таблицы для выводи мых данных с учётом размера экрана (80 х 25), ширины столб цов (сколько позиций в заголовке столбца и сколько позиций понадобится выводимому значению с учётом его формата), количества таблиц и строк в этих таблицах (может результат потребуется выводить во внешний файл или делать задержку экрана).

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

4.4. Лабораторная работа «Документированный вывод»

(выполняется Ваш вариант по заданию №7 задачника [7]) Заданы фамилии пользователей сети МТС, их телефоны и сумма на счёте. Вывести всю информацию о тех, у кого сумма на счёте меньше средней суммы.

Макет таблицы:

Взнос меньше среднего= ************************************************* *№ по порядку* Фамилия * Телефон * Сумма * ************************************************** * 1 *Иванов * 155-01-46* 1500 * Для лучшего понимания текста программы пробелы в макете таблицы обозначены специальным символом. Вся таблица от края сдвигается на пять позиций. Количество символов ‘*’:

12*3+9+5=50 (три столбца по 12 позиций, один -9 и пять символов ‘*’ - разделителей столбцов).

program prog7;

var fam: array[1..100] of string[12];

tel: array[1..100] of string[9];

sv: array[1..100] of word;

i, k, m: byte;

s: real;

f: text;

zv: string[50];

begin assign (f, ‘MTC.id’);

reset (f);

k:=0;

s:=0;

while not eof(f) do begin inc(k);

readln (f, fam[k], tel[k], sv[k]);

s:=s+ sv[k];

end;

s:=s/k;

close (f);

zv:=’’;

{пустая строка} for i:=1 to 50 do zv:=zv+’*’;

writeln (‘Взнос меньше среднего=’: 33, s:8:0);

writeln (zv:55);

{почему появилось такое поле для вывода?} writeln (‘*№ по порядку* Фамилия * Телефон * Сумма *’:

55);

{при наборе символ означает нажать клавишу пробел} writeln (zv:55);

m:=0;

for i:=1 to K do if sv[i]s then begin inc(m);

writeln (‘*’:6, m:9, ‘ *’, fam[i], ‘*’, tel[i]:12, ‘*’, sv[i]:7, ‘ *’);

end;

{самый главный оператор вывода в программе, сравните каждый элемент вывода с макетом таблицы, например, почему для fami формат не требуется, а для teli - требуется} writeln (zv:55);

end.

Пример исходных данных показывает, что не всё в программе гладко. Так, номера мобильных телефонов имеют более девяти символов, и для фамилии двенадцати символов явно недостаточно (для одной фамилии нельзя задать последний символ). Сверху, над исходными данными, приведена строка, для того, чтобы обратить внимание на позиции, в которых размещаются символьные данные (правило 4 темы «Ввод и вывод»).

Иванов 155-01-46 1500Enter Кржижановски200-20-20 300Enter Петров 900-90-90 8100Ctrlz, Enter 5. ВЛОЖЕННЫЕ ЦИКЛЫ. ОПЕРАТОРЫ BREAK И CONTINUE Любая конструкция оператора цикла может быть целиком, без пересечения, вложена в другую конструкцию. На простом примере разберём, как это происходит.

for x:=1 to 3 do for y:=5 to 6 do for y:=5 to 6 do writeln (x+y);

for x:=1 to 3 do writeln(x+y);

x Y x+y y x x+y 1 5 6 2 5 6 3 5 6 Параметр внешнего цикла X получает начальное значение, за тем параметр внутреннего цикла Y проходит все значения от на чального до конечного и выводятся X+Y. Затем параметр внешнего цикла изменяет своё значение, а внутреннего восстанавливает на чальное значение, и циклы продолжают выполняться. Заполните сами таблицу, когда параметры внешнего и внутреннего циклов по менялись местами.

Несколько правил при работе с циклами.

Правило Один оператор должен быть целиком, без пересечения вложен в другой, уровень вложения – любой.

Правило Обращение к операторам тела цикла с помощью оператора goto – запрещён (т.е. вход в цикл, минуя его заголовок, не разреша ется). Досрочный выход из цикла оператором goto не запрещается, но и не рекомендуется, так как можно либо изменить конструкцию оператора цикла, добавив в его заголовок условие досрочного вы хода, либо воспользоваться операторами break и continue.

Правило Оператор break позволяет осуществить выход из цикла. Пусть нам требуется проводить вычисления по какой-то формуле с два дцатью элементами массива A, но вычисления должны прекращать ся, как только встретится элемент равный нулю.

...for i:=1 to 20 do begin if a[i]=0 then goto M;

...end;

M:… Кроме того, что надо будет объявлять метку M, программиро вание с оператором перехода в настоящее время стараются не ис пользовать (текст программы перегружен и в какой-то момент ста новится проблематично понять, куда осуществляется переход).

...for i:=1 to 20 do begin if a[i]=0 then break;

...end;

… Этот вариант не требует метки, а результат получаем тот же.

... i:=1;

while (i=20) and (a[i]0) do begin...;

inc(i) end;

...

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

Правило Оператор continue позволяет вернуться к заголовку цикла и изменить значение параметр цикла (переход к следующему шагу), операторы тела цикла после continue не выполняются.

Пусть нам требуется включать в сумму только положительные элементы массива, затем, с текущим значением суммы, проводить ещё какие-то вычисления, если элемент в сумму не добавлялся, то и дополнительные действия над ней нам не нужны.

... s:=0;

for i:=1 to 20 do begin if a[i]=0 then continue;

s:=s+a[i];

...

end;

...

В цикле будут проверяться все двадцать элементов исходного массива, но действия будут выполняться только над положитель ными элементами (возможен и вариант проверки a[i]0, запишите его).

Приведём пример, когда вложенными конструкциями являются другие модификации оператора цикла.

Изменения переменных X и Y представлены выражениями:

6=X=7, hx=0.3;

-1.5=Y=1.5, hy=0.5.

Найти всевозможные значения c=x2+ |y|.

x:=6;

while x=7 do begin y:=-1.5;

while y=1.5 do begin writeln (x:5:1, y:5:1, (sqr(x)+sqrt(abs(y))):5:1);

y:=y+0.5;

end;

x:=x+0.3;

end;

...

Любые действия с многомерными массивами требуют обяза тельного вложения операторов цикла друг в друга. Пусть требуется обрабатывать элементы A[i,j] двухмерного массива (матрицы), вот что нужно для этого делать:

for i:=1 to 2 do {как меняется строка i} for j:=1 to 4 do {как меняется столбец j}...a[i,j];

Какие элементы матрицы, и в каком порядке будут обрабатываться?

i j a[i,j] j i a[i,j] 1 1 a11 1 1 a 2 a12 2 a 3 a13 2 1 a 4 a14 2 a 2 1 a21 3 1 a 2 a22 2 a 3 a23 4 1 a 4 a24 2 a Для второй таблицы операторы цикла записываются в другом порядке:

for j:=1 to 4 do for i:=1 to 2 do... a[i,j];

Обработка элементов двухмерного массива (в нашем примере две строки и четыре столбца) происходит разным способом: в пер вом случае по строкам, во втором по столбцам.

При подготовке к лабораторной работе по заданию №8 (мат рицы) следует учитывать следующее: если заданный алгоритм тре буется выполнить по строкам матрицы, то его следует совмещать с вводом элементов, если алгоритм должен выполняться по столб цам, то ввод записывается в циклах «по строкам», а алгоритм в следующих циклах «по столбцам».

Рассмотрим несколько примеров с фрагментами по обработке матриц. Законченная программа приведена в главе 6.

I. Найдём значение максимального элемента во всей матрице A, в которой n строк и m столбцов.

... max:= -1e10;

for i:=1 to n do for j:=1 to m do begin read (a[i,j]);

if a[i,j] max then max:=a[i,j];

end;

...

II. Найдём индексы (номер строки K и номер столбца L) мак симального элемента матрицы.

... k:=1;

l:=1;

for i:=1 to n do for j:=1 to m do begin read (a[i,j]);

if a[i,j] a[k,l] then begin k:=i;

l:=j;

end;

end;

...

Максимальным будет элемент A[K,L].

III. Найдём значения максимальных элементов в каждой строке матрицы. В отличие от первого алгоритма MAX - это массив из n элементов.

... for i:=1 to n do begin max[i]:= -1e10;

for j:=1 to m do begin read (a[i,j]);

if a[i,j] max[i] then max[i]:=a[i,j];

end;

end;

...

IV. Найдём значения максимальных элементов в каждом столбце матрицы. MAX - это тоже массив, но он состоит из m элементов.

... for i:=1 to n do for j:=1 to m do read (a[i,j]);

for j:=1 to m begin max[j]:= -1e10;

for i:=1 to n do if a[i,j] max[j] then max[j]:=a[i,j];

end;

...

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

6. ЛАБОРАТОРНАЯ РАБОТА «МАТРИЦЫ»

(выполняется Ваш вариант по заданию №8 задачника [7]) В главе 5 много внимания было уделено двухмерным масси вам (порядок следования по строкам и столбцам, совмещение алго ритма с вводом элементов матрицы, если алгоритм должен выпол няться по строкам). Были приведены фрагменты программ, которые позволят Вам ориентироваться в задачах, где требуется находить что-то во всей матрице, что-то в каждой её строке или столбце.

Рассмотрим ещё два способа вывода матрицы в "красивом" виде:

…for i:=1 to n do begin writeln;

{каждая строка матрицы выводится с новой строки экра на} for j:=1 to m do write (a[i,j]:8:0);

end;

или... for i:=1 to n do for j:=1 to m do begin if (j-1) mod k=0 then writeln;

{задается, сколько элементов одно го столбца будет выводиться в одной строке матрицы} write (a[i,j]:8:0);

end;

где, n, m-число строк и столбцов в матрице;

k-максимальное число эле ментов в одной строке, можно задать k=10, 8, 5 и т.д., но к*p, где р поле вывода (мы выбрали - 8), не должно превышать 80.

Требования к лабораторной работе:

• количество элементов в матрице следует задавать не менее 25;

• удобно объявлять матрицу большого размера (10*10) и вво дить с клавиатуры при каждом расчёте n – количество строк, m – количество столбцов • исходные данные задавать во внешнем текстовом файле;

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

• подготовить схему алгоритма;

• исходные данные должны содержать хотя бы два отладочных просчёта (можно воспользоваться способом, предложенным в P.S.3).

Пример задания № Заданы элементы квадратной матрицы A размером 6*6. Опре делить сумму элементов во всех чётных строках матрицы (S1) и в нечётных столбцах её (S2). Если первая сумма меньше второй, то элементы главной диагонали заменить нулями.

В алгоритме будет четыре циклических участка:

• ввод, вывод элементов матрицы и накопление суммы элемен тов чётных строк матрицы;

• накопление суммы элементов нечётных столбцов матрицы;

• замена диагональных элементов нулями, если первая сумма меньше второй;

• вывод новой матрицы (она может совпадать с исходной мат рицей).

Схема алгоритма этой задачи приведена на рис. 6.1.

Обратите внимание, что в первом вложенном операторе цикла выполняются три действия: ввод, вывод и накопление первой сум мы. Использовать три отдельных цикла не следует. Всегда старай тесь, по возможности, уменьшать количество операторов цикла, со вмещая в нём несколько циклических участков в вычислениях.

Удобно было бы записать в виде отдельного блока алгоритм «красивого» вывода элементов матрицы (это в программе выполня ется дважды), в следующей дисциплине, где будут рассматриваться методы процедурного и модульного программирования, мы сможем это реализовать.

program prog8;

var a : array[1..6, 1..6] of real;

i, j : byte;

s1, s2 : real;

f : text;

begin assign (f, ‘prog8.id’);

reset(f);

s1:=0;

for i:=1 to 6 do begin writeln;

for j:=1 to 6 do begin read (f, a[i, j]);

write (a[i, j]:10:2);

if not odd (i) then s1:=s1+a[i, j];

end;

end;

s2:=0;

j:=1;

Начало s2=s2+aij s1=0 i=i+ i= j= i= Ввод aij j=j+ i-чет j= s1=s1+aij s2s j=j+ i= j=6 aij= i=i+ i=i+ i= i= i= s2= j=1 j= i= Вывод aij j=j+ j= i=i+ i= Рис.6.1. Схема алгоритма для задания № Конец while j=6 do begin for i:=1 to 6 do s2:=s2+a[i j];

inc(j, 2);

end;

if s2s1 then for i:=1 to 6 do a[i, i]:=0;

writeln;

writeln;

for i:=1 to 6 do begin writeln;

for j:=1 to 6 do write (a[i, j]:10:2);

end;

end.

P.S.1. При отладке задачи следует задавать два набора ис ходных данных (prog8.id и prog8.id2) и в операторе assign менять эти имена, что – неудобно.

P.S.2. Можно имя файла задать не константой, а переменной и вводить это имя с клавиатуры:

... var st: string;

begin writeln (‘Имя файла: ’);

readln (st);

assign (f, st);

...

P.S.3. Можно вводить только часть подготовленной матрицы, правильно организуя при вводе переход к новой строке, иначе не те элементы будут вводиться.

… var n, m: byte;

begin readln (n, m);

...

for i:=1 to n do begin writeln;

for j:=1 to m do begin read (f, a[i, j]);

write (a[i, j]:10:2);

if not odd (i) then s1:=s1+a[i, j];

end;

readln (f);

{иначе элементы будут считываться не с той строки} end;

… Везде в программе константы шесть поменять на перемен ные n и m.

Для матрицы:

111111 Если задать размер матрицы 3*3, то S1=3, а S2=6, 111111 элементы главной диагонали будут нулями.

111111 Для всей матрицы S1=S2=18 и замены не будет.

7. АЛГОРИТМЫ 7.1. Работа с несколькими строками, значениями которых яв ляются строки символов Рассмотрим, как записать алгоритм задачи, в которой исполь зуется массив строк. Удобней объявить строку простой перемен ной, вводить одну строку, её обрабатывать, затем вторую и т.д., при работе со строками отказ от массива иногда упрощает, если не ал горитм, то обращение к символам строки.

Из внешнего фала вводится любое количество строк с количе ством символов не более 60. В текстах строк могут встречаться точ ки. В другой внешний файл выводить строки так, чтобы они заканчи вались точкой. Два файла исходный и результирующий приводятся ниже. Предполагается, что количество символов между двумя точ ками не превышает 60 символов.

F3 LA.id LA.rez Информация обрабатывается на Информация обрабатывается на ВМ.

ВМ. Машина является инструмен- Машина является инструментом.

том. Палка, камень, молоток - это Палка, камень, молоток - это инструмент.

инструмент. Инструмент ВМ - Инструмент ВМ - изменялся.

изменялся.Ctrlz,Enter F Алгоритм представим в виде программы.

var st: string[60];

i, n: byte;

f, ff: text;

begin assign (f, ‘la.id’);

reset (f);

assign (ff, ‘la.rez’);

rewrite (ff);

while not eof (f) do begin readln (f, st);

if pos (‘.’, st)=0 then write (ff,st) else begin n:=length (st);

for i:=1 to n do if st[i]=’.’ then writeln (ff, st[i]) else write (ff, st[i]);

end;

end;

end.

7.2. Алгоритмы сортировки Алгоритмов сортировок существует очень много, Д. Кнут в кни ге [8] этой теме посвятил около 500 страниц. Алгоритмы могут опти мизировать время, расходуя память (внутренняя сортировка – весь массив хранится в оперативной памяти), или наоборот оптимизиру ется память (внешняя сортировка, массив хранится на винчестере или дискете), оптимизация может идти за счёт уменьшения числа сравнений и пр.

Каждый метод имеет название, например, «Обменная сорти ровка» и в нём модификации («пузырёк», «обменная со слиянием» и др.). Мы будем заниматься алгоритмом самой простой сортировки из методов «Сортировка посредством выбора».

Сортировка может проходить по убыванию элементов массива (от максимального значения к минимальному значению) или по воз растанию. Для нашей задачи сортировку будем проводить по убы ванию, для чего нам понадобится находить индекс максимального элемента (для другого порядка размещения элементов – индекс ми нимального элемента). На рис. 7.1. дано объяснение этому алго ритму, а на рис. 7.2. приведена его схема.

i=1 i=2... i=n- k=i k=i j=i+1 j=i+ K K......

j=n j=n Ai Ak Рис.7.1. Алгоритм сортировки выбором Начало j=i+1 i= p=ai i= Вывод ai=ak Ввод ai ai ak=p ajak i=i+ i=i+ i=i+ k=j i=n j=j+ i=n i=n i= Конец k=i j=n Рис. 7.2. Сортировка элементов массива по убыванию Последовательно n-1 раз просматриваем элементы массива A, при каждом просмотре в цикле по j (i+1= j = n) находим индекс (K) максимального элемента в массиве и меняем местами значения элементов Ai и Ak (алгоритм обмена содержимого двух областей па мяти).


Фрагмент программы с вложенными операторами цикла:

… for i:=1 to n-1 do begin k:=i;

for j:=i+1 to n do if a[j]a[k] then k:=j;

p:=a[i];

a[i]:=a[k];

a[k]:=p;

end;

...

Вот фрагмент другого алгоритма, когда самый тяжёлый эле мент «всплывает» - этот метод называется «пузырёк». Всплывать положено самому лёгкому элементу, но мы сохраняем сортировку по убыванию.

… pr:=true;

i:=2;

while (i=n-1) and pr do begin pr:=false;

for j:=n downto i do if a[j]a[j-1] then begin p:=a[j];

a[j]:=a[j-1];

a[j-1]:=p;

pr:=true;

end;

inc(i);

end;

...

Переменная pr позволяет организовать досрочный выход из цикла, если при каком-то просмотре массива не сделано ни одной перестановки.

Сортировать по этим алгоритмам можно не только числа, но и строки, ведь каждый символ строки представлен своим кодом. Коды латинских букв упорядочены по возрастанию (прописные буквы имеют код меньше, чем строчные), а с русскими есть некоторые проблемы (посмотрите их коды). Не забудьте объявить с типом string[...] не только элементы сортируемого массива, но и посредни ка P.

7.3. Поиск одинаковых элементов в массиве Задача «в массиве A найти одинаковые элементы и вывести их порядковые номера», при добавлении некоторых условий, может оказаться довольно не простой. Вот массив: 1 5 6 2 3 7 5 8 0 3 4 5 12 9;

возьмём первый элемент массива (1) и сравним его со всеми элементами от второго до последнего, затем возьмём второй эле мент (5) и выполним сравнение его с элементами от третьего до по следнего элемента. Последний раз во внешнем цикле будет участ вовать предпоследний элемент (12), который сравнивается с по следним элементом (9). Если при любом сравнении будут найдены одинаковые элементы, их номера выводятся. Вот реализация этого алгоритма:

... for i:=1 to n-1 do for j:=i+1 to n do if a[i]=a[j] then writeln (a[i], ’:’, i:3, j:3, ‘;

’);

...

5: 2 7;

5: 2 12;

...

5: 7 12;

Вывод индексов одинаковых элементов со значением три опущен.

Такое представление результата – неудобно. Номера 2, 7, должны быть выведены только по одному разу.

5: 2 7 12;

3: 5 10 13;

Новый алгоритм испортит исходный массив, поэтому, если в дальнейшем он будет нужен, заведите его копию. При нахождении одинаковых элементов второму элементу (a[j]) следует присвоить значение, которое не может встретиться в массиве («мусорное»

значение), для чисел это может быть, например, -maxint, для слов ‘***’. Этот «мусор» не должен выводиться в качестве одинаковых значений, поэтому для них внутренний цикл не будем выполнять.

... for i:=1 to n-1 do begin if a[i] =- maxint then continue;

k:=0;

for j:=i+1 to n do if a[i]=a[j] then begin inc(k);

if k=1 then write(a[i], ‘:’, i:3);

write(j:3);

a[j]:=- maxint;

end;

if k0 then writeln(‘;

’);

end;

...

7.4. Максимальное количество следующих подряд одинаковых значений Вводится любое количество чисел M: 6 0 0 4 0 7 0 0 0 0 5 0 7 3 Ctrlz, Enter. Определить максимальное количество идущих подряд нулей (в нашем случае – четыре). В представленной на рис.

7.3. схеме алгоритма, K – текущее количество нулей, а MK - макси мальное. Здесь надо обратить внимание на два важных момента:

• повторное обнуление счётчика K в цикле;

• сравнение максимального и текущего значений после выхода из цикла (без второго сравнения, в случае если последние числа..5 3 0 0 0 0 0, ответ пять мы не получим).

Запишите текст программы для схемы алгоритма, приведён ной на рис. 7.3.

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

7.5. Алгоритмы последовательного и двоичного поиска Последний алгоритм, которым мы займёмся, это алгоритм по иска в массиве заданного значения и вывода порядкового номера найденного элемента или выдачи сообщения, что такого элемента в массиве нет.

Алгоритм последовательного поиска в массиве A значения, Начало mk= есть m=0 дан k= ные Ввод m k=k+1 k0 kmk mk=k kmk Вывод mk mk=k Конец k= Рис. 7.3. Максимальное количество идущих подряд нулей равного B записывается так:

... for i:=1 to n do if a[i]=b then writeln (i);

...

здесь не предусмотрена проверка и выдача сообщения об отсутст вии в массиве значения B. Вот устранение этого недостатка:

... pr:=true;

for i:=1 to n do if a[i]=b then begin writeln (i);

pr:=false end;

if pr then writeln (‘ Элемент =’, b, ‘ отсутствует’);

...

Вы должны помнить, что переменная pr объявляется с типом boolean и, следовательно, является логическим выражением, по этому использование проверки pr=true не требуется.

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

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

7.4. схеме алгоритма приняты обозначения:

ib – начальное значение индекса;

ik – конечное значение индекса;

is – среднее значение индекса, вычисляется по формуле (ib+ik)/2, только результат нужен целый.

Начало Ввод b i= Ввод ai ikib i=i+ Вывод "НЕТ" is=(ib+ik)/ i=n Конец ib= aisb ik=n ik=is-1 aisb Вывод is Рис. 7.4. Схема ib=is+1 STOP алгоритма двоичного поиска Для массива, упорядоченного по возрастанию его элементов (0 2 3 5 6 7 8 9 17 22), сравнение a[is] и B приведёт к таким действи ям:

ib=is+1 нижняя половина массива a[is] B ik=is-1 верхняя половина массива = вывод is Для массива, упорядоченного по убыванию его элементов (22 17 8 7 6 5 3 2 0), сравнение a[is] и B приведёт к другим действиям:

ik=is-1 верхняя половина массива a[is] B ib=is+1 нижняя половина массива = вывод is... pr:=true;

ib:=1;

ik:=n;

while ikib do begin is:=(ib +ik) div 2;


if a[is]b then ik:=is- else if a[is]b then ib:=is+ else begin writeln(is);

pr:=false;

break end;

end;

if pr then writeln (‘ Элемент =’, b, ‘ отсутствует’):...

7.6. Тесты 1. В массиве 10 строк, в каждой из которых не более символов. В программе объявлено:

var ST: array [1..10] of string[40];

Для обращения к J-му символу I-ой строки в программе надо записать:

ST[i, j] ST[i][j] ST[j] 2. В массиве 10 строк, в каждой из которых не более символов. В программе объявлено:

var ST: array [1..10, 1..40] of char;

Для обращения к J-му симво лу I-ой строки в программе надо записать:

ST[i, j] ST[i][j] ST[j] 3. Массив строк не используется. В программе объявлено:

var ST: string [40];

В цикле по параметру i будут последова тельно обрабатываться десять строк. Для обращения к j-му символу строки при i-ом параметре цикла в программе надо записать:

ST[i, j] ST[i][j] ST[j] 4. Удалить пробелы в конце слова (var sl1, sl2 : string[10];

...

readln(sl1, sl2);

) можно так:

n:=length(sl1);

k:=pos(‘ ‘, sl1);

delete(sl1, n, k);

k:=pos(‘ ‘, sl1);

delete(sl1, k, 11-k);

for i:=10 downto 1 do if sl1[i]=’ ‘ then delete(sl1, i, 1);

5. Переменная N может принимать целые значения от -5 до (var N:

-5..1;

). Следует случайным образом сформировать 100 таких чисел и найти, сколько из них имеют значения -5, -4, -3, -2, -1, 0, 1.

Какой алгоритм проще решит эту задачу:

var mc: array[-5..1] of byte;

... for i:=-5 to 1 do mc[i]:=0;

for i:=1 to 100 do begin n:=random(?) - ?;

inc(mc[n]);

end;

...

var mc: array[1..7] of byte;

... for i:=1 to 7 do mc[i]:=0;

for i:=1 to 100 do begin n:=random(?) - ?;

case n of -5: inc( mc[1]);

-4: inc( mc[2]);

...

1: inc( mc[7]);

end;

end;

...

Вместо Case предыдущего варианта использовать условный оператор... if n= -5 then inc( mc[1]) else if n= -4 then inc( mc[2])...

else inc( mc[7]);

5. В массиве t1,...,t20 удалить элемент с номером K:

for i:=k to n-1 do t[i]:=t[i+1];

i:=k;

while i=20 do t[i]:=t[i+1];

for i:=21 downto k do t[i]:=t[i-1];

ИТОГОВЫЕ ТЕСТЫ 1. В качестве метки в Паскале могут использоваться:

- идентификаторы и числа от 0 до - последовательность символов в апострофах - целые числа 2. Для описания переменных в Паскале используются служеб ные слова:

- type - var - const 3. Число, записанное в виде последовательности 3А7, пред ставляет:

- неверную запись - число в восьмеричной системе счисления - число в шестнадцатеричной системе счисления 4. Для записи числа в восьмеричной системе счисления ис пользуются:

- любые арабские цифры - цифры от нуля до семи - цифры от нуля до восьми 5. Правильной записью числа 123,45*106, при условии норма лизации 10=|мантисса|100 будет:

- 0.12345* - 12345* - 12.345* 6. В Паскале к целым типам, кроме integer, относятся:

- byte, longint, single, word, shortint - byte, longint, word, shortint - byte, longint, word, shortint, extended 7. Для реализации проверки 1= A 50, в программе следует записать:

- 1=a - (a=1) or (a50) - (1=a) and (a50) 8. В программе записаны процедуры вывода: write(1);

write(2,3);

writeln(4);

write(5,6);

writeln;

writeln(7,8);

результат будет выглядеть:

- - - - 9. Результатом выражения Паскаля concat(copy(‘ЛИМА’, 3, 2), copy(‘ПАЛЬМА’, 5, 2)) будет строка:

- пустая строка - ЛИПА - МАМА 10. Результатом выражения Паскаля random(10) + random(15) + 6 будут числа:

- от 0 до - от 6 до - от 6 до 11. Операторы тела цикла выполнятся хотя бы один раз в опе раторах:

- for... begin... end;

- while лв begin... end;

- repeat... until лв;

12. Оператор continue позволяет:

- повторно выполнить группу операторов - не выполнять операторы от него до конца тела цикла, воз вращаться к заголовку цикла и снова выполнять циклический уча сток вычислений - прекращать вычисления - организовать выход из цикла 13. Значениями R, K при выводе после вызове подпрограммы val(‘123e2’, r, k) будут:

- 12300 - 123 - 1.23e4 14. Для описания циклических участков в вычислениях исполь зуется оператор:

- while...

- составной begin... end - case... end 15. Многовариантный расчёт – это:

- сравнение нескольких алгоритмов решения задачи - расчёт нескольких наборов данных без вмешательства пользователя - подбор оптимального результата 16. Какое логическое выражение удовлетворяет условию: Х лежит вне отрезков [2, 5] и [-1, 1]:

- not((x=2) and (x=5) or (x= -1) and (x=1)) - ((x=2) or (x=5)) and ((x= -1) and (x=1)) - (x= -1) or (x=5) or (x1) and (x2) 17. Если i, j, k – целые, то правильной будет следующая запись оператора присвоения:

- i:=sqrt (abs(k+j));

- i:=trunc(sqrt (abs(k+j)));

- i:=int(sqrt (abs(k+j)));

18. В массиве из 10 элементов действия над ними следует вы полнить в обратном порядке:

- for i :=10 to 1 do …;

- i:=10;

repeat …;

dec(i);

until i=10;

- for i:=10 downto 1 do …;

19. Указать корректные операторы цикла:

- i:=1;

while i=10 do begin …;

inc(i);

end;

- i:=1;

repeat …;

inc(i);

until i=10;

- for i:=1 to 10 do begin …;

inc(i);

end;

- i:=1;

repeat …;

inc(i);

until i 10;

- i:=1;

while i 10 do begin …;

inc(i);

end;

- for i:=10 to 1 do begin …;

end;

- for i:=10 downto 1 do begin … end;

20. Результат работы программы следует выводить во внеш ний файл. Для открытия файла используется процедура:

- assign (f, ‘a.rez’);

- rewrite(f);

- reset(f);

- append(f);

ЛИТЕРАТУРА Основная 1. Иванова Г.С. Основы программирования. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2002.

2. Вирт Н. Алгоритмы и структуры данных. - СПб.: Невский диалект, 2001.

3. Немнюгин С.А. Turbo Pascal. Практикум. 2-е издание. СПб.: ООО «Питер Принт», 2003.

Дополнительная 4. Милов А.В. Основы программирования в задачах и при мерах. - М.: ООО «Изд-во АСТ»;

Харьков: «Фолио», 2003.

5. Минакова Н.И., Невская Е.С. и др. Методы программиро вания. Под редакцией Угольницкого Г.А. - М.: Вузовская книга, 1999.

6. Акатнова Л.А. Лабораторный практикум по программиро ванию на языке Паскаль /МАДИ. - М., 2003.

7. Акатнова Л.А., Евстратова И.А. и др. Сборник заданий по программированию /МАДИ. - М., 1994.

8. Кнут Д. Искусство программирования для ЭВМ, т.3. – М.:

Мир, 1978.

СОДЕРЖАНИЕ МОДУЛЬ 1. ВОПРОСЫ ТЕОРЕТИЧЕСКОЙ И ПРИКЛАДНОЙ ИНФОРМАТИКИ…………………………………………. 1. От информации к информационным технологиям ………………. 1.1. Информатика, как наука ………………………………………… 1.2. Информация, её свойства, способы измерения ……………. 1.3. Информационный ресурс и информационные технологии.. 1.4. Информатизация общества …………………………………….. 1.5. Принцип программного управления ….……………………….. 1.6. Тесты..……………………………………………………………… 2. Математические основы информатики.……………………………. 2.1. Системы счисления.…………………………………………….. 2.2. Перевод из одной в другую систему счисления.…………… 2.2.1. Перевод целой части десятичного числа в любую сис тему счисления ……………………………………………… 2.2.2. Перевод дробной части десятичного числа в любую систему счисления..……………………………………….. 2.2.3. Перевод целой части числа любой системы счисления в десятичное число ………………………………………… 2.2.4. Перевод дробной части числа любой системы счисле ния в десятичное число …………………………………… 2.2.5. Перевод двоичного числа в систему счисления 2k.….. 2.2.6. Перевод числа из системы счисления 2k в двоичное число …………………………………………………………. 2.2.7. Перевод десятичного числа в двоично-десятичную систему счисления ………………………………………… 2.2.8. Перевод двоично-десятичного числа в десятичную систему счисления ….……………………………………… 2.3. Представление символьной и числовой информации в ПК.. 2.3.1. Кодировка символов ……………………………………...... 2.3.2. Представление чисел с фиксированной точкой ………. 2.3.3. Представление чисел с плавающей точкой …………… 2.4. Задания на контрольную работу по системам счисления и представлению чисел ……………………………………………... 3. Порядок подготовки и решения задач на ПК ……………………... 3.1. Постановка задачи ……………………………………………….. 3.2. Формализация задачи ….……………………………………….. 3.3. Выбор метода решения …………………………………………. 3.4. Подготовка алгоритма решения задачи.……………………... 3.5. Запись алгоритма..……………………………………………….. 3.6. Отладка программы ……………………………………………… 3.7. Решение задачи …………………………………………………... 3.8. Несколько основных алгоритмов ……………………………… 3.9. Тесты ……………………………………………………………….. 4. Операционные системы ……………………………………………… 4.1. Назначение операционных систем …………………………..... 4.2. Идентификация файлов ………………………………………… 4.3. Файловая система ……………………………………………….. 4.4. Основные команды ………………………………………………. 4.5. Операционная система Windows ……………………………… 4.5.1. Некоторая терминология ………………………………….. 4.5.2. Многооконная система …………………………………….. 4.5.3. Работа с файлами и папками …………………………….. 4.6. Задание на лабораторную работу по операционным системам……………………………………………………………. 5. Интегрированная среда разработчика и редактор этой среды... 5.1. Главное меню среды Turbo …………………………………….. 5.2. Меню File – действия с файлами и выход …………………… 5.3. Меню Edit – редактирование файлов ………………………… 5.4. Обзор основных команд редактора ………………………....... 5.5. Меню Search – поиск и замена текста ………………………... 5.6. Меню Run и Compile – запуск программы на выполнение или её компиляция ……………………………………………….. 5.7. Меню Window – работа с окнами ……………………………… 5.8. Меню Help – справочная служба ……………………………… 5.9. Задание на лабораторную работу по меню и редактору среды Turbo ……………………………………………………….. 6. Схемы алгоритмов …………………………………………………….. 6.1. Циклический сдвиг элементов массива вправо …………….. 6.2. Циклические участки в вычислениях без массивов ………… 6.3. Сумма элементов массива чётных по значению и индексу. 6.4. Индексы последнего и первого отрицательного элемента в массиве ……………………………………………………………. 6.5. Досрочный выход из цикла при накоплении суммы и фор мирование нового массива из всех элементов исходного … 6.6. Формирование нового массива из части элементов исход ного………………………………………………………………….. 6.7. Задания на контрольную работу по схемам алгоритмов …. ЛИТЕРАТУРА ……………………………………………………………… МОДУЛЬ 2. АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ……… 1. Запись алгоритма решения задачи на внешних алгоритмиче ских языках ……………………………………………………………… 1.1. Структура программы ………………………………………. 1.2. Символы и знаки операций ………………………………… 1.3. Константы ………………………………………………….….. 1.4. Переменные ………………………………………………….. 1.5. Массивы ……………………………………………………….. 1.6. Указатели функций ………………………………………….. 1.6.1. Математические функции ………………………………….. 1.6.2. Функции для работы со строками символов ……………. 1.7. Выражения ……………………………………………………. 1.8. Контрольная работа по теме выражения …………….…. 1.9. Тесты ……………………………………………………….…. 2. Операторное программирование …………………………………… 2.1. Оператор присваивания ……………………………………. 2.2. Оператор вызова подпрограмм …………………………… 2.3. Лабораторная работа «Линейные участки в вычислениях»……………………………………………………… 2.4. Оператор перехода …………………………………………. 2.5. Составной оператор ………………………………………… 2.6. Условный оператор …………………………………………. 2.7. Оператор выбора ……………………………………………. 2.8. Многовариантные расчёты ………………………………… 2.9. Лабораторная работа «Описание разветвлений» ….….. 2.10. Лабораторная работа «Строковые переменные» …….. 2.11. Операторы цикла ……………………………………………. 2.12. Ввод и вывод из стандартных и внешних файлов ……. 2.13. Тесты ………………………………………………………….. 3. Алгоритмы ……………………………………………………………… 3.1. Массив счётчиков, формируемый без проверок ………. 3.2. Удаление пробелов в строке символов …………………. 3.3. Удаление и вставка элемента в массив …………………. 4. Циклические участки в вычислениях и их запись в программе 4.1. Лабораторная работа «Одномерные массивы» ……….. 4.2. Лабораторная работа «Простые циклические программы» ……………………………………………………….. 4.3. Документированный вывод ………………………………… 4.4. Лабораторная работа «Документированный вывод» …. 5. Вложенные циклы. Операторы break и continue …………………. 6. Лабораторная работа «Матрицы» ………………………………….. 7. Алгоритмы ………………………………………………………………. 7.1. Работа с несколькими строками, значениями которых являются строки символов ………………………………………. 7.2. Алгоритмы сортировки ……………………………………… 7.3. Поиск одинаковых элементов в массиве ………………... 7.4. Максимальное количество следующих подряд одинаковых значений ……………………………………………. 7.5. Алгоритмы последовательного и двоичного поиска.….. 7.6. Тесты …………………………………………………………... ИТОГОВЫЕ ТЕСТЫ ………………………………………………………. ЛИТЕРАТУРА ……………………………………………………………… АКАТНОВА Лима Александровна ИНФОРМАТИКА. Модуль 1, Редакция авторская Подписано в печать Формат 60х84/ Печать офсетная Усл. печ.л. 9,38 Уч.-изд.л Тираж 400 экз. Заказ Цена договорная

Pages:     | 1 | 2 ||
 





 
© 2013 www.libed.ru - «Бесплатная библиотека научно-практических конференций»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.