Задача по программированию

Автор работы: Пользователь скрыл имя, 28 Декабря 2010 в 21:43, курсовая работа

Краткое описание

Найти среднее арифметическое положительных чисел. Удалить все числа, большие среднего арифметического. Исходные данные хранятся в текстовом файле, переписать их в массив, динамический линейный список и типизированный файл. Обработку вести во всех трех случаях. После удаления найти среднее арифметическое всех оставшихся чисел.

Прикрепленные файлы: 1 файл

Курсовой.doc

— 64.00 Кб (Скачать документ)

Министерство  образования Российской Федерации

ИжГТУ 
 
 

Кафедра вычислительной техники 
 
 
 
 
 
 

Курсовая  работа по программированию 
 
 
 
 
 
 
 
 
 
 
 
 
 

                                                                                             Выполнил: студент гр. 262,

                                                                                                                 Дугин А.Ю

                                                                                                                Проверил: преподаватель кафедры ВТ,

                                                                                                                Талашева В.С 

 

                                                                                                                            
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Ижевск, 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('Среднее  арифметическое всех оставшихся  чисел=',sr_ar:2:2);

  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. 
 
 
 
 
 
 
 
 
 
 
 
 

Вывод 

      Решая поставленную задачу, я использовал три метода обработки информации: массив, типизированный файл, динамический список. Каждый из них имеет свои достоинства и недостатки. Работая с массивом, мы не можем удалить из него какие-то интересующие нас элементы. Сортировать массив удобно, так как к элементу можно обратиться по его порядковому номеру. Динамические переменные позволяют без затруднений удалять элементы списка из любого его места. Недостаток списков заключается в том, что часто возникают проблемы потерянных ссылок. Также у динамической переменной нет имени, поэтому обратиться к ней можно только при помощи указателя. При работе же с файлами неудобно удалять элементы из середины файла, так как приходится переставлять все компоненты. Большое достоинство файловой обработки информации заключается в том, что в файлах можно сохранять какие-либо данные. Обработка в массивах и динамических списках происходит лишь в оперативной или динамической памяти, результаты можно вывести только на экран. Из всего сказанного следует, что для успешного и оптимального написания программ надо применять различные способы, не ограничиваясь каким-то одним.

Информация о работе Задача по программированию