Студопедия

Главная страница Случайная страница

Разделы сайта

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






Приклади програм






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

Розв’язок.

#include < stdio.h>
#include < string.h>
#include < conio.h>
int main()
{
FILE *text1, *text2;
char name1[100], name2[100], s[256];
puts(" Enter the name of the source file: ");
gets(name1);
// Відкриття початкового файлу з перевіркою
if ((text1 = fopen(name1, " r")) == NULL)
{
perror(" 1");
getch();
return 1;
}
puts(" Enter the file name of the destination: ");
gets(name2);
// Відкриття результуючого файлу з перевіркою
if ((text2 = fopen(name2, " w")) == NULL)
{
perror(" 2");
getch();
return 2;
}
int n = 0;
// Визначаємо кількість рядків у файлі
while(fgets(s, 256, text1)! = NULL)
n++;
for (int i = n; i > 0; i--)
{ // Повертаємо покажчик поточної позиції
rewind(text1); // на початок файлу
// Можна інакше:
// fseek(text1, 0L, SEEK_SET);
// Читаємо до потрібного рядка. Останній прочитаний
// у вкладеному циклі рядок - це останній,
// передостанній,..., перший рядок файлу
for (int j = 0; j < i; j++)
fgets(s, 256, text1);
// Знищуємо символ '\n' у рядку, якщо він там є
// (у файлі за останньою порцією інформації
// могло не здійснюватися переведення рядка)
if (s[strlen(s) - 1] == '\n')
s[strlen(s) - 1] = '\0';
fputs(s, text2); // Пишемо рядок у файл
// Після кожного рядка, що записується у файл
if (i! = 1) // (крім останнього) виводимо
putc('\n', text2); // символ нового рядка
}
fclose(text2); // Закриваємо вихідний
fclose(text1); // і вхідний файли
return 0;
}

Приклад 2. У текстовому файлі data.txt записано цілі числа, розділені довільною кількістю будь-яких пробільних символів, з можливими порож­німи рядками в будь-якому місці файлу. Переписати в новий текстовий файл res.txt по одному в рядок без додаткових пробільних символів тільки ті з чисел, які кратні 3.

Розв’язок.

#include < stdio.h>
#include < conio.h>
int main()
{
FILE *fInp, *fOut;
// Існуючий файл відкриваємо для читання
fInp = fopen(" data.txt", " r");
if (! fInp)
puts(" Error of opening of a input-file" " data.txt");
else
{ // Відкриваємо новий файл для записування
fOut = fopen(" res.txt", " w");
if (! fOut)
puts(" Error of opening of a output-file"
" res.txt");
else
{
int m, flag = 0;
while (fscanf(fInp, " %d", & m)! = EOF)
if (m % 3 == 0)
{ // Усі числа, крім першого,
if (flag) // виводимо після переходу
putc('\n', fOut); // до нового рядка
fprintf(fOut, " %d", m);
flag = 1;
}
fclose(fOut); // Закриття результуючого файлу
puts(" Copying is completed! ");
}
fclose(fInp); // Закриття вхідного файлу
}
puts(" Press any key");
getch();
return 0;
}

Приклад 3. Занести в текстовий файл інформацію про багаж паса­жирів а саме, прізвище – текстовий рядок, перехід до нового рядка, кіль­кість речей – ціле число, загальна вага – дійсне число. Ознака закінчення введення – порожній рядок замість прізвища. Інформацію про кожного пасажира виводити з нового рядка файлу. Якщо файл із указаним ім’ям уже існує, здійснювати дозаписування в його кінець.

Розв’язок.

#include < stdio.h>
#include < string.h>
#include < conio.h>

struct TLuggage
{
char Surname[30];
int Count;
double Weight;
};

