Розрахункова робота ПОП

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКНІ
Факультет:
Комп’ютерні науки
Кафедра:
АСУ

Інформація про роботу

Рік:
2013
Тип роботи:
Розрахункова робота
Предмет:
Програмно-орієнтовані мови програмування
Група:
КН 2

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки, молоді та спорту України Національний університет «Львівська політехніка»  Розрахункові роботи № 1 та № 2 З дисципліни «Проблемно-орієнтоване програмування» на тему «Редагування числових даних в текстових файлах» Зміст Вступ ………………………………………………………………………………………… 1. Огляд літератури ………………………………………………………………… 2. Формулювання задачі …………………………………………………………… 3.Укруплена блок-схема з поясненнями …………………………………………… 4. Програмна реалізація алгоритму ………………………………………………… 4.1. Загальна характеристика ……………………………………………………… 4.2. Вхідна та вихідна інформація, таблиця ідентифікаторів …………………… 4.3 Структура програми, опис функцій …………………………………………… 5. Інструкція користувачеві ………………………………………………………… Висновок ……………………………………………………………………………… Список літератури …………………………………………………………………… Додатки ……………………………………………………………………………… Додаток 1. Текст програмних файлів ………………………………………… Вступ Огляд літератури Матеріали теоретичної частини були взяті з інтернет-ресурсів. Текстовий файл — форма подання послідовності  символів  в комп'ютері. Кожен символ з використовуваного набору символів  кодується у вигляді одного байта, а іноді у вигляді послідовності двох, трьох і т. д. байтів. Текстові файли розбиваються на рядки .На сучасних  платформах розбивка на рядки кодується символом зміни рядка, а іноді послідовністю двох символів (на деяких старих платформах розбивка на рядки робилося інакше). Взагалі, текстові файли можуть містити друковані символи, такі як букви, цифри й розділові знаки й деяку кількість керуючих символів, таких як знаки табуляції й зміни рядка. Текстовим файлам протиставляються двійкові (бінарні) файли, у яких інформація організована за іншими принципами. Велика частина комп'ютерного устаткування  й програм  не розрізняють текстові й двійкові файли. Існує, однак, багато програм, призначених спеціально для обробки текстових файлів або таких програм, які по різному обробляють текстові й двійкові файли. Численні мережеві протоколи, розраховані на роботу тільки з текстовими даними й не можуть обробляти довільну послідовність байтів. Програми для ручного набору текстових файлів називаються текстовими редакторами. Числові типи даних Цілі числа Цілі числа не можуть містити у собі дріб. Для від'ємного числа треба ставити знак мінус (-) перед значенням (числом). Неможна використовувати кому у введені такого числа, бо інакше буде викликана синтаксична помилка. Приклади цілих чисел: 42 10000 −233000 −100 Дійсні числа Дійсні числа можуть містити у собі як цілі, так і дробові значення з точкою відокремлення від цілої частини. Для від'ємного числа треба ставити знак мінус (-) перед значенням (числом). Приклади дійсних чисел: 20.0005 99.9 −5000.12 −9999.9991 Складні типи даних Складні типи даних — це типи, які складаються з елементів, що відносяться до простих типів. До складних типів даних відносяться: масиви; множини; рядки; записи; файли; динамічні змінні; вказівники; лінійні списки (стеки, черги); нелінійні списки (двійкові дерева, несиметричні дерева, тексти, графи); процедурний тип; об'єкти Рядки Рядки — нечисловий тип даних, та використовується для збереження букв та слів. Усі рядки складаються з символів. Рядки можуть містити цифри та числа, але все одно будуть оброблятися як текст. Приклади рядків: «A» «Hello World» «Телефон» «Мені 99 років» «1.2.3.4.5.6.7.8.9» Діапазон числових типів даних Кожне числовий тип даних має мінімальне та максимальне значення, яке називають діапазон значень. Важливо знати діапазон значень, особливо, коли працюєш з «маленькими» типами даних, оскільки у них можна зберігати лише значення у вузькому діапазоні. Спроба внести число, більше за доступний діапазон може призвести до помилок періоду компіляції/виконання, або до неправильних підрахунків (через відкидання) залежно від мови програмування, яка використовується. Діапазон змінних оснований на кількості байтів відведених для збереження значення. Цілі типи даних зазвичай здатні зберігати / значень (де / — це кількість байтів, що еквівалентно до / бітів). Для інших типів даних (напр. дійсних чисел) діапазон заплутаніший, та залежить від методу зберігання інформації у ньому. Існують також типи даних, які не викоритовують весь байт, наприклад булеві, яким потрібен лише один біт, і представляє собою двійкове значення (хоча на практиці використовується весь байт, то 7 бітів залишаються невикористаними). Формулювання задачі В даній задачі мені необхідно розробити та реалізувати програмно алгоритм,що буде редагувати числові дані у текстових файлах. Введення вхідних даних відбувається з клавіатури,результат виводиться на екран. Для написання програми я використовувала середовище Borland C++. 3.Укркплена блок-схема з поясненнями false true Пояснення до блок-схеми 1(функція, що пише числа прописом) 1. char* to_text(int x)// 0 - 999999 { char res[100]; char *ptr = res; const char *a[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve"}; 2. ptr += sprintf(ptr,"%s ",a[x]); 3. ptr += sprintf(ptr,to_text(x/1000)); x %= 1000; ptr += sprintf(ptr,"thousand "); 4. ptr += sprintf(ptr,"%s ",a[x/100]); x %= 100; ptr += sprintf(ptr,"hundred "); 5. switch(x/10) { case 2 : ptr += sprintf(ptr,"twen"); break; case 3 : ptr += sprintf(ptr,"thir"); break; case 5 : ptr += sprintf(ptr,"fif"); break; case 8 : ptr += sprintf(ptr,"eigh"); break; default : ptr += sprintf(ptr,a[x/10]); break } 6. ptr += sprintf(ptr,"ty "); x %= 10; 7. switch(x) { case 2 : ptr += sprintf(ptr,"twen"); break; case 3 : ptr += sprintf(ptr,"thir"); break; case 5 : ptr += sprintf(ptr,"fif"); break; case 8 : ptr += sprintf(ptr,"eigh"); break; } 8. ptr += sprintf(ptr,"teen"); Блок-схема(2) головної функції Пояснення до блок-схеми 2 1. int main() { clrscr(); char str2[150]; char *str=" "; char *token,*digitstr; int v=0,digit; FILE *p,*newfile,*newfile2; newfile=fopen("testnew.txt","wr"); 2. printf("\nPomulka pru vidkrutti faylu"); 3. puts("******************** Robota iz txt faylamu ****************"); puts("======= Variantu robotu =======" ); puts("1 - stvorutu file"); puts("2 - modufikyvatu file"); scanf("%d",&v); printf("%d",v); 4. clrscr(); p=fopen("test.txt","w"); puts(" Vvedit rjadku dljazapusy y file."); puts("*Dlja zavershennja vvedit #+ENTER"); 5. while (strcmp(str,"#")!=0) { scanf("%s",str); fprintf(p,"%s ",str); 7. clrscr(); puts(" ====== Moduficazia fayla ======="); puts(" 3 - zaokryglutu"); puts(" 4 - otrymatu chusla propusom"); scanf("%d",&v); 8. if (v==3) { puts(" Vvedit kilkist rozrjadiv dlja zaokryglennja (max. 5)"); scanf("%d",&digit); switch(digit) { case 1: digitstr="%.1f ";break; case 2: digitstr="%.2f ";break; case 3: digitstr="%.3f ";break; case 4: digitstr="%.4f ";break; case 5: digitstr="%.5f ";break; default : digitstr="%.2f ";break; }; puts("Read from file"); while(fgets(str2,100,p)!=NULL) { printf("\nString = %s \n",str2); token = strtok(str2, " "); if (atof(token)!=0) fprintf(newfile,digitstr,atof(token)); else fprintf(newfile,"%s ",token); while((token=strtok(NULL," "))!=NULL) { if (atof(token)!=0) fprintf(newfile,digitstr,atof(token)); else fprintf(newfile,"%s ",token); } fprintf(newfile,"\n"); } puts("\n File is completed..."); fclose(p); fclose(newfile); puts("\n Vidkrytu(1-tak,0-ni)?"); scanf("%d",&v); if (v==1) { puts("Resultat"); newfile2=fopen("testnew.txt","r"); while(fgets(str2,100,newfile2)!=NULL) printf("\n %s",str2); } 9. puts(" ===== Propusom pushutja luwe zili schisla"); puts("\n Read from file"); 10. while(fgets(str2,100,p)!=NULL) { printf("\nString = %s \n",str2); token = strtok(str2, " "); if (atof(token)!=0) fprintf(newfile,"%s(%s) ",token,to_text(atof(token))); else fprintf(newfile,"%s ",token); while((token=strtok(NULL," "))!=NULL) { if (atof(token)!=0) fprintf(newfile,"%s(%s) ",token,to_text(atof(token))); else fprintf(newfile,"%s ",token); } fprintf(newfile,"\n"); fclose(newfile); 12. puts("File is completed..."); puts("Vidkrytu(1-tak,0-ni)?"); scanf("%d",&v); 14. if (v==1) { puts("Resultat"); newfile2=fopen("testnew.txt","r"); while(fgets(str2,100,newfile2)!=NULL) printf("\n %s\n",str2); 4. Програмна реалізація алгоритму 4.1Загальна характеристика. Ім’я програми – Program. Назва програмного файла – rozrah. Мова програмування – С. Розмір програмного файлу (у текстових рядках) – 228. Середовище реалізації програми – Borland C++. 4.2. Вхідна та вихідна інформація, таблиця ідентифікаторів Вхідні дані для програми зчитуються із текстового файлу test.txt , який знаходиться у тій самій директорії із файлом програми. Також передбачена можливість створення вхідного файлу програми автоматично. Всі дії користувача впорядковані за допомогою меню. Результати виконання записуються у файл, а також можуть бути виведені на екран.  Таблиця ідентифікаторів str2[150],str – робочі змінні  token – змінна для роботи із словами digitstr – стрічка форматування p,newfile,newfile2 – змінні для роботи із файлами даних 4.3 Структура програми, опис функцій Програма складається з основної частини та розділеної на підчастини за допомогою умовних операторів, які реалізують меню роботи програми. Також існує функція для переведення числа у стрічкову форму, тобто написання числа прописом. Інструкція користувачеві програми Щоб розпочати роботу з нашою програмою,потрібно вибрати один із пунктів меню,а саме: вибираємо одиничку для створення файл , двійку для його модифікації. / Рис. 1 Вибираємо 1 для створення файлу / Рис.2 Вводимо свої дані / Рис. 3 Вибираємо 2 для редагування файлу / Рис.4 Вводимо кількість розрядів для заокруглення / Рис.5 Виведення результату / Рис.6 Вибираємо 4 для запису числа прописом / Рис.7 Виведення результату Висновок: Під час виконання даної розрахункової роботи Список літератури Програмування С/ З.Я. Шпак.-2-ге вид., доп. – Львів:Видавництво Львівської політехніки,2011. – 436 с Павловская Т.А. Щупак Ю.А. С/С++. Структурное программирование Москва: Питер, 2003. – 238 с. Шмидский Я.К. Программирование на языке С/С++ Москва: Диалектика, 2004. – 352 с. Додаток 1. Текст програмного файлу «Rozrah.cpp» #include <iostream.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> char* to_text(int x)// 0 - 999999 { char res[100]; char *ptr = res; const char *a[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve"}; if(x <= 12) { ptr += sprintf(ptr,"%s ",a[x]); return strdup(res); } if(x >= 1000) { ptr += sprintf(ptr,to_text(x/1000)); x %= 1000; ptr += sprintf(ptr,"thousand "); } if(x >= 100) { ptr += sprintf(ptr,"%s ",a[x/100]); x %= 100; ptr += sprintf(ptr,"hundred "); } if(x >= 20) { switch(x/10) { case 2 : ptr += sprintf(ptr,"twen"); break; case 3 : ptr += sprintf(ptr,"thir"); break; case 5 : ptr += sprintf(ptr,"fif"); break; case 8 : ptr += sprintf(ptr,"eigh"); break; default : ptr += sprintf(ptr,a[x/10]); break; } ptr += sprintf(ptr,"ty "); x %= 10; } if(x >= 13) { x %= 10; switch(x) { case 2 : ptr += sprintf(ptr,"twen"); break; case 3 : ptr += sprintf(ptr,"thir"); break; case 5 : ptr += sprintf(ptr,"fif"); break; case 8 : ptr += sprintf(ptr,"eigh"); break; default : ptr += sprintf(ptr,a[x]); } ptr += sprintf(ptr,"teen"); } else if(x > 0) ptr += sprintf(ptr,"%s ",a[x]); return strdup(res); } int main() { clrscr(); char str2[150]; char *str=" "; char *token,*digitstr; int v=0,digit; FILE *p,*newfile,*newfile2; newfile=fopen("testnew.txt","wr"); // perevirka najavnosti faylja if((p=fopen("test.txt","r"))==NULL) { printf("\nPomulka pru vidkrutti faylu"); getchar(); exit(1); } // menu robotu programu puts("******************** Robota iz txt faylamu ****************"); puts("======= Variantu robotu =======" ); puts("1 - stvorutu file"); puts("2 - modufikyvatu file"); scanf("%d",&v); printf("%d",v); if (v==1) { clrscr(); p=fopen("test.txt","w"); puts(" Vvedit rjadku dljazapusy y file."); puts("*Dlja zavershennja vvedit #+ENTER"); while (strcmp(str,"#")!=0) { scanf("%s",str); fprintf(p,"%s ",str); } fclose(p); } if (v==2) { clrscr(); puts(" ====== Moduficazia fayla ======="); puts(" 3 - zaokryglutu"); puts(" 4 - otrymatu chusla propusom"); scanf("%d",&v); if (v==3) { puts(" Vvedit kilkist rozrjadiv dlja zaokryglennja (max. 5)"); scanf("%d",&digit); switch(digit) { case 1: digitstr="%.1f ";break; case 2: digitstr="%.2f ";break; case 3: digitstr="%.3f ";break; case 4: digitstr="%.4f ";break; case 5: digitstr="%.5f ";break; default : digitstr="%.2f ";break; }; puts("Read from file"); while(fgets(str2,100,p)!=NULL) { printf("\nString = %s \n",str2); token = strtok(str2, " "); if (atof(token)!=0) fprintf(newfile,digitstr,atof(token)); else fprintf(newfile,"%s ",token); while((token=strtok(NULL," "))!=NULL) { if (atof(token)!=0) fprintf(newfile,digitstr,atof(token)); else fprintf(newfile,"%s ",token); } fprintf(newfile,"\n"); } puts("\n File is completed..."); fclose(p); fclose(newfile); puts("\n Vidkrytu(1-tak,0-ni)?"); scanf("%d",&v); if (v==1) { puts("Resultat"); newfile2=fopen("testnew.txt","r"); while(fgets(str2,100,newfile2)!=NULL) printf("\n %s",str2); } } } if (v==4) { puts(" ===== Propusom pushutja luwe zili schisla"); puts("\n Read from file"); while(fgets(str2,100,p)!=NULL) { printf("\nString = %s \n",str2); token = strtok(str2, " "); if (atof(token)!=0) fprintf(newfile,"%s(%s) ",token,to_text(atof(token))); else fprintf(newfile,"%s ",token); while((token=strtok(NULL," "))!=NULL) { if (atof(token)!=0) fprintf(newfile,"%s(%s) ",token,to_text(atof(token))); else fprintf(newfile,"%s ",token); } fprintf(newfile,"\n"); fclose(newfile); } puts("File is completed..."); puts("Vidkrytu(1-tak,0-ni)?"); scanf("%d",&v); if (v==1) { puts("Resultat"); newfile2=fopen("testnew.txt","r"); while(fgets(str2,100,newfile2)!=NULL) printf("\n %s\n",str2); } fclose(p); } getch(); return 0; }
Антиботан аватар за замовчуванням

24.04.2014 23:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!