ТОП 10:

Різниця при роботі з файлами у мовах Паскаль та С



В стандартному Паскалі є два типи файлів: текстовий (описується як text) і дані (data, описується як file of <тип>). Послідовність для відкриття, модифікації і закривання файлів майже ідентична для обох типів. Турбо Паскаль має третій тип (нетипований файл), що дуже нагадує двійкові файлові операції, що використовуються в Турбо Сі.

В Сі до файлів звичайно звертаються як до потоку символів (побайтно); для вас текстовий файл від файлу даних в основному відрізняється ознаками - t (текстовий) и b (binary - двійковий), які можуть вказуватися при означенні файлу.

Еквіваленти між двома мовами:

 

Турбо Паскаль Турбо Сі

----------------------------------------------------------------

var

I :Integer; Int i;

X :Real; float x;

Ch :Char; char ch;

Line :string[80]; char line[80];

myRec :RecType; struct rectype myrec;

buffer :array[1..1024] of char char buffer[1024]

 

F1 :text; FILE *f1;

F2 :file of RecType; FILE *f2;

F3 :file; FILE *f3;

Assign(<fvar>,<fname>); <fvar>=fopen(<fname>,"r");

Reset (<fvar>); /* або <fvar>=fopen(<fname>,"r+");*/

Reset (<untyped fvar>,<bloksize>); /* або f1=fopen(<fname>,"r+t");*/

/* або f2=fopen(<fname>,"r+b");*/

 

Assign(<fvar>,<fname>); <fvar>=fopen(<fname>,"w");

Rewrite(<fvar>); /* або<fvar>=fopen(<fname>,"w+");*/

Rewrite(<untyped fvar>,<bloksize>); /* або f1=fopen(<fname>,"w+t");*/

/* або f2=fopen(<fname>,"w+b");*/

 

