Главная страница
Случайная страница
Разделы сайта
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов.
За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее.
✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать».
Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами!
Приклади програм
Приклад 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; }
|