- •ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
- •Требования к оформлению лабораторных работ
- •1. ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
- •13.1 План разработки алгоритмов и программ
- •Таблица 1.1 Результат ручной прокрутки после первого этапа
- •Таблица 1.2 Результат ручной прокрутки после первого этапа
- •Таблица 1.3 Итог выполнения ручной прокрутки
- •13.2 Перевод алгоритма в Паскаль-программу
- •13.3 Использование готовых алгоритмов при решении задач
- •Подсчет элементов, обладающих заданным свойством
- •Поиск максимального и минимального элементов
- •Поиск элементов, обладающих заданным свойством
- •Задача 1. Подсчет ненулевых элементов
- •Задача 2. Подсчет элементов, абсолютная величина которых больше 7
- •Задача 3. Поиск элемента равного 7
- •Задача 5. Найти количество элементов массива больших среднего арифметического этих элементов
- •Задача 6. Поиск максимального элемента и подсчет частоты его появления в массиве
- •Задача 7. Поиск нулевого элемента
- •Задача 8. Поиск отрицательного числа с конца массива
- •13.4 Стандартная обработка двумерных массивов
- •Двумерный массив и его части
- •Индексы элементов двумерного массива
- •Индексы строки и столбца двумерного массива
- •Индексы диагоналей двумерного массива
- •Перенос простейших алгоритмов на двумерные массивы
- •13.5 Отладка и тестирование программ
- •2. СОЗДАНИЕ КОНСОЛЬНЫХ ПРИЛОЖЕНИЙ СРЕДСТВАМИ DELPHI 7.0
- •13.1 Создание консольного приложения средствами Delphi
- •13.2 Структура программы в Delphi
- •Таблица 2.1
- •13.3 Введение в типы данных Delphi
- •13.4 Венгерская нотация
- •13.5 Отладка и тестирование программ средствами среды Delphi 7
- •3. ЛАБОРАТОРНАЯ РАБОТА №1 «ЛИНЕЙНЫЕ ПРОГРАММЫ»
- •13.1 Пояснения и примеры к лабораторной работе
- •13.2 Задания к лабораторной работе №1:
- •4. ЛАБОРАТОРНАЯ РАБОТА №2 «АЛГОРИТМЫ С ВЕТВЛЕНИЯМИ»
- •13.3 Пояснения и примеры к лабораторной работе
- •13.2 Реализация алгоритмов с ветвлениями средствами C#
- •13.3 Задания к лабораторной работе №2
- •5. ЛАБОРАТОРНАЯ РАБОТА №3 «ОПЕРАТОР ВЫБОРА»
- •13.1 Пояснения и примеры к лабораторной работе
- •13.2 Реализация оператора выбора в языке C#
- •13.3 Задания к лабораторной работе №3
- •6. ЛАБОРАТОРНАЯ РАБОТА №4 «ЦИКЛИЧЕСКИЕ АЛГОРИТМЫ»
- •13.1 Основные разновидности циклов
- •Цикл с постусловием
- •Цикл с предусловием
- •Цикл с параметром
- •Программное прерывание выполнения циклов
- •13.2 Примеры решения задач с использованием операторов цикла
- •Проверка корректности введенных данных
- •Решение задач с использованием диапазонов чисел
- •Решение задач полным перебором
- •Пояснения к задачам 18, 23, 24, 25:
- •13.3 Задания к лабораторной работе №4
- •7. ЛАБОРАТОРНАЯ РАБОТА №5 «РЯДЫ И ПОСЛЕДОВАТЕЛЬНОСТИ»
- •13.1 Примеры решения задач
- •Вычисление суммы n-первых членов ряда
- •Вычисление суммы n-первых членов последовательности, удовлетворяющих условию
- •Нахождение наименьшего номера члена последовательности, для которого выполняется некоторое условие
- •13.2 Задания к лабораторной работе №5
- •8. ЛАБОРАТОРНАЯ РАБОТА №6 «ТАБУЛИРОВАНИЕ ФУНКЦИЙ»
- •13.1 Пример решения задачи на табулирование функции
- •8.1.2 Организация перенаправления ввода-вывода средствами C#
- •13.2 Задания к лабораторной работе №6
- •9. ЛАБОРАТОРНАЯ РАБОТА №7 «ПОДПРОГРАММЫ»
- •13.1 Задания к лабораторной работе №7
- •13.2 Задания к лабораторной работе №8
- •13.1 Примеры и пояснения к лабораторной работе
- •13.2 Задания к лабораторной работе №9
- •Задания к лабораторной работе №10
- •13.1 Примеры работы со строками
- •Пример 13.2 Удалить из строки символ, указанный пользователем.
- •Пример 13.3 Удалить из строки лишних пробелов (пробелы в начале и в конце строки, между словами также должен быть один пробел).
- •Пример 13.4 Определить количество слов в заданном тексте.
- •13.2 Задания к лабораторной работе №11
- •13.1 Задания к лабораторной работе №12
- •13.1 Пояснения к работе
- •13.1 Задания к лабораторной работе №13
- •13.1 Пояснения к лабораторной работе №14
- •Формирование файла случайных чисел
- •Анализ файла случайных чисел
- •13.2 Задания к лабораторной работе №14
- •13.1 Примеры решения задач с использованием текстовых файлов
- •13.2 Задания к лабораторной работе №15
- •13.1 Задания к лабораторной работе №16
- •13.1 Задания к лабораторной работе №17
- •13.2 Задания к лабораторной работе №18
- •13.1 Задания к лабораторной работе №19
- •ПРИЛОЖЕНИЕ А
- •ПРИЛОЖЕНИЕ Б
- •СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
- •ОГЛАВЛЕНИЕ
8. ЛАБОРАТОРНАЯ РАБОТА №6 «ТАБУЛИРОВАНИЕ ФУНКЦИЙ»
Цель работы: Сформировать навыки по табулированию функций и формированию из этих данных таблиц, оформленных средствами псевдографики.
13.1 Пример решения задачи на табулирование функции
8.1.1Организация перенаправления ввода-вывода средствами Delphi
Пример 8.1 Составить программу для вычисления значений функции
f (x) = 5 x2 + x −3 на отрезке [а, b] с шагом h. По результатам вычислений по-
строить таблицу и вывести ее в текстовый файл.
Составим систему тестов для a = 1, b = 4, h = 1 (таблица 8.1). Результатом работы нашей программы станет файл, содержащий таблицу рис. 8.1. Исполнение алгоритма показано в таблице 8.2.
Также на данном примере продемонстрирована возможность перенаправления ввода-вывода из стандартных файлов Output и Input, связанных соответственно с монитором и клавиатурой, в другие файлы.
Для справки в таблице 8.3 приведен расширенный ASCII CP-866(DOS).
|
Таблица 8.1 Система тестов |
Таблица 8.2 Исполнение алгоритма |
|||||||||||||
|
№ ша- |
|
x |
|
f(x) |
|
|
№ |
a |
b |
h |
x |
f(x) |
||
|
|
га |
|
|
|
|
шага |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
1 |
|
|
1 |
|
3 |
|
|
|
|
1 |
5 |
1 |
1 |
|
|
2 |
|
|
2 |
|
19 |
|
|
1 |
|
|
|
|
2 |
3 |
|
3 |
|
|
3 |
|
45 |
|
|
2 |
|
|
|
|
3 |
19 |
|
4 |
|
|
4 |
|
81 |
|
|
3 |
|
|
|
|
4 |
45 |
Листинг 8.1 |
|
|
|
|
|
4 |
|
|
|
|
5 |
81 |
|||
|
|
|
i:byte; |
|
|
|
|
|
|
||||||
|
Var a,b,h,x,f:double; |
|
|
|
|
|
|
||||||||
|
begin |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
repeat |
|
|
readln(a); |
|
|
|
|
|
|
||||
|
|
write( 'a='); |
|
|
|
|
|
|
|||||||
|
|
write('b='); |
readln(b); |
|
|
|
|
|
|
||||||
|
|
if a>b then |
|
|
|
|
|
|
|
|
|
|
|||
|
|
begin |
|
|
|
|
|
|
Рис.8.1 Текстовая таблица |
||||||
|
//Обмен значениями двух переменных без использования третьей: |
||||||||||||||
|
|
|
b:=b+a; a:=b-a; b:=b-a; |
|
|
|
|
|
|||||||
|
|
end; |
|
|
readln(h); |
h:=abs(h); |
|
|
|
||||||
|
|
write('h='); |
|
|
|
//Проверка того, что шаг не равен нулю
if h<>0 then break else writeln('Error: h=0') until false;
73
//Перенаправление вывода в файл 'c:\temp\out_table.txt' assign(output,'c:\temp\out_table.txt'); rewrite(output); //Создание нового файла
x:=a;
//Следующие 9 строк нужны для построения шапки таблицы write(chr(201));
for i:=1 to 20 do
if i<>10 then write(chr(205)) else write(chr(203)); writeln(chr(187));
writeln(chr(186),' x ',chr(186),' f(x) ',chr(186)); write(chr(204));
for i:=1 to 20 do
if i<>10 then write(chr(205)) else write(chr(206)); writeln(chr(185));
//Расчет и вывод непосредственно таблицы значений while x<=b do
begin f:=5*x*x+x-3;
writeln(chr(186),x:9:2,chr(186),f:10:2,chr(186));
x:=x+h;
end;
//Следующие 4 строки нужны для завершения таблицы write(chr(200));
for i:=1 to 20 do
if i<>10 then write(chr(205)) else write(chr(202)); writeln(chr(188));
close(output);
end.
Таблица 8.3 ASCII DOS 866
128 |
- А |
160 |
- а |
192 |
- └ |
224 |
- р |
129 |
- Б |
161 |
- б |
193 |
- ┴ |
225 |
- с |
130 |
- В |
162 |
- в |
194 |
- ┬ |
226 |
- т |
131 |
- Г |
163 |
- г |
195 |
- ├ |
227 |
- у |
132 |
- Д |
164 |
- д |
196 |
- ─ |
228 |
- ф |
133 |
- Е |
165 |
- е |
197 |
- ┼ |
229 |
- х |
134 |
- Ж |
166 |
- ж |
198 |
- ╞ |
230 |
- ц |
135 |
- З |
167 |
- з |
199 |
- ╟ |
231 |
- ч |
136 |
- И |
168 |
- и |
200 |
- ╚ |
232 |
- ш |
137 |
- Й |
169 |
- й |
201 |
- ╔ |
233 |
- щ |
138 |
- К |
170 |
- к |
202 |
- ╩ |
234 |
- ъ |
139 |
- Л |
171 |
- л |
203 |
- ╦ |
235 |
- ы |
140 |
- М |
172 |
- м |
204 |
- ╠ |
236 |
- ь |
141 |
- Н |
173 |
- н |
205 |
- ═ |
237 |
- э |
142 |
- О |
174 |
- о |
206 |
- ╬ |
238 |
- ю |
143 |
- П |
175 |
- п |
207 |
- ╧ |
239 |
- я |
144 |
- Р |
176 |
- ░ |
208 |
- ╨ |
240 |
- Ё |
145 |
- С |
177 |
- ▒ |
209 |
- ╤ |
241 |
- ё |
74
Продолжение таблицы 8.3
|
146 |
- Т |
178 |
- ▓ |
210 |
- ╥ |
242 |
- Є |
|
|
147 |
– У |
179 |
- │ |
211 |
- ╙ |
243 |
- є |
|
|
148 |
- Ф |
180 |
- ┤ |
212 |
- ╘ |
244 |
- Ї |
|
|
149 |
- Х |
181 |
- ╡ |
213 |
- ╒ |
245 |
- ї |
|
|
150 |
- Ц |
182 |
- ╢ |
214 |
- ╓ |
246 |
- Ў |
|
|
151 |
- Ч |
183 |
- ╖ |
215 |
- ╫ |
247 |
- ў |
|
|
152 |
- Ш |
184 |
- ╕ |
216 |
- ╪ |
248 |
- ° |
|
|
153 |
- Щ |
185 |
- ╣ |
217 |
- ┘ |
249 |
- · |
|
|
154 |
- Ъ |
186 |
- ║ |
218 |
- ┌ |
250 |
- · |
|
|
155 |
- Ы |
187 |
- ╗ |
219 |
- █ |
251 |
- √ |
|
|
156 |
- Ь |
188 |
- ╝ |
220 |
- ▄ |
252 |
- № |
|
|
157 |
- Э |
189 |
- ╜ |
221 |
- ▌ |
253 |
- ¤ |
|
|
158 |
- Ю |
190 |
- ╛ |
222 |
- ▐ |
254 |
- ■ |
|
|
159 |
- Я |
191 |
- ┐ |
223 |
- ▀ |
255 |
- |
|
|
|
|
|
|
|
|
|
|
|
8.1.2 Организация перенаправления ввода-вывода средствами C#
Пример 8.2 Составить программу для многократного (пока пользователь не нажмет клавишу N или n) формирования текстовых файлов, с возможностью выбора каталога для записи и кодовой страницы. Во все файлы записать таблицу (см. пример).
Данный пример можно дополнить формированием таблицы из примера 8.1, в этом случае вы получите возможность произвести тестирование на множестве примеров без перезапуска программы, по результатам каждого теста будет создан новый текстовый файл типа:
static void table(int number)
{
string filename = dirpath + "\\table_" + number + ".txt";
FileStream |
outFstr |
= |
new |
FileStream(filename, |
||
FileMode.Create, FileAccess.Write); |
|
|
|
|
||
StreamWriter swr; |
|
|
|
|
|
|
swr = new StreamWriter(outFstr, enc); |
|
вывода |
вывода |
|||
Console.SetOut(swr); |
//Переопределние |
|||||
файл, связанный с swr |
|
|
|
|
|
|
Console.WriteLine("╔═════════════╦════════════╗"); |
|
|||||
Console.WriteLine("║ |
F(x) |
║ |
x |
║"); |
|
|
Console.WriteLine("╚═════════════╩════════════╝"); |
|
|||||
swr.Close(); |
|
//Сохранение файла |
файлу |
вывода |
||
//Возвращение Console.Out |
к стандартному |
|||||
(экрану): |
standardOutput |
= |
new |
StreamWriter( |
||
StreamWriter |
Console.OpenStandardOutput(), Encoding.GetEncoding(866));
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);
75
} |
|
|
|
любого метода |
//Объявление полей класса для доступа из |
||||
класса: |
//путь сохранения файлов |
|||
static string dirpath; |
||||
static Encoding enc; |
//тип кодирования файла |
|
||
static void Main(string[] args) |
|
|
|
|
{ |
|
|
|
//Определение |
dirpath = Environment.CurrentDirectory; |
||||
пути к приложению |
|
|
|
|
string s; |
|
каталог |
для |
создаваемых |
Console.WriteLine("Укажите |
файлов:\n(по умолчанию: {0} нажмите Enter) ", dirpath); s = Console.ReadLine();
if (s.Length > 0)
{
DirectoryInfo DI = new DirectoryInfo(s);
if (DI.Exists) dirpath = s; //Если каталог s
существует, то сохраняем файлы туда
}
Console.Write(@"В какой кодовой странице создать файл? 1-Unicode, 2-ASCII(1251),по умолчанию ASCII(866)
Введите 1 или 2, или нажмите Enter: "); int q = 0;
try
{
q = int.Parse(Console.ReadLine());
}
catch { } switch (q)
{
case 1:
enc = Encoding.Unicode;
s = "Ваш файл будет сохранен в кодовой странице
Unicode";
break; case 2:
enc = Encoding.GetEncoding(1251);
s = "Ваш файл будет сохранен в кодовой странице
Win-1251";
break; default:
enc = Encoding.GetEncoding(866);
s = "Ваш файл будет сохранен в кодовой странице
DOS-866";
76