Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Задания для самостоятельного решения




Задача 1. Создать файл, компонентами которого являются целые числа. Вывести на экран компоненты, позиции которых имеют четные номера, а затем - компоненты, позиции которых имеют нечетные номера.

Задача 2. Даны символьные файлы f1 и f2. Переписать с сохранением порядка компоненты файла f1 в файл f2, а компоненты файла f2 - в файл f1. Использовать вспомогательный файл h.

Задача 3. Дан файл f, компоненты которого являются целыми числами. Никакая из компонент файла f не равна нулю. Числа в файле идут в следующем порядке: десять положительных, десять отрицательных, десять положительных, десять отрицательных и т.д. Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: пять положительных, пять отрицательных, пять положительных, пять отрицательных и т.д.

Задания для контрольной работы

Вариант 1.

Дан файл вещественных чисел. Вычислить сумму компонент файла, записанных до первого отрицательного. Записать в новый файл суммируемые компоненты.

Вариант 2.

Дан файл вещественных чисел. Найти наибольшую компоненту файла и разделить ее на все компоненты. Результаты записать в файл.

Вариант 3.

Дан файл вещественных чисел. Удалить из него максимальную компоненту.

Вариант 4.

Дан файл вещественных чисел. Найти сумму компонент, расположенных между максимальной и минимальной компонентами. Записать в новый файл суммируемые компоненты.

Вариант 5.

Дан файл вещественных чисел. Удалить из него все компоненты, принадлежащие отрезку [1,5].

Вариант 6.

Дан файл вещественных чисел. Записать вместо максимального элемента файла сумму положительных компонент.

Вариант 7.

Дан файл вещественных чисел. Найти среднее арифметическое его компонент и удалить все компоненты, превышающие среднее значение.

Вариант 8.

Дан файл вещественных чисел. Переписать в новый файл все компоненты, расположенные после первого положительного.

Вариант 9.

Дан файл вещественных чисел. Записать вместо его минимального элемента сумму отрицательных компонент.

Вариант 10.

Дан файл вещественных чисел. Переписать в новый файл все компоненты, расположенные после максимальной компоненты.

Вариант 11.

Дан файл вещественных чисел. Найти произведение его отрицательных компонент. Переписать эти компоненты в новый файл.

Вариант 12.

Дан файл целых чисел. Найти сумму компонент с четным значением и записать в новый файл те из них, значения которых превышают 4.

Вариант 13.

Дан файл вещественных чисел. Получить новый файл, записав в него сначала все положительные, а затем все отрицательные компоненты.

Вариант 14.

Дан файл вещественных чисел. Записать в новый файл все элементы данного в обратном порядке и найти сумму всех отрицательных компонент.

Вариант 15.

Дан файл вещественных чисел. Переписать в новый файл сначала все компоненты, превышающие среднее арифметическое его элементов, а затем все остальные компоненты.

Вариант 16.

Дан файл вещественных чисел. Если сумма его элементов превышает количество компонент, переписать в новый файл все положительные компоненты, в противном случае – все отрицательные.

Вариант 17.

Дан файл целых чисел. Все числа, кратные трем, переписать в новый файл. Найти их среднее арифметическое.

Вариант 18.

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

Вариант 19.

Дан файл вещественных чисел. Заменить в нем все отрицательные элементы значением минимальной компоненты файла.

Вариант 20.

Дан файл вещественных чисел. Все элементы, расположенные до минимального элемента, заменить нулями.

Записи

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

Определение типа начинается идентификатором record и заканчивается словом end. Между ними заключен список компонент, называемых полями. Каждое поле состоит из идентификатора и типа компоненты. Примеры определения типа:

Туре

PaletteType = record

Size: Byte;

Colors: Array[0..MaxColors] of Shortint

end;

ViewPortType = record

xl,yl,x2,y2: Integer;

Clip: Boolean;

end;

FileRec = record

Handle, Mode, RecSize: Word;

Private: Array[1..26] of Byte;

UserData: Array[1..16] of Byte;

Name: Array [0..79] of Char;

end;

Поле записи может иметь практически любой тип: массив, множество, другая запись. В последнем случае элементы (поля полей) имеют имя, состоящее из трёх частей. На практике чаще всего используют массивы записей, т.к. записи отражают табличную форму хранения данных и применяются в различных приложениях - от бухгалтерских задач до задач системного программирования. Порядок описания полей в определении записи задаёт их порядок хранения в памяти, а необходимый для этого объём складывается из длин полей.

Примеры решения заданий

Задача 1. Багаж пассажира характеризуется количеством вещей и общим весом вещей. Имеется информация о багаже нескольких пассажиров - соответствующие пары чисел. Подсчитать общее количество вещей и выяснить, имеется ли пассажир, багаж которого состоит из одной вещи весом не менее 30 кг.

Решение: Алгоритм решения задачи представлен на рис. 7.1.

Программа в Turbo Pascal будет иметь следующий вид:

Const z:String[3] = ' не';

t:Byte=0;

Type Info = record

q: Byte;

w: Real;

end;

Var luggage: Info;

i,n: Byte;

Begin

Write('Введите число пассажиров ');

ReadLn(n);

WriteLn ('Вводите пары чисел (количество

и вес) ');

For i:=l to n do

Begin

ReadLn(luggage.q,luggage.w);

