Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания.pdf
Скачиваний:
81
Добавлен:
13.02.2015
Размер:
1.2 Mб
Скачать

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

table_1.txt

Продолжение таблицы 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