Способы обработки данных

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

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 24.05.2013
Размер файла 63,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

ГОУ ВПО Ижевский государственный технический университет

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

Курсовая работа

на тему: "Способы обработки данных"

по дисциплине "Языки программирования"

Разработал: ст. гр.3-36-1

Приняла: ст. преп. каф. ВТ

Габитова Г.Н.

Ижевск 2010

Постановка задачи

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

Задание: Просуммировать и удалить числа, встречающиеся по одному разу. Затем сумму этих чисел добавить в конец.

алгоритм массив типизированный файл

Блок-схема программы

fail

Текст программы

program kurs;

uses crt;

const n=10; {максимальная длина массива}

type mas= array [1. n] of byte; {тип для массивов}

mn= set of byte; {тип для множеств состоящих из чисел}

fille= file of byte; {тип для типизированных файлов состоящих из чисел}

din=^mode; {ссылочный тип}

mode=record {тип запись с полями}

x: byte; {для хранения числа}

adr: din; {и для хранения адреса следующего элемента}

end; {конец типа запись}

var i,v,ch: byte; {ch-хранит числа, необходима для создания текстового файла, если исходный не был найден, i-количество записанных в текстовый файл чисел, v-используется как логическая для определения какую процедуру вызвать и выхода из программы}

t: text; {исходный текстовый файл}

a: mas; {массив}

f: fille; {типизированный файл}

first,p1,p2: din; {first-голова списка, p1,p2-для перемещения по списку}

procedure delmass (k1: Integer; Var m: mas); {процедура удаления k1 элемента из массива m, путем сдвига всех элементов массива, лежащих справа от удаляемого, на 1 позицию влево}

var i: byte; {счетчик цикла, он же номер элемента в массиве}

begin

for i: =k1 to n-1 do {перебираем элементы массива от удаляемого до предпоследнего}