Inc(t,luggage.q);

If (luggage.q=l) and (luggage.w>=30)

then z:='';

End;

WriteLn('Суммарное количество вещей: ',t);

WriteLn('Искомый пассажир ',z, ' имеется');

ReadLn;

End.

Рис. 8.1. Блок-схема алгоритма решения задачи 1

Определим тип Info - запись с двумя полями. Имена полей q (количество вещей одного пассажира) и w (общий вес вещей одного пассажира); типы полей Byte и Real. Luggage - идентификатор переменной введенного типа. Введём данные с клавиатуры и, используя составные имена полей записи luggage.q и luggage.w, найдём искомые величины.

 

Задача 2. Имеются сведения о кубиках: размер каждого кубика (длина ребра в см), его цвет (красный, желтый, зеленый или синий) и материал (деревянный, металлический, картонный). Найти: а) количество кубиков каждого из перечисленных цветов и их суммарный объём; б) количество деревянных кубиков с ребром 3 см и количество металлических кубиков с ребром, большим 5 см.

Решение: Алгоритм решения задачи представлен на рис. 7.2.

Для представления разнотипной информации о кубе определим тип Info - запись с тремя полями. Имена полей l (размер), с (цвет) и m (материал); типы полей Word, String[7] и String[13]. Для хранения информации введём сложную типизированную константу - массив записей Cube. Имена полей при этом указываются явно; поле от своего значения отделяется двоеточием; поля разделяются точкой с запятой; порядок следования полей должен соответствовать порядку их описания в типе Info.

Для упрощения доступа к полям записей при их совместной обработке предназначен оператор with, имеющий формат:

with <имя переменной> do <onepamop>.

Один раз указав имя переменной типа запись в операторе with, можно внутри оператора обращаться к полям записи без указания имени.

Программа в Turbo Pascal будет иметь следующий вид:

Uses Crt;

Type Info = record

l: Word;

c: String[7];

m: String [13];

end;

Const n=5;

Cube: Array [l..n] of Info =

((l: 3; с: 'синий'; m: 'деревянный'),

(l: 8; с: 'красный'; m: 'металлический'),

(l: 3; с: 'зеленый'; m: 'деревянный'),

(1: 4; с: 'желтый'; m: 'металлический'),

(1: 5; с: 'синий'; m: 'картонный'));

Var i,ql,q2,q3,q4,q5,q6: 0..n;

v: Longlnt;

Begin

ql:=0;

q2:=0;

q3:=0;

q4:=0;

q5:=0;

q6:=0;

v:=0;

For i:=l to n do

begin

With Cube[i] do

begin

{a} If с='красный' then Inc(ql);

If с='желтый' then Inc(q2);

If c='зеленый' then Inc(q3);

If c='синий' then Inc(q4);

Inc(v, l*Sqr(l));

{б} If (m='деревянный') and (l=3)

then

Inc(q5);

If (m='металлический') and (l>5)

then

Inc(q6);

End;

End;

{ вывод }

WriteLn('Красных:',ql,' желтых:',q2,

' зеленых:',q3,' синих:',q4);

WriteLn('Суммарный объем: ',v);

WriteLn('Деревянных кубиков с ребром 3 см:',

q5);

WriteLn('Металлических кубиков с ребром,

большим 5 см: ', q6);

ReadLn;

End.

 

Рис. 8.2. Блок-схема алгоритма решения задачи 2

Задача 3. Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан файл f, содержащий сведения о нескольких автомобилях. Найти фамилии владельцев и номера автомобилей данной марки.

Решение: Программа в Turbo Pascal будет иметь следующий вид:

Program Automobile;

Uses Crt;

Const n=10;

found: Boolean=false;

Type Info = record

Brand: String[15];

Number: String[15];

Surname: String [20];

end;

Var Car: Info;

f: File of Info;

z: String[20];

i: 1..n;

Begin

Assign(f,'auto.dat');

{$I-}; {отключаем проверку ошибки ввода-вывода}

Reset(f);

{$I+}

{если файл не существует, создаем новый}

If IOResult<>0 then Rewrite(f);

{если файл пустой, заполняем его}

If FileSize(f)=0 then

begin

Writeln('Файл пуст! Введите элементы!');

Write('Вводите данные построчно: ');

Write('марку автомобиля, его номер ');

Writeln('и фамилию владельца');

For i:=l to n do

begin

With Car do

begin

Readln(Brand);

Readln(Number);

Readln(Surname);

End;

Write(f,Car);

End;

Write('Введите заглавными буквами');

Write('марку автомобиля >>');

ReadLn(z);

While not Eof(f) do

begin

Read(f,Car);

With Car do

If Brand=z

then

begin

found:=true;

WriteLn(Surname:20, Number:20);

End;

End;

If Not found

then

Write('Автомобиля данной марки нет');

ReadLn;

End.

Пример демонстрирует запись в файл и чтение из файла структурных данных типа запись. Файл exl68.dat должен существовать на диске или может быть создан с помощью блока, обозначенного в программе.





Поделиться с друзьями:


Дата добавления: 2016-03-27; Мы поможем в написании ваших работ!; просмотров: 965 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Большинство людей упускают появившуюся возможность, потому что она бывает одета в комбинезон и с виду напоминает работу © Томас Эдисон
==> читать все изречения...

2491 - | 2164 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.