int main()
{
TLuggage Luggage;
FILE *f;
char FileName[100];
printf(" Input name of file: ");
gets(FileName);
if ((f = fopen(FileName, " a")) == NULL)
{
perror(" Trouble opening a file ");
getch();
return 1;
}
printf(" Ener surname: ");
gets(Luggage.Surname);
while (strlen(Luggage.Surname))
{
printf(" Enter the number of things (integer): ");
scanf(" %d", & Luggage.Count);
printf(" Enter the weight of luggage"
" (a real number): ");
scanf(" %f", & Luggage.Weight);
getchar(); // Зчитування ознаки кінця рядка введення
fprintf(f, " %s\n%d %f\n", Luggage.Surname,
Luggage.Count, Luggage.Weight);
printf(" Input name of file: ");
gets(Luggage.Surname);
}
fclose(f);
return 0;
}

Приклад 4. Дано текстовий файл з інформацією про багаж пасажи­рів. У файлі кожна запис про багаж починається з нового рядка і має такий формат: прізвище, кінець рядка, кількість речей (ціле число), пробіл, вага речей (дійсне число). Вивести на екран прізвища пасажирів, чия вага речей більша за середню вагу всіх речей.

Розв’язок.

#include < stdio.h>
#include < string.h>
#include < conio.h>

struct TLuggage
{
char Surname[30];
int Count;
double Weight;
};
int main()
{
TLuggage Luggage;
FILE *f;
char FileName[100];
int TotalCount = 0;
double TotalWeight = 0.0;
printf(" Input name of file: ");
gets(FileName);
if ((f = fopen(FileName, " r")) == NULL)
{
perror(" Trouble opening a file\n");
getch();
return 1;
}
while (fgets(Luggage.Surname, 30, f)! = NULL)
{
fscanf(f, " %d%lf", & Luggage.Count, & Luggage.Weight);
TotalCount += Luggage.Count;
TotalWeight += Luggage.Weight;
// Після ваги багажу у файлі здійснюється
// переведення рядка. Зчитуємо один символ,
getc(f); // щоб він не сприймався як прізвище
}
fseek(f, 0L, SEEK_SET); // Повертаємось на початок файлу
while(fgets(Luggage.Surname, 30, f)! = NULL)
{ // Знищуємо символ нового рядка
Luggage.Surname[strlen(Luggage.Surname) - 1] = '\0';
fscanf(f, " %d%lf", & Luggage.Count, & Luggage.Weight);
getc(f); // Див. вище
if (Luggage.Weight > TotalWeight / TotalCount)
puts(Luggage.Surname);
}
fclose(f);
getch();
return 0;
}

Приклад 5. Дано текстовий файл із рядками довжиною не більше 255 символів. Розвернути кожен його рядок на 180°.

Розв’язання.

#include < stdio.h>
#include < string.h>
#include < conio.h>

int main()
{
FILE *f;
char FileName[100], str[256], ch;
puts(" Enter the name of file: ");
gets(FileName);
// Відкриття існуючого файлу для введення і виведення
if ((f = fopen(FileName, " r+")) == NULL)
{
perror(" Trouble opening a file\n");
getch();
return 1;
}

int k;
long pos = 0; // Поточна позиція покажчика
// потоку (початкова)
while (fgets(str, 256, f))
{ // Зараз активний режим читання. Далі писати
// не можна Покажчик поточної позиції зсунувся
// на strlen(str) байт
k = strlen(str);
if (str[strlen(str) - 1] == '\n') // У str буде
k--; // міститись символ '\n', якщо це
// не останній рядок файлу
for (int i = 0; i < k / 2; i++) // Розвертаємо
{ // вміст рядка без '\n'
ch = str[i];
str[i] = str[k - 1 - i];
str[k - 1 - i] = ch;
}
fseek(f, pos, SEEK_SET); // Повертаємо покажчик
// поточної позиції. Тепер можна писати. Пишемо у
fprintf(f, " %s", str); // файл. Далі читати не можна
pos = ftell(f); // Запам'ятовуємо нове положення
// покажчика поточної позиції
fseek(f, 0L, SEEK_CUR); // Зсуваємо покажчик
// поточної позиції на 0 байт для забезпечення
// можливості наступного читання з файлу
}
fclose(f); // Закриваємо файл
return 0;
}






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.