Assign(<fvar>,<fname>); <fvar>=fopen(<fname>,"a+";

Append(<text fvar>); /* або <fvar>=fopen(<fname>,"a+t");*/

/* або <fvar>=fopen(<fname>,"a+b");*/

 

Read(F1,Ch); ch=getc(f1);

Readln (F1,Line); fgets(f1,80,line);

Readln (F1,I,X); fscanf(f1,"%d%f",gi,gx);

Read (F2,MyRec); fread(&myrec,

sizeof(myrec),i,1,f2);

BlockRead(F3,buffer,Sizeof(buffer)); fread (&bufer,1,sizeof(buffer), f3);

 

Write(F1,Ch); fputc(ch,f1); /*або fprint (f1,"%c",ch);*/

Write(F1,Line); fputs(line,f1); /*або fprint(f1,"%s",line);*/

Write(F1,,,I,X); fprint(f1,"%d%f",i,x);

 

Writeln(F1,I,X); fprint(f1,"%d%f\n",i,x);

Write(F2,MyRec); fwrite(&myrec, sizeof(myrec),1,f2);

 

Seek(F2,<rec#>); fseek(f2,<rec#>*sizeof(rectype),0);

Flush(<fvar>); fflush(<fvar>);

Close(<fvar>); fclose(<fvar>);

BlockWrite(F3,buffer,Sizeof(buffer); fwrite(&buffer,1, sizeof(buffer),f3);

 

Цей короткий приклад програми демонстрирує вивід текстового файлу (ім’я якого вводиться в командному рядку) на екран.

 

Турбо Паскаль Турбо Сі

----------------------------------------------------------------

 

program DumpIt; # include<stdio.h>

 

var main(int argc,char *argv[])

F :Text; {

Ch :Char; FILE *f;

begin int ch;

Assign(F,ParamStr(1));

{SI-}Reset(F);{SI+} f=fopen(argv[1],"r");

if IOResult<>0 then begin if (f==NULL){

Writeln ('Cannot open ',ParamStr(1)); printf("Cannot

open %s\n",argv[1]);

Halt(1); return(1);

end; }

While not EOF(F) do begin

Read(F,Ch); while((ch=getc(f))!=DCF)

Write (Ch) putchar(ch);

end;

Close (F) fclose(f);

end. }

 

-----------------------------------------------------------------

 

 

Завдання

Створити файл (базу даних) що містив би записи у такому форматі:

— перший запис — число типу long, що означає загальну кількість записів у файлі;

— після нього йдуть описані нижче записи (за варіантами).

Відповідно перший запис від початку файлу має зміщення 4 байти, наступний — 4+<розмір запису> байт і т. д. Забезпечити зручний інтерфейс для введення даних і передбачити наступні функції (за варіантами):

Структура полів бази даних успішності студента (завдання 1 — 10):

Прізвище, ім’я, по-батькові студента; char [60]

Дата народження date

Стать (ч/ж) char [1]

Група char [10]

Середній бал float

Варіанти завдань для наведеної структури бази даних:

1. Сортування записів по успішності студентів. Видалення записів з успішністю менше заданої.

2. Пошук студента по полю П.І.Б. без врахування регістру. У випадку якщо не знайдено такого студента вивести його найближчий відповідник. Наприклад: користувач вводить: “Петр” і отримує дані на студента “Петров І.В.”.

3. Підрахунок кількості студентів які отримуватимуть стипендію (середній бал вище заданого) і сортування їх по групам. Наприклад: БМ‑21: 5 чол; ПК‑11: 8 чол. і т. д.

4. Зручний інтерфейс для редагування бази даних: додавання, вилучення і редагування вже існуючих записів.

5. Фільтрування бази даних по полю “Група” і сортування результатів по полю “П.І.Б.”. Тобто: користувач вводить: “ЕС‑31” і отримує список всіх студентів групи ЕС‑31, впорядкований по прізвищу студентів.

6. Виведення П.І.Б. а також дати народження всіх студентів жіночої статі молодших вказаного віку. Тобто користувач вводить вік студента, наприклад 19 і отримує список студенток молодших 19 років з датами їх народження.

7. Підрахунок середнього балу кожної групи і виведення студентів групи, середній бал якої є найбільшим, у порядку спадання середнього балу кожного студента.

8. Виведення списку наймолодших студентів чоловічої статі у кожній групі. Тобто: наймолодший студент групи БМ‑42 Іванов Б. П., вік 20 років; і т. д.

9. Сортування записів у базі даних на диску по групам. Тобто спочатку повинні йти студенти однієї групи, потім іншої і т. д.

10. Підрахувати середній вік студентів жіночої статі і видалити з бази даних студенток, вік яких більший середнього.

Структура полів бази даних книжок в бібліотеці (завдання 11 — 20):

Автор (автори) книги char [120]

Назва книги char [240]

Рік видання unsigned int

Місто і видавництво у форматі: [Назва міста: Назва видавництва] char [80]

Кількість сторінок unsigned int

Кількість примірників unsigned int

Варіанти завдань для наведеної структури бази даних:

11. Сортування записів по року видавництва: від найстаріших до найновіших. Видалення записів, виданих раніше вказаного року.

12. Пошук книжок, поле “Автор” яких містить введене прізвище автора без врахування регістру, тобто: користувач вводить “Іванов” і отримує список книжок з авторами: “Петров А. М. Іванов Б. В.”, “ІВАНОВ М. П.” і т. д.

13. Кожен рік книжки, вік яких кратний N років повинні проходити повторну інвентаризацію і перевірку (чи наявні у книжці всі сторінки і т. п.) Вивести відносно вказаного N і року список книжок, що підлягають перевірці. Забезпечити можливість редагування поля “кількість примірників” і видалення із бази даних тих книжок, кількість примірників яких рівна нулю.

14. Зручний інтерфейс для редагування бази даних: додавання, вилучення і редагування вже існуючих записів. Можливість збільшувати (зменшувати) кількість примірників якоїсь книжки у випадку надходження нових (або зношення і списання старих).

15. Фільтрування книжок по полю “Місто і видавництво” без врахування видавництва і сортування результатів по полю “Автори”. Себто, користувач вводить: “Київ” і отримує відсортований по полю “Автори” список всіх книжок, виданих у Києві.

16. Користувач вводить місто, у якому видана книга і отримує такі дані: список всіх видавництв цього міста, книги яких є в каталозі. По кожному елементу списку слід вивести кількість різних книжок (не кількість примірників) цього видавництва, що є в бібліотеці. При виборі якогось видавництва користувачем слід вивести список всіх книжок цього видавництва.

17. Пошук книг назва яких містить введену стрічку (без врахування регістру). Наприклад: користувач вводить “економ” і отримує список книжок “Економіка”, “Основи економічної теорії”, “Підприємство. Основи економічного добробуту” і т. д.

18. Сортування книжок по кількості примірників. Від найменшого до найбільшого. Виділити червоним кольором у списку книжки з нульовою кількістю примірників і синім — з кількістю примірників, менше заданої. Запропонувати видалити всі книжки з нульовою кількістю примірників. Забезпечити можливість виведення тільки книжок з нульовою кількістю примірників, тільки книжок з кількістю примірників менше заданої або тільки книжок з нормальною (більшою або рівною заданій) кількістю примірників.

19. Сортування книжок по полю місто і видавництво по алфавіту. Наприклад спочатку всі книжки “Київ: Веселка”, потім “Київ: Політвидав”, а потім “Тернопіль: Збруч” і т. д.

20. Підрахувати середню кількість примірників книжок у бібліотеці. Вивести список книжок з кількістю примірників меншою середньої червоним кольором, а з кількістю примірників більшою або рівною середній зеленим кольором. Під час виведення посортувати книжки по зростанню кількості примірників.

Структура полів бази даних підприємств Тернопільської області (завдання 21 — 30):

Назва підприємства char [100]

Прізвище, ім’я, по-батькові власника char [80]

Форма власності char [50]

Рік заснування unsigned int

Кількість працюючих unsigned int

Валовий чистий прибуток float

Варіанти завдань для наведеної структури бази даних:

21. Сортування підприємств по року заснування по зростанню. Видалення підприємств, заснованих раніше вказаного року.

22. Сортування підприємств за формою власності. Виведення списку підприємств, форма власності яких відповідає формі власності, заданій користувачем.

23. Пошук підприємств, у назві яких міститься стрічка, введена користувачем без врахування регістру. Наприклад: користувач вводить “Ват” і отримує: “Ватра”, “ВАТ “Тернопільський хлібозавод № 2”” і т. д.

24. Посортувати підприємства по кількості працюючих від найменших до найбільших. Видалити з бази даних підприємства з кількістю працюючих, менше вказаної.

25. Проаналізувати базу даних і вивести список власників, яким належить більше одного підприємства разом з підприємствами, що їм належать. Видалити з бази даних підприємства, власник яких володіє найбільшою кількістю підприємств.

26. Видалити з бази даних нерентабельні підприємства (Валовий чистий прибуток яких менший нуля). Вивести список всіх підприємств, що залишилися у порядку зростання їхнього прибутку. Червоним кольором виділити підприємства з нульовим прибутком.

27. Забезпечити зручний інтерфейс для редагування бази даних: додавання нових записів, видалення і редагування вже існуючих.

28. Знайти в базі даних однакові записи. Видалити зайві і вивести список підприємств, які були записані в базі даних більше одного разу. Підрахувати їх (підприємств) кількість а також кількість видалених записів.

29. Підрахувати середню кількість працюючих на підприємстві. Для кожного підприємства підрахувати середню заробітну плату (прибуток/кількість працюючих). Підрахувати середню заробітну плату. Вивести список підприємств, заробітна плата на яких менша середньої, а кількість працюючих більша середньої.

Вважаючи прибуток підприємства постійним порахувати загальний прибуток підприємства за весь період його існування. Порахувати сумарний прибуток усіх підприємств. Вивести його, а також вивести підприємства з найбільшим і найменшим сумарним прибутком.







Последнее изменение этой страницы: 2016-04-26; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.206.194.161 (0.008 с.)