Автор работы: Пользователь скрыл имя, 28 Декабря 2010 в 21:43, курсовая работа
Найти среднее арифметическое положительных чисел. Удалить все числа, большие среднего арифметического. Исходные данные хранятся в текстовом файле, переписать их в массив, динамический линейный список и типизированный файл. Обработку вести во всех трех случаях. После удаления найти среднее арифметическое всех оставшихся чисел.
Министерство образования Российской Федерации
ИжГТУ
Кафедра
вычислительной техники
Курсовая
работа по программированию
Ижевск,
2003
Текст
задачи
Найти
среднее арифметическое положительных
чисел. Удалить все числа, большие
среднего арифметического. Исходные данные
хранятся в текстовом файле, переписать
их в массив, динамический линейный
список и типизированный файл. Обработку
вести во всех трех случаях. После удаления
найти среднее арифметическое всех оставшихся
чисел.
Листинг
программы
program kurs;
uses crt;
type din=^rec;
rec=record
info:integer;
next:din;
end;
var f1:text;
f2:file of integer;
sr_ar:real;
sum:integer;
x,y,i:integer;
proc:integer;
ch:char;
kol:integer;
first,p1,p2:din;
priz:boolean;
{
*** МЕНЮ ***
}
procedure menu;
begin
clrscr;
writeln('Выберете нужный Вам способ обработки информации:');
writeln('1-с помощью массива');
writeln('2-с помощью типизированного файла');
writeln('3-с помощью
динамического линейного
writeln('Esc-выход');
writeln;
end;
{
*** СОРТИРОВКА В МАССИВЕ ***
procedure massiv;
const n=10;
var a:array [1..n] of integer;
i:integer;
kol:integer;
begin
reset(f1);
i:=1;
while not seekeof(f1) do
begin
read(f1,x);
a[i]:=x;
inc(i);
end;
for i:=1 to n do
write(a[i],' ');
sum:=0;
for i:=1 to n do
sum:=sum+a[i];
sr_ar:=sum/n;
write('Среднее арифметическое=',sr_ar:2:2);
writeln;
writeln('После сортировки в массиве:');
sum:=0;
kol:=0;
for i:=1 to n do
if a[i]<=sr_ar then
begin
write(a[i],' ');
sum:=sum+a[i];
inc(kol);
end;
sr_ar:=sum/kol;
write('Среднее
арифметическое всех
writeln;
end;
{
*** СОРТИРОВКА В ФАЙЛЕ ***
procedure vivod_sr_ar;
begin
sum:=0;
assign(f2,'C:\f2.dat');
reset(f2);
while not eof(f2) do
begin
read(f2,x);
write(x,' ');
sum:=sum+x;
end;
sr_ar:=sum/filesize(f2);
writeln('Среднее арифметическое файла=',sr_ar:2:2);
end;
procedure fail;
var z:integer;
begin
writeln;
reset(f1);
rewrite(f2);
while not seekeof(f1) do
begin
read(f1,x);
write(f2,x);
end;
write('Типизированный файл состоит из чисел:');
close(f2);
writeln;
vivod_sr_ar;
repeat
priz:=true;
reset(f2);
repeat
read(f2,x);
if x>sr_ar then
begin
priz:=false;
for i:=filepos(f2) to filesize(f2)-1 do
begin
seek(f2,i);
read(f2,z);
seek(f2,i-1);
write(f2,z);
end;
seek(f2,filesize(f2)-1);
truncate(f2);
end;
until EOF(f2);
until priz=true;
writeln('После сортировки файла:');
vivod_sr_ar;
writeln;
end;
{
*** СОРТИРОВКА В ДИНАМИЧЕСКОМ
СПИСКЕ ***
}
procedure sozd_spiska;
begin
reset(f1);
first:=nil;
while not seekeof(f1) do
begin
new(p1);
read(f1,p1^.info);
p1^.next:=nil;
if first=nil then
first:=p1
else p2^.next:=p1;
p2:=p1;
end;
writeln('Список создан');
end;
procedure vivod_spiska;
begin
p1:=first;
while p1<>nil do
begin
write(p1^.info,' ');
p1:=p1^.next;
end;
writeln('Конец списка');
end;
procedure poisk_sr;
begin
kol:=0;
sum:=0;
p1:=first;
while p1<>nil do
begin
sum:=sum+p1^.info;
inc(kol);
p1:=p1^.next;
end;
sr_ar:=sum/kol;
writeln('Среднее арифметическое списка=',sr_ar:2:2);
end;
procedure sort_spiska;
begin
sozd_spiska;
vivod_spiska;
poisk_sr;
p1:=first;
while p1^.next<>nil do
begin
if p1^.next^.info>sr_ar then
begin
p2:=p1^.next;
p1^.next:=p1^.next^.next;
dispose(p2);
end
else p1:=p1^.next;
end;
writeln('Список после сортировки:');
vivod_spiska;
poisk_sr;
writeln;
end;
{
*** ГОЛОВНАЯ ПРОГРАММА ***
BEGIN
clrscr;
assign(f1,'C:\123.txt');
assign(f2,'C:\f2.dat');
menu;
repeat
ch:=readkey;
case ord(ch) of
49 : massiv;
50 : fail;
51 : sort_spiska;
end;
until ord(ch)=27;
close(f1);
readkey;
END.
Вывод
Решая поставленную задачу, я использовал три метода обработки информации: массив, типизированный файл, динамический список. Каждый из них имеет свои достоинства и недостатки. Работая с массивом, мы не можем удалить из него какие-то интересующие нас элементы. Сортировать массив удобно, так как к элементу можно обратиться по его порядковому номеру. Динамические переменные позволяют без затруднений удалять элементы списка из любого его места. Недостаток списков заключается в том, что часто возникают проблемы потерянных ссылок. Также у динамической переменной нет имени, поэтому обратиться к ней можно только при помощи указателя. При работе же с файлами неудобно удалять элементы из середины файла, так как приходится переставлять все компоненты. Большое достоинство файловой обработки информации заключается в том, что в файлах можно сохранять какие-либо данные. Обработка в массивах и динамических списках происходит лишь в оперативной или динамической памяти, результаты можно вывести только на экран. Из всего сказанного следует, что для успешного и оптимального написания программ надо применять различные способы, не ограничиваясь каким-то одним.