Главная страница
Случайная страница
Разделы сайта
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов.
За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее.
✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать».
Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами!
Приклади програм. Приклад 1. У текстовому файлі data.txt записано цілі числа, розділені довільною кількістю будь-яких пробільних символів
Приклад 1. У текстовому файлі data.txt записано цілі числа, розділені довільною кількістю будь-яких пробільних символів, з можливими порожніми рядками в будь-якому місці файлу. Переписати в новий файл res.sol у форматі чотирибайтових цілих чисел зі знаком тільки ті з чисел, які кратні 3.
Розв’язок.
#include < iostream> #include < conio.h>
using namespace std; int main() { FILE *fInp, *fOut; long int m; char c; // Існуючий файл відкриваємо для читання fInp = fopen(" data.txt", " r"); if (fInp == NULL) cout < < " Error of opening of a input-file" < < " data.txt\n"; else { // Відкриваємо новий файл у бінарному режимі fOut = fopen(" res.sol", " wb"); if (fOut == NULL) cout < < " Error of opening of a output-file" < < " res.sol"; else { // Читаємо до кінця файлу по одному // блоку розміром sizeof(long) і // пишемо в область пам'яті, де міститься while(fscanf(fInp, " %d", & m)! = EOF)// змінна m if (m % 3 == 0) // Пишемо у файл sizeof(m) байт з адреси & m fwrite(& m, sizeof(m), 1, fOut); fclose(fOut); // Закриття результуючого файлу fclose(fInp); // Закриття вхідного файлу cout < < " Copying is completed! \n"; } } cout < < " Press any key to exit."; getch(); return 0; }
Приклад 2. Компонентами файлу data.dbl є дані, записані у форматі типу double. Поміняти місцями ліву і праву половини цього файлу, не використовуючи допоміжний файл. Якщо у файлі непарна кількість чисел, то число, що розміщене в середині файлу, не переміщати.
Розв’язок.
#include < iostream> #include < conio.h>
using namespace std; int main() { FILE *fInpOut; long int pLeft, // Позиція в лівій половині файлу pRight, // Позиція в правій половині файлу count; // Кількість чисел у файлі double dL, dR; // Допоміжні змінні // Відкриваємо існуючий бінарний файл для
fInpOut = fopen(" data.dbl", " r+b"); // читання і запису if (fInpOut == NULL) cout < < " Error of opening of a output-file" < < " data.dbl\n"; else { // Встановлюємо покажчик поточної позиції fseek(fInpOut, 0L, SEEK_END); // на кінець файлу // Обчислюємо кількість чисел у файлі count = ftell(fInpOut) / sizeof(double); //Обчислюємо першу позицію покажчика // поточної позиції у правій половині файлу pRight = (count - count / 2) * sizeof(double); // Як значення параметра циклу - позиція покажчика // поточної позиції у лівій половині файлу for (pLeft = 0; pLeft < (count / 2) * sizeof(double); pLeft += sizeof(double), pRight += sizeof(double)) { // У циклі по черзі здійснюється встановлення // покажчика поточної позиції файлу на потрібну // позицію в лівій і правій половинах файлу зі // зчитуванням по sizeof(double) байт у змінні dL, // dR. Надалі знову по черзі виконується встановлення // покажчика поточної позиції файлу на потрібну // позицію в його правій і лівій половинах із // записом у файл умісту змінних dL, dR відповідно fseek(fInpOut, pLeft, SEEK_SET); fread(& dL, sizeof(double), 1, fInpOut); fseek(fInpOut, pRight, SEEK_SET); fread(& dR, sizeof(double), 1, fInpOut); fseek(fInpOut, pRight, SEEK_SET); fwrite(& dL, sizeof(dL), 1, fInpOut); fseek(fInpOut, pLeft, SEEK_SET); fwrite(& dR, sizeof(dR), 1, fInpOut); } fclose(fInpOut); // Закриття файлу cout < < " Transformation is veiled! \n"; } cout < < " Press any key to exit."; getch(); return 0; }
Приклад 3. Дано два файли, що містять числа у форматі double. У якому з цих файлів мінімальне значення перебуває ближче до його початку?
Розв’язок.
#include < iostream> #include < conio.h> using namespace std; long int PosMinInFile(FILE * f); // Прототип
int main() { FILE *f1, *f2; long int p1, p2; char Name1[256], Name2[256]; cout < < " Enter a name of the first file: \n"; cin.getline(Name1, 256); f1 = fopen(Name1, " rb"); // Відкриваємо перший бінарний if (! f1) // файл для читання та робимо перевірку cout < < " Error of opening of a file " < < Name1; else { cout < < " Enter a name of the second file: \n"; cin.getline(Name2, 256); // Відкриваємо другий бінарний файл для читання if (! (f2 = fopen(Name2, " rb"))) // та робимо перевірку cout < < " Error of opening of a file " < < Name2; else { if ((p1 = PosMinInFile(f1)) == -1) cout < < " File " < < Name1 < < " is empty"; else { if ((p2 = PosMinInFile(f2)) == -1) cout < < " File " < < Name2 < < " is empty"; else if (p1 < p2) cout < < " In a file " < < Name1; else if (p1 > p2) cout < < " In a file " < < Name2; else cout < < " Positions are equal"; } fclose(f1); fclose(f2); } } cout < < " \nPress any key to exit."; getch(); return 0; } // Визначення функції long int PosMinInFile(FILE * f) { double Min, d; long int i = 0, Result = -1; // Читаємо по одному блоку у sizeof(double) байт, поки while (fread(& d, sizeof(double), 1, f)) // функція { // fread() не поверне значення 0 if (Result == -1 || d < Min) { Min = d; Result = i; } i++; } return Result; }
|