m [i]: = m [i+1]; {i-му элементу присваиваем значение i+1-го элемента (на первом шаге удаляемому присвоится значение элемента следующего за ним}

m [n]: =0; {последнему элементу массива присваиваем 0}

end;

procedure mass (var a: mas); {процедура обрабатывающая переданный в нее массив a соответственно заданию}

var ch,sum,kol,j: byte; {ch-счетчик количества встреч i-го числа в массиве, sum-сумма чисел встречающихся 1 раз, kol-количество чисел встречающихся 1 раз, j-счетчик цикла}

mn1,mnpos: mn; {mn1-множество чисел встречающихся 1 раз (которые надо удалить), mnpos-множество номеров тех элементов массива которые встречаются 1 раз}

begin mn1: = []; {обновление множества чисел}

mnpos: = []; {и обновление множества номеров}

reset (t); {встаем на начало текстового файла}

for i: =1 to n do begin {видимо в файле всегда 10 чисел}

readln (t,ch); {читаем число из файла}

a [i]: =ch; {записываем прочитанное число в массив}

end;

close (t); {закрываем текстовый файл}

ch: =0; {обнуляем количество встреч}

sum: =0; {и обнуляем сумму чисел встречающихся 1 раз}

for i: =1 to n do begin {в этом цикле берется один элемент из массива}

ch: =0;

for j: =1 to n do begin {здесь другой элемент, таким образом происходит сравнение каждого элемента с каждым, при этом рассматривается даже пара сам с собой, т е когда i=j}

if (a [i] =a [j]) then {если i-ый элемент массива = j-му}

inc (ch); {то увеличиваем количество встреч i-числа}

end;

if ch=1 then {если количество встреч равно 1, т е число совпало лишь само с собой - оно единственно}

mnpos: =mnpos+ [i]; {то его номер записываем в множество номеров}

if i in mnpos then begin {если номер попал в множество,}

sum: =sum+a [i]; {то это число прибавляем к сумме}

inc (kol); {увеличиваем счетчик чисел, встречающихся 1 раз}

end;

end;

for i: =1 to n do {перебираем все номера элементов массива}

if i in mnpos then {если номер элемента массива входит в множество номеров}

mn1: =mn1+ [a [i]]; {то значение элемента записываем в множество чисел встречающихся 1 раз}

for i: =n downto 1 do {перебираем элементы массива с конца}

if a [i] in mn1 then {если элемент массива входит в множество,}

delmass (i,a); {то удаляем его из массива}

a [n-kol+1]: =sum; {в массиве после удаления останется n-kol элементов, тогда на n-kol+1 место записываем сумму элементов встретившихся в массиве 1 раз}

{выводим получившийся массив}

writeln ('posle');

for i: =1 to n-kol+1 do

write (a [i],' ');

writeln;

writeln;

end;

procedure fill (var g: fille);

var ch,ch1,ch2,sum,kol,k,j: byte; {ch1, ch2 и k - вспомогательные переменные для чтения и записи в типизированный файл}

mn1,mnpos: mn; {все остальные переменные имеют прежнее назначение}

begin assign (f,'tipfile. txt'); {связываем файловую переменную f с файлом на диске по имени что в кавычках}

reset (t); {встаем на начало текстового файла}

rewrite (f); {типизированный файл открываем на перезапись}

sum: =0; {обнуление суммы}

kol: =0; {обнуление количества}

mn1: = []; {обновление множества чисел встречающихся 1 раз}

mnpos: = []; {обновление множества номеров чисел встречающихся 1 раз}

while not eof (t) do begin {пока не конец текстового файла}

readln (t,ch); {читаем из него число}

write (f,ch); {и записываем в типизированный файл}

end;

close (t); {закрываем текстовый файл}

reset (f); {встаем на начало типизированного файла}

{обработка алогична обработке в массиве}

for i: =0 to filesize (f) - 1 do begin {берем одно число из файла}

ch: =0;

seek (f, i); {встали перед числом, которое хотим прочитать из файла}

read (f,ch1); {читаем его}

for j: =0 to filesize (f) - 1 do begin {берем другое число из файла}

seek (f,j); {встаем перед числом, которое хотим прочитать из файла}

read (f,k); {читаем его}

if ch1=k then {сравниваем два числа}

inc (ch); {если равны, то увеличиваем число встреч}

end;

if ch=1 then {если число встретилось лишь само с собой,}

mnpos: =mnpos+ [i]; {то записываем его номер в множество}

if i in mnpos then begin {если номер числа попал в множество,}

seek (f, i); {то зачем-то еще раз его читаем,}

read (f,ch2); {но в др. переменную, хотя оно есть в ch1}

sum: =sum+ch2; {и прибавляем к сумме}

inc (kol); {увеличиваем количество чисел встретившихся 1 раз}

end;

end;

for i: =0 to filesize (f) - 1 do {перебираем все номера чисел в файле}

if i in mnpos then begin {если номер входит во множество номеров,}

seek (f, i); {то находим число под этим номером}

read (f,j); {читаем его}

mn1: =mn1+ [j]; {и записываем в множество чисел встречающихся 1 раз}

end;

ch1: =0; {обнуляем}

reset (f); {встаем на начало файла}

for i: =filesize (f) - 2 downto 0 do begin {перебираем числа с конца файла}

seek (f, i); {встаем перед считываемым числом}

read (f,j); {читаем его в j}

if j in mn1 then {если прочитанное число входит в множество,}

for ch: =i to filesize (f) - 2 do begin {то удаляем его из файла}

seek (f,ch+1); {встаем за ch-ым числом (на первом шаге за удаляемым) }

read (f,j); {читаем число, которое за ch-ым}

seek (f,ch); {встаем перед ch-ым числом}

write (f,j); {записываем вместо ch-го, следующее за ним, которое было прочитано в j}

end;

end;

k: = filesize (f) - kol; {k-указывает на позицию последним числом в файле}

seek (f,k); {встаем на эту позицию}

write (f,sum); {записываем туда сумму чисел встретившихся 1 раз}

writeln ('posle');

reset (f); {встаем на начало файла}

for i: =0 to k do begin {и выводим из него k элементов}

read (f,j); {читаем из файла очередное число}

write (j,' '); {выводим его на экран с пробелом}

end;

close (f); {закрываем типизированный файл}

writeln;

writeln;

end;

procedure spisok;

var i,j,sum: byte; mn1: mn; {назначение переменных такое же что и выше}

begin reset (t); {встаем на начало текстового файла}

first: =nil; {начало списка отсутствует}

while not eof (t) do begin {пока не конец файла}

new (p1); {создаем новый элемент списка}

readln (t,p1^. x); {в его числовое поле читаем число из файла}

if first=nil then {если список не имеет начало,}

first: =p1 {то новый элемент будет началом}

else p2^. adr: =p1; {иначе подсоединяем его к концу}

p2: =p1; {оба указателя ставим на новый элемент, он же последний}

end;

p1^. adr: =nil; {список был создан, последний элемент списка ссылаем в никуда}

p1: =first; {p1 встаем на начало списка}

close (t); {закрываем текстовый файл}

ch: =0; {обнуляем число встреч}

sum: =0; {и сумму}

mn1: = []; {обновляем множество}

while p1<>nil do begin {пока p1 не встретила конец списка делаем: }

ch: =0;

p2: =first; {p2 устанавливаем на начало списка}

while p2<>nil do begin {пока p2 не встретила конец списка делаем: }

if p1^. x=p2^. x then {сравниваем числа в p1 и p2}

inc (ch); {если равны, то увеличиваем число встреч}

p2: =p2^. adr; {p2 устанавливаем на следующий элемент списка}

end;

if ch=1 then begin {если число в p1 одинаково лишь само с собой,}

mn1: =mn1+ [p1^. x]; {то записываем его в множество чисел}

sum: =sum+p1^. x; {и добавляем его к сумме}

end;

p1: =p1^. adr; {p1 устанавливаем на следующий элемент в списке}

end;

p1: =first; {p1 и p2}

p2: =p1; {устанавливаем на начало списка}

while (p1<>nil) do begin

if not (p1^. x in mn1) then begin {если число в p1 не входит в множество,}

p2: =p1; {то p2 ставим на место p1}

p1: =p1^. adr; {а p1 сдвигаем на следующий элемент списка}

end

else {иначе элемент надо удалить}

if p1=first then begin {если элемент первый в списке}

first: =p1^. adr; {то началом списка будет второй элемент}

dispose (p1); {а первый - бывшее начало, удаляем}

p1: =first; {p1 устанавливаем на новое начало списка}

end

else begin {иначе элемент не первый в списке и его надо удалять по-другому}

p2^. adr: =p1^. adr; {p2 стоит перед удаляемым, в его адресное поле записываем адрес элемента следующего за удаляемым}

p1^. adr: =nil; {удаляемый ссылаем в никуда}

dispose (p1); {и удаляем его}

p1: =p2^. adr; {p1 ставим на элемент который стоял за удаляемым}

end;

end;

new (p2); {создаем новый элемент}

p2^. adr: =nil; {ссылаем его в никуда, т к он будет последним в списке}

p2^. x: =sum; {в его числовое поле записываем сумму}

p1: =first; {встаем на начало списка}

while p1^. adr<>nil do {находим}

p1: =p1^. adr; {последний элемент списка}

p1^. adr: =p2; {и последний ссылаем на новый созданный элемент}

writeln ('posle ');

p1: =first; {встаем на начало списка}

while p1<>nil do begin {пока не конец списка}

write (p1^. x,' '); {выводим число элемента списка на экран}

p1: =p1^. adr; {переходим на следующий элемент }

end;

writeln;

writeln;

end;

begin clrscr; randomize;

assign (t,'text. txt'); {связывание файловой переменной t с файлом на диске под именем что в кавычках}

{$i-} reset (t); {$i+} {пытаемся открыть текстовый файл, при отключенной ошибке ввода вывода}

if ioresult <> 0 then begin {если файл не удалось открыть, т е его нет}

rewrite (t); {создаем его}

for i: =1 to n do begin {n=10, значит в файл запишется 10 чисел}

ch: = random (10); {генерируем число}

writeln (t,ch); {записываем в файл}

end;

close (t); {закрываем файл, т е ставим отметку о конце файла}

end;

reset (t); {открываем его заново}

writeln ('ishodnie chisla'); {и}

while not seekeof (t) do begin {выводим}

readln (t,ch); {на}

write (ch,' '); {экран}

end;

writeln;

writeln;

readkey; {ожидание нажатия клавиши}

repeat {повторять пока не нажата клавиша 5}

writeln ('1: massiv'); {вывод}

writeln ('2: file'); {пользовательского}

writeln ('3: spisok'); {меню}

writeln ('4: clrscr'); {на}

writeln ('5: exit'); {экран}

readln (v); {чтение клавиши}

case v of

1: mass (a); {если нажата клавиша 1, то вызов процедуры с массивом}

2: fill (f); {2 - с файлом}

3: spisok; {3 - со списком}

4: clrscr; {4 - очистка экрана}

end;

until v=5; {если была нажата клавиша 5, то выход из программы}

end.

Вывод

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

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

Размещено на Allbest.ru


Подобные документы

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

    контрольная работа [65,8 K], добавлен 14.11.2010

  • Обработка текстовых данных, хранящихся в файле. Задачи и алгоритмы обработки больших массивов действительных и натуральных чисел. Практические задачи по алгоритмам обработки данных. Решение задачи о пяти ферзях. Программа, которая реализует сортировку Шел

    курсовая работа [29,2 K], добавлен 09.02.2011

  • Разработка программы для решения инженерных задач с использованием функций, процедур и сложных типов данных, в том числе динамических массивов и объединений. Интерфейс ввода/вывода. Схемы алгоритмов отдельных подзадач. Технические требования к программе.

    курсовая работа [60,7 K], добавлен 26.11.2012

  • Постановка задачи и ее математическая модель. Блок-схема алгоритма обработки массивов координат точек. Тестирование алгоритма сортировки. Используемые глобальные и локальные переменные. Листинг программы на языке Си. Анализ результатов. Пример работы.

    курсовая работа [1,8 M], добавлен 08.11.2012

  • Изучение базовых команд ПК на базе МП i286 и их форматов. Изучение прямых способов адресации данных. Наработка практических навыков работы с командами. Разработка регистровой модели выполнения операций передачи данных. Программа реализации команд.

    контрольная работа [42,2 K], добавлен 12.03.2011

  • Разработка блок-схемы и программы обработки одномерного массива с доступом к элементам с помощью индексов и с помощью указателей. Словесное описание алгоритма и пользовательского интерфейса, листинг программы обработки матрицы и результат её выполнения.

    курсовая работа [391,1 K], добавлен 30.09.2013

  • Методы обработки информации при решении прикладных задач. Математическая модель задачи. Блок-схема алгоритма программы. Компоненты, которые используются для работы в программе: элементы интерфейса; процедуры; операторы. Текст программы с пояснениями.

    курсовая работа [954,0 K], добавлен 07.01.2011

  • Конструирование программ на высокоуровневых языках программирования на примере Pelec C. Модульная схема программы. Добавление новых записей, удаление и редактирование старых. Приемы реализации динамических списков связного хранения, методы их обработки.

    курсовая работа [1,0 M], добавлен 19.05.2013

  • Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.

    курсовая работа [1,5 M], добавлен 08.02.2011

  • Термины "логический" и "физический" как отражение различия аспектов представления данных. Методы доступа к записям в файлах. Структура систем управления базами данных. Отличительные особенности обработки данных, характерные для файловых систем и СУБД.

    лекция [169,7 K], добавлен 19.08.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.