Текстовий комп’ютерний годинник

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

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

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

Рік:
2008
Тип роботи:
Інші
Предмет:
Програмно-орієнтовані мови програмування
Група:
КН

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

Міністерство освіти і науки України Інститут комп’ютерних наук та інформаційних технологій по дисципліні: “Проблемно – орієнтовані мови програмування” на тему: “Текстовий комп’ютерний годинник” Завдання до курсової роботи. Текстовий комп’ютерний годинник: Програма повинна забезпечувати читання та встановлення системної дати та часу; Хід годинника та дати зобразити у вікні екрану у цифровій формі; Забезпечити встановлення розміру зображення годинника та дати; Для зображення цифр використати сиволи псевдографіки; Програма повинна бути реалізована на мові С/С++; Програма повинна працювати у вікні MSDOS під керуванням операційної системи Windows; Програма повинна мати інтерфейс та меню для вибору режимів її роботи; Керування режимами роботи програми виконати за допомогою клавіатури та миші. Зміст 1.Завдання на курсову роботу......................................……………………………2 2.Вступ..................................................................………………………………… ..4 3.Формулювання задачі.....................................……………………………………5 4.Алгоритм розв’язування задачі......................................…… .…………………..6 5.Програма та її опис...........................................………….………………………..9 6.Технологія програмування, виконання та від лагодження програми.....……10 7.Інструкція користувача................................................…………………………12 8.Контрольний приклад та аналіз результатів комп’ютерної програми.....……..13 Висновки..................................................................……………… ………….……16 Список використаної літератури .....…………………………………………17 Додатки.....................................................................…………………………….18 Вступ Завдяки науково-технічному процесу комп’ютер став використовуватись дедалі частіше, перейшовши межу від електронно обчислювальної машини до справжнього електронного пристрою, який може опрацьовувати значні обсяги інформації з великою швидкістю, високою точністю та надійністю. Комп’ютер виконує складні обчислення, допомагає розв’язати інженерні та економічні задачі. Щоб вручну відтворити його кілька секундну роботу, людині потрібні роки. За допомогою комп’ютерів нараховують зарплату, виконують банківські операції, контролюють виробничі процеси, проектують машини, навчають студентів, але сам комп’ютер не використовуючи програм не може це все зробити, тому придумали мови програмування такі як: Pascal, C, C++, C#, та інші. Це спрощує зробити поставлену задачу реальнішою, хоч ці так би мовити базові мови програмування на теперішній час неодноразово удосконалювались та змінювались, зараз все одно ще є популярними. У моїй курсовій роботі моїм завданням стало створення текстового годинника на мові С\С++. Для створення такої програми необхідно дуже добре знати мову програмування. Зокрема необхідно знати як працювати із рядками, графікою, знати як будувати цикли і вміти працювати із шрифтами. Розглянемо задачу детальніше. Для забезпечення читання та виведення системної дати та часу необхідно знати як працювати із рядками і змінними, для забезпечення встановлення розміру часу необхідно знати як працювати із функціями введення та виведення, щоб створити інтерфейс годинника необхідно вміти працювати із графікою. У першому розділі ми описуємо основні теоретичні положення, які стосуються нижче поданих завдань. У другій частині ми описуємо основний алгоритм завдань, що виконуються і все те, що не згадувалося у першій частині (зокрема звертання до підпрограм, якщо такі наявні). У третій частині ми пишемо, де саме ми можемо знайти текст програм для даних завдань (вказуємо сторінки додатку і адресу цих програм на диску). У висновку ми описуємо те, що ми винесли з виконання даної курсової. У додатках пишемо самі програми. Формулювання задачі Дана програма повинна вивести на екран текстовий комп’ютерний годинник, який повинен відображати системні час та дату. Для створення цього годинника я використовую графічний режим мови програмування. У цьому режимі екран може складатися з 640 точок у рядку і 480 у стовпці. Точки на графічному екрані називаються пікселями. 0 x y Точка має дві координати, які визначають її розташування: першу-горизонтальну(номер стовпця), другу-вертикальну(номер рядка). Відлік координат ведуть від нуля зліва направо і зверху вниз. Отже, у графічному режимі точка з координатами(0,0) розташована у верхньому лівому куті екрана, а (639,479)- у нижньому правому. У графічному режимі на екран дисплея можна виводити зображення точки, лінії, прямокутника, кола, а також текст тощо. Будь-яка фігура, нарисована на екрані, складається з великої кількості точок, що створює ілюзію суцільної лінії. Спочатку за допомогою команд графічного режиму я намалював інтерфейс годинника. Зокрема були використані такі команди: void far fillellipse(int x, int y, int xradius,int yradius ) - малює зафарбований еліпс з центром (x,y) та горизонтальною і вертикальною півосями xradius, yradius. Еліпс зафарбовується поточним кольором стилю заповнення, а контур - поточним кольором лінії. void far outtext(const char far *textstring) - Виводить рядок textstring у позицію поточного вказівника. Довгий рядок відсікається на межі встановленого вікна. Параметри шрифта встановлюються функцією settextstyle. Параметри виведення (вирівнювання, центрування, поворот на 90 градусів) встановлюється функцією settextjustify. void far outtextxy(int x, int y, const char far *textstring) - Виводить рядок textstring у позицію (x,y). Довгий рядок відсікається на межі встановленого вікна. Параметри шрифта встановлюються функцією settextstyle. Параметри виведення (вирівнювання, центрування, поворот на 90 градусів) встановлюється функцією settextjustify. void far setcolor(int color) - Встановлює колір зображення в діапазоні від 0 до 15, використовуючи задану палітру. Для забезпечення встановлення розміру зображення використав стандартні функції введення та виведення. При зчитуванні та виведенні системного часу та дати були використані структури. Для керування програмою використовувалися клавіатура і миша. Методи розв’язування задачі Моя програма реалізована на мові Сі. У цьому розділі будуть описані елементи мови програмування що були використані при написанні програми. Iдентифiкатори Iдентифiкатори використовуiться для iменування рiзних об'iктiв : змiн- них, констант, мiток, функцiй. Записи iдентифiкаторiв можуть ви- користовуватися великi та малi лiтери латинської абетки, арабськi цифри та символ пiдкреслення. Iдентифiкатор не може починатися з цифри i не може мiстити пробiлiв. Компiлятор мови Сi розглядає лiтери верхнього та нижнього регiстрiв як рiзнi символи. Tому можна створювати iдентифiкатори, якi спiвпадають орфографiчно, але вiдрiзняються регiстром лiтер. наприклад, кожний з наступ- них iдентифiкаторiв унiкальний : Sum sum sUm SUM sUM Слiд також пам'ятати, що iдентифiкатори не повиннi спiвпадати з ключо- вими словами. Константи Константами називають сталi величини, тобто такi, якi в процесi вико- нання програми не змiнюються. В мовi Сi iснують чотири типи констант : цiлi, дiйснi, рядковi та символьнi. 1. Цiлi константи можуть бути десятковими, вiсiмковими або шiстнадцят- ковими. Десяткова константа - послiдовнiсть десяткових цифр (вiд 0 до 9), яка починається не з нуля якщо це число не нуль. Приклади десяткових констант : 10, 132, 1024. Вiсiмковi константи починаються з символу 0, пiсля якого розмiщується вiсiм- ковi цифри (вiд 0 до 7). наприклад : 023. Запис константи вигляду 08 буде сприйматися компiлятором як помилка, так як 8 не є вiсiмковоi цифроi.Шiстнад- цятковi константи починаються з символiв 0х або 0-, пiсля яких розмiщується шiстнадцятковi цифри (вiд 0 до F, можна записувати їх у верхньому чи нижньому регiстрах). Наприклад : 0-F123. 2. Дiйснi константи складаiться з цiлої частини, десяткової крапки,дро- бової частини, символу експоненти (e чи E) та показника степеня. Дiйснi кон- станти мають наступний формат представлення : [ цiла_частина ][ . дробова_частина ][ + [-] степiнь ] У записi константи можуть бути опущенi цiла чи дробова частини (але не обидвi разом), десяткова крапка з дробовою частиною чи символ E (e) з показником степеня (але не разом). Приклади дiйсних констант : 2.2 , 220е-2, 22.+-1, .22+1. Якщо потрiбно сформувати вiд'ємну цiлу або дiйсну константу, то перед кон- стантою необхiдно поставити знак унарного мiнуса. 3. Символьнi константи. Символьна константа - це один або декiлька си- мволiв, якi заключенi в апострофи. якщо константа складаiться з одного симво- лу, вона займає в пам'ятi 1 байт (тип char). Двосимвольнi константи займаiть в пам'ятi вiдповiдно 2 байти (тип int). Послiдовностi символiв, якi починаiться з символу \ (обернений слеш) називаються керуючими або escape-послiдовностями. 4. Рядковi константи записуються як послiдовностi символiв, заключених в подвiйнi лапки. "Це рядковий лiтерал!\n" Для формування рядкових констант, якi займають декiлька рядкiв тексту програми використовується символ \ (обернений слеш): "Довгi рядки можна розбивати на \ частини" Загальна форма визначення iменованої константи має вигляд : const тип iм'я = значення ; Модифiкатор const попереджує будь-якi присвоювання даному об'єкту, а також iншi дiї, що можуть вплинути на змiну значення. Наприклад: const float pi = 3.14l5926; const maxint = 32767; char *const str="Hello,P...!"; /* покажчик-константа */ char const *str2= "Hello!"; /* покажчик на константу */ Використання одного лише модифiкатору const еквiвалентно const int. Коментарi Текст на Сi, що мiститься у дужках /* та */ iгноруватиметься компi- лятором, тобто вважатиметься коментарем до програми. Такi коментарi можуть розмiщуватися в будь-якому мiсцi програми. Коментарi здебiльшого використовуються для "документування програм" та пiд час їх вiдлагодження. В програму бажано вмiщувати текст, що хоч якось пояснює її роботу та призначення. Проте не слiд надто зловживати коментарями, а використовувати бiльш розумнi форми найменування змiнних, констант, функцiй тощо. Якщо, наприклад, функцiя матиме назву add_matrix, очевидно не зовсiм рацiональним буде включення у програму пiсля її заголовної частини коментар про те, що: /*функцiя обчислює cуму матриць */ У цьому випадку iм'я функцiї пояснює її призначення. У бiльш сучасних версiях Сi широко застосовується так званий угорський запис iмен, коли iм'я змiнної мiстить в собi iнформацiю про її призначенн i тип. Ключовi слова Ключовi слова - це зарезервованi iдентифiкатори, як i мають спе- цiальне значення для компiлятора. Їх використання суворо регламентоване. Iмена змiнних, констант, мiток, типiв тощо не можуть спiвпадати з ключовими словами. Наводимо перелiк ключових слiв мови Сi : auto continue float interrupt short unsigned asm default for long signed void break do far near sizeof volatile case double goto pascal static while cdecl else huge switch struct char enum if register typedef const extern int return union СТРУКТУРА ПРОГРАМИ Усi програми, написанi на мовi Сi, повиннi мiстити в собi хоча б одну функцiю. Функцiя main() - вхiдна точка будь-якої програмної системи, причому немає рiзницi, де її розмiщувати. Але потрiбно пам'ятати наступне: якщо вона буде вiдсутня, завантажувач не зможе зiбрати програму, про що буде виведене вiдповiдне попередження. Перший оператор програми повинен розмiщуватися саме в цiй функцiї. Мiнiмальна програма на мовi Сi має вигляд: main() { return 0; } Функцiя починається з iменi. В даному прикладi вона не має параметрiв, тому за її iм'ям розташовуються порожнi круглi дужки (). Далi обидвi фiгурнi дужки {...} позначають блок або складений оператор, з яким ми працюватимемо, як з єдиним цiлим. У Паскалi аналогiчний змiст мають операторнi дужки begin ... end. Мiнiмальна програма має лише один оператор - оператор повернення зна- чення return. Вiн завершує виконання програми та повертає в нашому випадку деяке цiле значення (ненульове значення свiдчить про помилки в програмi, ну- льове про успiшне її завершення). Виконання навiть цiєї найпростiшої програ- ми, як i решти багатьох, проходить у декiлька етапiв. Етапи виконання програми на мовi Сi: код запуску ─> функцiя main() ─> код завершення. Базовi типи даних Будь-яка програма передбачає виконання певних операцiй з даними. Вiд їх типу залежить, яким чином будуть проводитися цi операцiї, зрештою, будем виз- начено, як реалiзовуватиметься алгоритм. Що таке тип даних? Сформулювати це поняття можна мтак : множина значень плюс перелiк дiй або операцiй, якi можна виконати мнад мкожною змiнною даного типу. Вважається, що змiнна або вираз належить до конкретного типу, якщо його значення лежить в областi допустимих значень цього типу. Арифметичнi типи даних об'єднують цiлi та дiйснi, цiлi у свою чергу - декiль- ка рiзновидiв цiлих та символьних типiв даних. Скалярнi типи включають в себе арифметичнi типи, покажчики та перелiчуванi типи. Агрегатнi або структурованi типи мiстять в собi масиви, структури та файли. Нарештi функцiї представляють дещо особливий клас, який слiд розглядати окремо. Базовi типи даних Сi можна перерахувати у наступнiй послiдовностi: 1. char - символ Тип може використовуватися для зберiгання лiтери, цифри або iншого символу з множини символiв ASCII. Значенням об'єкта типу char є код символу. Тип char iнтерпретується як однобайтове цiле з областю значень вiд -128 до 127. 2. int - цiле Цiлi числа у дiапазонi вiд -32768 до 32767. В операцiйних середовищах Windows та Windows NT використовуються 32-розряднi цiлi, що дозволяє розши- рити дiапазон їх значень вiд -2147483648 до 2147483647. Як рiзновиди цiлих чисел, у деяких версiях компiляторiв iснують short - коротке цiле (слово) та long (4 байти) - довге цiле. Хоча синтаксис мови не залежить вiд ОС, розмiр- нiсть цих типiв може коливатися вiд конкретної реалiзацiї. Гарантовано лише, що спiввiдношення розмiрностi є наступним: short <= int <=long. 3. float - число з плаваючою комою одинарної точностi. Тип призначений для зберiгання дiйсних чисел. Може представляти числа як у фiксованому форматi (наприклад число пi - 3.14159), так i в експонен- цiальнiй формi - 3.4Е+8. 4. double - число з плаваючою комою подвiйної точностi Має значно бiльший дiапазон значень, порiвняно з типом float: +(1.7 10- 308 ... 1.7 10308). У мовi Сi, на вiдмiну вiд Паскаля, використовується префiксний запис оголошення. При цьому на початку вказується тип змiнної, а потiм її iм'я. Змiннi повиннi бути описаними до того моменту, як вони будуть використову- ватися у програмi. Нiяких додаткових ключових слiв при цьому не пишуть. Наприклад: int name; float var, var1; double temp; char ch; long height; Змiннi можна iнiцiалiзувати (присвоювати їм початковi значення) безпо- середньо у мiсцi їх опису: int height = 33 ; float income = 2834.12 ; char val = 12 ; Для виведення iнформацiї на екран використаємо функцiю printf()(деталь- но про операцiї введення-виведення значень змiнних йтиметься у роздiлi 1.3.4. "Функцiї введення та виведення"): printf("Вiк Олега-%d.Його прибуток %.2f",age,income); Крiм того, цiлi типи char, short, int, long можуть використовуватися з модифiкаторами signed (iз знаком) та unsigned (без знаку). Цiлi без знаку (unsigned) не можуть набувати вiд'ємних значень, на вiдмiну вiд знакових цiлих (signed). За рахунок цього дещо розширюється дiапазон можливих додатних значень типу. Функцiї введення та виведення Що б там не було, але реальнi програми важко уявити без використання операцiй введення та виведення. В мовi Сi на стандартнi потоки введення-виведення (в бiльшостi випадкiв - клавiатура та монiтор) завжди вказують iмена stdin та stdout. Обробку цих потокiв здiйснюють функцiї, визначенi в заголовочному файлi stdio.h. Розглянемо основнi функцiї введення-виведення. Функцiя getchar() зчитує i повертає черговий символ з послiдовностi символiв вхiдного потоку. Якщо цю послiдовнiсть вичерпано, то функцiя getchar() повертає значення -1 (цьому значенню вiдповiдає константа EOF). Функцiя putchar(аргумент), де аргументом є вираз цiлого типу, виводить у стандартний вихiдний потiк значення аргументу, перетворене до типу char. Приклад : #include<stdio.h> void main() { char ch; ch=getchar(); putchar(ch); } Для введення та виведення бiльш складної iнформацiї використовуються функцiї scanf() та printf(). Функцiя printf() призначена для виведення iнформацiї за заданим форматом. Синтаксис функцiї printf(): printf("Рядок формату"[, аргумент1[, аргумент2, [...]]]); Першим параметром даної функцiї є "рядок формату", який задає форму ви- ведення iнформацiї. Далi можуть розташовуватися вирази арифметичних типiв або рядки (в списку аргументiв вони вiдокремлюються комами). Функцiя printf() перетворює значення аргументiв до вигляду, поданого у рядку формату, "збирає" перетворенi значення в цей рядок i виводить одержану послiдовнiсть символiв у стандартний потiк виведення. Рядок формату складається з об'єктiв двох типiв: звичайних символiв, якi з рядка копiюються в потiк виведення, та специфiкацiй перетворення. Кiлькiсть специфiкацiй у рядку формату повинна дорiвнювати кiлькостi аргу- ментiв. Приклад : #include<stdio.h> void main() { int a=10,b=20,c=30; printf(" a==%d \n b==%d \n c==%d \n",a,b,c); } Специфiкацiї перетворення для функцiї printf(): %d - десяткове цiле; %i - десяткове цiле; %o - вiсiмкове цiле без знаку; %u - десяткове цiле без знаку (unsigned) %x - шiстнадцяткове цiле без знаку; %f - представлення величин float та double з фiксованою точкою; %e або %Е - експоненцiальний формат представлення дiйсних величин; %g - представлення дiйсних величин як f або Е в залежностi вiд значень; %c - один символ (char); %s - рядок символiв; %p - покажчик %n - покажчик %ld - long (в десятковому виглядi); %lo - long (у вiсiмковому виглядi); %p - виведення покажчика в шiстнадцятковiй формi; %lu - unsigned long. Можна дещо розширити основне визначення специфiкацiї перетворення, помiстивши модифiкатори мiж знаком % i символами, якi визначають тип перетворення. Директиви включення У багатьох програмах ми зустрiчаємо використання так званих директив включення файлiв. Синтаксис використання їх у програмi наступний : #include <file_1> #include <file_2> ... #include <file_n> По-перше, слiд звернути увагу на те, що на вiдмiну вiд бiльшостi операторiв, ця директива не завершується крапкою з комою. Використання таких директив призводить до того, що препроцесор пiдставляє на мiсце цих директив тексти файлiв у вiдповiдностi з тими, що перелiченi у дужках < ... > . Якщо iм'я файла мiститься у таких дужках, то пошук файлу буде проводитися у спецiальному каталозi файлiв для включення (як, правило, каталог INCLUDE, усi файли з розширенням *.h - header-файли). Якщо даний файл у цьому каталозi буде вiдсутнiм, то препроцесор видасть вiдповiдне повiдомлення про помилку, яка є досить типовою для початкiвцiв при роботi в iнтегрованому середовищi: < Unable to open include file 'file.h'> <Неможливо вiдкрити файл включення ' file.h'> У цьому випадку достатньо перевiрити не тiльки наявнiсть header-файлу у вiдповiднiй директорiї, але й впевнитися у тому, що опцiя Options\Directories дiйсно вiдповiдає правильному диску та спецiальному каталогу, де розташованi файли включення. Iснує i другий спосiб - вказiвка iменi файла у подвiйних лапках - file_n.txt, так найчастiше пiдключають програмiсти власностворенi файли включення. Тодi пошук файлу ведеться у поточнiй директорiї активного диску, якщо ж пошук буде невдалим, система закiнчує його у спецiальному каталозi для header -файлiв, як i у загальному випадку. Найбiльш частим у початкiвцiв є включення файлу "stdio.h": #include <stdio.h> main() { printf("Hello ! ...\n"); return 0; } Слiд зауважити, що файли включення iнодi можуть вмiщувати в собi команднi рядки включення iнших файлiв, причому без нiяких обмежень у глибину вкладеностi. Цей прийом широко застосовується при розробцi великих програмних проектiв. Оператори Тепер перейдемо до запису алгоритмiв програм безпосередньо мовою програмування Сi. Оператори - це основнi елементи, з яких "будуються" програми на будь-якiй мовi програмування. Бiльшiсть операторiв складаються з виразiв. Виходячи з цього, спочатку розглянемо вирази. Вираз представляє собою об'єднання операцiй i операндiв. Найпростiший вираз складається з одного операнду. Приклади виразiв : 5 -7 10+21 a*(b+d*1)-1 x=++a%3 a>3 Неважко помiтити, що операнди можуть бути константами, змiнними, їх об'єднаннями. Деякi вирази складаються з менших виразiв. Дуже важливою особливiстю мови Сi є те, що кожний вираз має значення. Наведемо приклади кiлькох виразiв i їх значень : -5+7 2 1<2 1 6+(a=1+2) 9 a=1+2 3 Як вже було сказано, основу будь-якої програми складають оператори. Оператором-виразом називається вираз, вслiд за яким стоїть крапка з комою. Взагалi усi оператори можна згрупувати у наступнi класи: оператори присвоювання; виклики функцiй; розгалуження; цикли. Проте, оператори найчастiше вiдносяться до бiльш нiж одного з чотирьох класiв. Наприклад, оператор if (a=fn(b+c)>d) складається з представникiв наступних класiв : присвоювання, виклик функцiї та розгалуження. У тому i є гнучкiсть Сi, що є можливiсть змiшування в одному операторi операторiв рiзних класiв. Проте навряд чи слiд цим зловживати - програма може вийти правильною, проте надто заплутаною та нечитабельною. Оператор розгалуження if Оператор розгалуження призначений для виконання тих або iнших дiй в залежностi вiд iстинностi або хибностi деякої умови. Основний оператор цього блоку в Сi - if ... else не має ключового слова then, як у Паскалi, проте обов'язково вимагає, щоб умова, що перевiряється, розмiщувалася б у круглих дужках. Оператор, що слiдує за логiчним виразом, є then - частиною оператору if...else. Синтаксис оператора : if (<умова>) <оператор1>; [else <оператор2;>] Умова хибна, якщо вона дорiвнює нулю, в iнших випадках вона iстинна. Це означає, що навiть вiд'ємнi значення розглядаються як iстиннi. До того ж, умова, що перевiряється, повинна бути скалярною, тобто зводитися до простого значення, яке можливо перевiрити на рiвнiсть нулю. Взагалi не рекомендується використання змiнних типу float або double в логiчних виразах перевiрки умов з причини недостатньої точностi подiбних в иразiв. Бiльш досвiдченi програ- мiсти скорочують оператори типу: if (вираз!=0) оператор; до наступного: if (вираз) оператор; Обидва логiчнi вирази функцiонально еквiвалентнi, тому що будь-яке ненульове значення розцiнюється як iстина. Це можна довести наступними прог- рамами: Приклад. /* програма виводить результат дiлення двох дiйсних чисел */ #include<stdio.h> #include<conio.h> void main() { float a,b,c; printf("Введiть число a :\n"); scanf("%f",&a); printf("Введiть число b :\n"); scanf("%f",&b); if (b==0) printf("Дiлення да нуль !\n"); else { c=a/b; printf("a : b == %g",c); }; } Оператор циклу for Оператор for забезпечує циклiчне повторення деякого оператора певне число разiв. Оператор, який повторюється називається тiлом циклу. Повторення циклу звичайно здiйснюється з використанням деякої змiнної (лiчильника), яка змiнюється при кожному виконаннi тiла циклу. Повторення завершується, коли лiчильник досягає заданого значення. Синтаксис оператора: for([iнiцiалiзацiя];[перевiрка_умови];[нове_значення]) оператор ; Звернемо увагу на те, що кожен з трьох виразiв може бути вiдсутнiм. Перший вираз служить для iнiцiалiзацiї лiчильника, другий - для перевiрки кiнця циклу, а третiй вираз - для змiни значення лiчильника. Формально роботу циклу можна описати такими кроками: 1. якщо перший вираз (iнiцiалiзацiя) присутнiй, то вiн обчислюється; 2. обчислюється вираз умови (якщо вiн присутнiй). Якщо умова виробляє значен- ня 0, тобто вона невiрна, цикл припиняється, у протилежному випадку вiн буде продовжений; 3. виконується тiло циклу; 4. якщо присутнiй вираз змiни лiчильника, то вiн обчислюється; 5. надалi перехiд до пункту пiд номером 2. Поява у будь-якому мiсцi циклу оператора continue призведе до негайного пере- ходу до пункту 4. Приклад використання циклу for : /* друк парних чисел у промiжку вiд 500 до 0 */ #include <stdio.h> void main(void) { long i; for(i=500;i>=0;i-=2) printf("\n%ld",i); printf("\n"); } Основнi вiдомостi про представлення рядкiв Символьний рядок представляє собою набiр з одного або бiльше символiв. Приклад : "Це рядок" В мовi Сi немає спецiального типу даних, який можна було б викорис- товувати для опису рядкiв. Замiсть цього рядки представляються у виглядi масиву елементiв типу char. Це означає, що символи рядка розташовуються в пам'ятi в сусiднiх комiрках, по одному символу в комiрцi. Необхiдно вiдмiтити, що останнiм елементом масиву є символ '\0'. Це нульовий символ (байт, кожний бiт якого рiвний нулю). У мовi Сi вiн вико- ристовується для того, щоб визначати кiнець рядка. Примiтка. Нульовий символ - це не цифра 0; вiн не виводиться на друк i в таблицi символiв ASCII (див. додаток) має номер 0. Наявнiсть нульового символу передбачає, що кiлькiсть комiрок масиву повинна бути принаймнi на одну бiльше, нiж число символiв, якi необхiдно розмiщувати в пам'ятi. Наприклад, оголошення char str[10]; передбачає, що рядок мiстить може мiстити максимум 9 символiв. Основнi методи iнiцiалiзацiї символьних рядкiв. char str1[]= "ABCdef"; char str2[]={'A', 'B', 'C', 'd', 'e', 'f',0}; char str3[100]; gets(str3); char str4[100]; scanf("%s",str4); Усi константи-рядки в текстi програми, навiть iдентично записанi, роз- мiщуються за рiзними адресами в статичнiй пам'ятi. З кожним рядком пов'язу- ється сталий покажчик на його перший символ. Власне, рядок-константа є вира- зом типу "покажчик на char" зi сталим значенням - адресою першого символу. Так, присвоювання p="ABC" (p - покажчик на char) встановлює вказiвник p на символ 'A'; значенням виразу *("ABC"+1) є символ 'B'. Елементи рядкiв доступнi через вказiвники на них, тому будь-який вираз типу "вказiвник на char" можна вважати рядком. Необхiдно мати також на увазi те, що рядок вигляду "х" - не те ж саме, що символ 'x'. Перша вiдмiннiсть : 'x' - об'єкт одного з основних типiв даних мови Сi (char), в той час, як "х" - об'єкт похiдного типу (масиву елементiв типу char). Друга рiзниця : "х" насправдi складається з двох символiв - си- мволу 'x' i нуль-символу. Функцiї введення рядкiв. Прочитати рядок iз стандартного потоку введення можна за допомогою ункцiї gets(). Вона отримує рядок iз стандартного потоку введення. Функцiя читає символи до тих пiр, поки їй не зустрiнеться символ нового рядка '\n', який генерується натисканням клавiшi ENTER. Функцiя зчитує всi символи до символу нового рядка, додаючи до них нульовий символ '\0'. Синтаксис : char *gets(char *buffer); Як вiдомо, для читання рядкiв iз стандартного потоку введення можна використовувати також функцiю scanf() з форматом %s. Основна вiдмiннiсть мiж scanf() i gets() полягає у способi визначеннi досягнення кiнця рядка; функцiя scanf() призначена скорiше для читання слова, а не рядка. Функцiя scanf() має два варiанти використання. Для кожного з них рядок починається з першого не порожнього символу. Якщо використовувати %s, то рядок продовжується до (але не включаючи) наступного порожнього символу (пробiл, табуляцiя або новий рядок). Якщо визначити розмiр поля як %10s, то функцiя scanf() не прочитає бiльше 10 символiв або ж прочитає послiдовнiсть символiв до будь-якого пер- шого порожнього символу. Функцiї виведення рядкiв. Тепер розглянемо функцiї виведення рядкiв. Для виведення рядкiв можна використовувати функцiї puts() i printf(). Синтаксис функцiї puts(): int puts(char *string); Ця функцiя виводить всi символи рядка string у стандартний потiк виве- дення. Виведення завершується переходом на наступний рядок. Рiзниця мiж функцiями puts() i printf() полягає в тому, що функцiя printf() не виводить автоматично кожний рядок з нового рядка. Стандартна бiблiотека мови програмування Сi мiстить клас функцiй для роботи з рядками, i всi вони починаються з лiтер str. Для того, щоб викорис- товувати одну або декiлька функцiї необхiдно пiдключити файл string.h. #include<string.h> Конкатенацiя рядкiв. Конкатенацiя двох рядкiв означає їх об'єднання, при цьому створюється новий, бiльш довгий рядок. Наприклад, при оголошеннi рядка char first[]= "Один "; оператор strcat(first, "два три чотири!"); перетворить рядок first в рядок "Один два три чотири". При викликаннi функцiї strcat(s1,s2) потрiбно впевнитися, що перший аргумент типу char * iнiцiалiзований i має достатньо мiсця щоб зберегти результат. Якщо s1 адресує рядок, який вже записаний, а s2 адресує нульовий рядок, то оператор strcat(s1,s2); перезапише рядок s1, викликавши при цьому серйозну помилку. Функцiя strcat() повертає адресу рядка результату (що спiвпадає з її першим параметром), що дає можливiсть використати "каскад" декiлькох викликiв функцiй : strcat(strcat(s1,s2),s3); Цей оператор додає рядок, що адресує s2, i рядок, що адресує s3, до кiнця рядка, що адресує s1, що еквiвалентно двом операторам: strcat(s1,s2); strcat(s1,s3); Оголошення структури Структури дозволяють об'єднувати в єдиному об'єктi сукупнiсть значень, якi можуть мати рiзнi типи. Оголошення структури здiйснюється за допомогою ключового слова struct. Синтаксис опису структури виглядає так : struct [iм'я_структури] { тип1 елемент1; тип2 елемент2; ........................ типN елементN; } [список описiв]; З метою ознайомлення з цим типом даних розглянемо найпростiший приклад представлення поняття "дата", що складається з декiлькох частин: число (день, мiсяць, рiк), назва тижня та мiсяця: struct date { int day ; int month ; int year; char day_name[15]; char mon_name[14]; } arr[100],*pd,data,new_data; В даному прикладi оголошуються: data, new_data - змiннi типу структури date; pd - вказiвник на тип data arr - масив iз 100 елементiв, кожний елемент якого має тип date. Потрiбно вiдзначити, що на вiдмiну вiд описiв iнших типiв даних, опис струк- тури не видiляє мiсця у пам'ятi пiд елементи структури. Її опис визначає
Антиботан аватар за замовчуванням

30.11.2012 00:11-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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