Порозрядні логічні операції та операції зсуву

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

1. Основна частина

1. 1 Середовище програмування Visual Studio 2010

1.1. 1 Загальні відомості

Visual Studio 2010 — це набір інструментів розробки, заснованих на використанні компонентів, і інших технологій для створення потужних, продуктивних додатків. Крім того, середа Visual Studio 2010 оптимізована для спільного проектування, розробки та розгортання корпоративних рішень.

Visual C++ 2010 надає потужне і гнучке середовище розробки, що дозволяє створювати застосування для Microsoft Windows і застосування, засновані на Microsoft. NET. Це середовище можна використовувати як інтегроване середовище розробки, так і в якості окремих засобів. Visual C++ складається з наступних компонентів:

· Засоби компілятора Visual C++ 2010. Компілятор підтримує як традиційну розробку з використанням машинного коду, так і розробку з використанням платформ віртуальних машин, таких як середовище CLR. Visual C++ 2010 містить компілятори для цільового об'єкту x64 і Itanium. Компілятор продовжує безпосередньо підтримувати архітектуру x86 і оптимізує продуктивність коду для обох платформ.

· Бібліотеки Visual C++. Містять загальновизнану бібліотеку шаблонних класів (ATL), бібліотеки Microsoft Foundation Class (MFC) і стандартні бібліотеки, такі як стандартна бібліотека C++, яка складається з бібліотеки iostreams, бібліотеки стандартних шаблонів (STL) і бібліотеки часу виконання мови C (CRT). Бібліотека CRT включає альтернативні функції з поліпшеною безпекою для функцій з відомими проблемами безпеки. Бібліотека STL/CLR дозволяє розробникам, що використовують керований код, використовувати також і можливості бібліотеки STL. Бібліотека підтримки C++ надає нові можливості для маршалінгу даних і спрощує написання програм, що використовують середовище CLR.

· Середовище розробки Visual C++. Середовище розробки надає усебічну підтримку при управлінні проектами і їх налаштуванні (включаючи поліпшену підтримку великих проектів), редагуванні початкового коду, перегляді початкового коду, а також потужні засоби відладки. Середовище розробки також підтримує технологію IntelliSense, яка надає при написанні коду детальні підказки, що враховують контекст.

Окрім традиційних застосувань з призначеним для користувача інтерфейсом Visual C++ дозволяє розробляти веб-застосування, застосування інтелектуальних клієнтів для Windows, рішення для мобільних пристроїв, що використовують тонкі клієнти і інтелектуальні клієнти. Мова C++, що є найпопулярнішою у світі мовою рівня системи, і Visual C++ разом надають розробникові висококласний засіб світового рівня для побудови програмного забезпечення.

1.1. 2 Проект та його елементи

Властивості проекту визначають спосіб компіляції та відлагодження проекту, бібліотеки, спосіб і місце публікації проекту, а також будь-які інші параметри безпеки. Конструктор проектів призначений для завдання властивостей проекту. Для отримання доступу до властивостей окремого файлу, використовується вікно «Свойства».

За допомогою Конструктора проектів можна централізовано керувати властивостями проекту, настройками і ресурсами. Конструктор проектів відображається в середовищі Visual Studio в окремому вікні, так само як інші конструктори, такі як конструктор форм або класів. Він містить кілька сторінок, доступних через вкладки ліворуч. Відомості, введені в Конструктор проектів, зберігаються при переході від однієї сторінки на іншу, при побудові проекту, або при закритті конструктора. Команда «Отменить», доступна в меню «Правка», дозволяє виконати відкат змін.

Доступ до конструктора проектів і завдання властивостей проекту

1. Виберіть проект в оглядачі рішень. Відкрити Конструктор проектів для неіснуючого проекту неможливо.

2. У меню Проект виберіть пункт Свойства: имя_проэкта.

3. Виберіть сторінку властивостей для зміни або перегляду, клацнувши її вкладку, або використовуйте поєднання клавіш CTRL+PAGE DOWN і CTRL+PAGE UP для переміщення між сторінками.

4. Завдання властивостей.

У конструкторі проектів відсутні кнопки ОК або Відміна. Усі зміни властивостей для активного проекту набувають чинності негайно. Проте параметри набувають чинності у файлі проекту тільки при виборі одного з варіантів збереження або при закритті конструктора. Якщо елемент управління недоступний, він непридатний до типу активного проекту, або не може використовуватися в поточній конфігурації проекту. Для рішень з декількох проектів можна використовувати декілька екземплярів конструктора проектів одночасно. Сторінки і параметри, доступні в Конструкторі проектів, розрізняються за типом проекту і мовою. Доступні сторінки, перераховані в наступній таблиці.

Таблиця 1.1 — «Сторінки у конструкторі проектів»

Сторінка

Опис

Застосування

Містить параметри, які описують застосування і його поведінку, такі як тип застосування, об'єкт, що автоматично запускається, і відомості про зборку.

Побудова

Містить інструкції побудови, включаючи конфігурацію побудови, умовні символи, рівні попереджень і зведення про вивід. Застосовується тільки до проектів Visual C#.

Події побудови

Містить інструкції командного рядка, які виконує компілятор до побудови і після побудови. На цій сторінці також можна вказати умови, при яких виконуватимуться які-небудь події після побудови. Застосовується тільки до проектів Visual C#.

Компіляція

Містить параметри, які управляють процесом компіляції застосування. Застосовується тільки до проектів Visual Basic. Додаткові відомості см в наступних розділах.

Відладка

Містить параметри, які управляють процесом відладки застосування.

Посилання

Містить список компонентів, на які посилається проект. Сюди входять зборки, компоненти COM, посилання на проекти і веб-посилання.

Шляхи для посилань

У цьому вікні міститься список каталогів для пошуку складок при завантаженні, на які посилається проект. Цей параметр залежить від проекту, комп’ютера і користувача.

Ресурси

Дозволяє управляти ресурсами застосування. Включає рядки, малюнки, значки і інші ресурси.

Служби

Дозволяє включити і настроїти служби клієнтського застосування. Ці служби дозволяють Windows — приложениям діставати доступ до служб застосувань Microsoft Ajax.

Параметри

Дозволяє управляти параметрами застосування, такими як динамічні властивості і параметри користувача.

Підпис

Містить параметри, що відносяться до підписки зборки, такі як ім'я файлу ключа або зведення про постачальника ключа.

Безпека

Містить параметри для рівнів безпеки; застосовується тільки до застосувань, розгорнутих за допомогою публікації ClickOnce.

Публікація

Містить параметри для розгортання застосування за допомогою технології ClickOnce.

Аналіз коду

Містить засіб аналізу коду, який можна виконати для коду застосування. Засіб повідомляє відомості про складки, наприклад порушення правил програмування і проектування застосувань Microsoft. NET Framework.

Створювати проекти Visual C++ можна декількома способами:

· Використовувати шаблони проектів, такі як Шаблон консольного застосування CLR (C++), що допомагають швидко створювати прості проекти.

· Можна також використовувати майстри застосувань, що допомагають в створенні рішень. Рішення може містити безліч проектів і може бути написане на будь-якій мові, що входить до складу Visual Studio. Середовище розробки Visual Studio може обробляти залежності між проектами, конфігурації окремих проектів, розгортання проектів, і управління початковим кодом. Цей метод добре працює для великомасштабних застосувань.

· Можна створити простий текстовий файл і зберегти його з розширенням CPP. Використовуючи майстер застосувань Win32, створіть порожній проект. Додайте знову створений CPP — файл в середу розробки Visual Studio. Цей метод добре працює у разі дуже простого консольного застосування. Конкретними параметрами створеного проекту можна управляти за допомогою майстрів коду і сторінок властивостей.

Елементи проекту

У Visual Studio рішення є найвищим рівнем організації, після якого слідує проект. Рішення може містити один або декілька проектів. Проект, у свою чергу, містить елементи. Те, які з безлічі існуючих типів елементів доступні в конкретному проекті, залежить від його типу. Елементи, окрім іншого, включають файли, класи, набори даних, форми і звіти (рис. 1. 1).

Рис. 1.1 — Елементи проекту

Рішення містять проекти і елементи, що входять в них. Рішення можуть також включати елементи, що не належать жодному проекту, т. е. незалежні елементи. У Visual Studio існує два типи незалежних елементів: елементи рішення і інші файли. Елементи рішення пов’язані з рішенням і управляються через теку «Елементи рішення» в оглядачі рішень. При необхідності роботи з файлами поза контекстом рішення або проекту створюються інші файли, управління якими відбувається через теку «Інші файли». Додаткові відомості про інші файли містяться в розділі Інші файли.

Елементи рішень є внутрішніми елементами. Проекти можуть утримувати посилання на них, але вони ніколи не включаються в побудови рішень або проектів. У цьому розділі описується процес додавання і виключення елементів в теці «Елементи рішення». Вилучення прибирає зв’язок елементу з рішенням. При цьому файл, що надає цей елемент, залишається на диску.

Рис. 1.2 — Незалежні елементи

1.1. 3 Параметри компілятора С++

cl. exe — це інструмент управління компіляторами і компонувальником Microsoft C і C++. cl. exe може виконуватися тільки в операційних системах, підтримувальних Microsoft Visual Studio.

Примітка: Цей засіб можна запустити тільки з командного рядка Visual Studio. Його не можна запустити з системного командного рядка або з провідника Windows.

Компілятори створюють об'єктні OBJ — файлы у форматі COFF. Компонувальник створює виконувані файли (EXE) або бібліотеки динамічного компонування (DLL). Слід зазначити, що усі параметри компілятора чутливі до регістра символів. Для компіляції без компонування слід використовувати параметр /c.

Параметри, задані в змінній середовища компілятора CL, використовуються при кожному виклику компілятора. Якщо командному файлу присвоєно ім'я в змінній середовища компілятора CL або в командному рядку, використовуються параметри, задані в командному файлі. На відміну від командного рядка або змінного середовища компілятора CL, командний файл дозволяє використовувати декілька рядків для параметрів або імен файлів.

Параметри компілятора обробляються «зліва направо», і при виявленні конфлікту пріоритет має останній (крайній справа) параметр. Змінна середовища компілятора CL обробляється до виконання обробки командного рядка, тому у разі виникнення конфліктів між компілятором CL і командним рядком пріоритет має командний рядок.

Графічне середовище Windows сприяло тому, що розроблювачі створили компілятори з більш дружнім інтерфейсом, що дозволяють використовувати файли проектів, що генерують всіма стадіями побудови програми. Фірми Borland та Microsoft випустили компілятори С++, цілком інтегровані в середовище графічного інтерфейсу Windows. Компілятори С/С++ дозволяють, знаходячись в цьому середовищі, написати, побудувати (скомпілювати і скомпонувати), налагодити та виконати програму.

Ключем до успіху при роботі в інтегрованому середовищі є правильна розробка і створення файлу проекту. Компілятор Microsoft Visual C ++ використовує файли проекту з розширенням. dsp, а компілятор Borland С++ - із розширенням. ide. Наладчик доступний з меню Build (створення). Вбудований наладчик дозволить виконувати програму в покроковому режимі, зчитувати і змінювати вміст перемінних.

Перед запуском вбудованого наладчика необхідно повідомити компілятору про необхідність включити в виконуючий код додаткову інформацію, необхідну для наладчика. Це можна зробити за допомогою комбінованого поля панелі інструментів Стандартна (Debug Mode — наладочний варіант генерації коду, Relese Mode — варіант без включення інформації для наладчика).

Якщо програма містить синтаксичні помилки, при виконанні команд Build чи Rebuild автоматично відкривається вікно повідомлень, які видаються компілятором. Кожне повідомлення починається з імені вихідного файлу. Це ім'я — істотне, оскільки в звичайному режимі Windows — додатку міститься багато вихідних файлів.

Відразу за ім'ям вихідного файлу випливає номер рядка, де виявлена помилка або попередження. Слідом за номером рядка йде двокрапка, потім слово error (помилка) або warning (попередження) і відповідний номер помилки.

Програму з одним попередженням можна запустити, але при наявності повідомлень, що немає помилок. У кожному рядку повідомлень міститься короткий опис виявленої синтаксичної помилки.

Попередження можуть свідчити про автоматичне виконання правил перетворення С/С++.

Багато попереджень можна уникнути обійшовши діючі за замовчуванням автоматичні перетворення мови. Це можна зробити вказуючи в програмі явне перетворення типів.

Після перегляду списку повідомлень про помилки і попереджень потрібно повернутися у вікно редагування для виконання необхідних змін у програмі.

Вибрати вікно редагування можна або клацнувши мишею всередині цього вікна, або перейшовши в меню Windows і клацнувши на імені необхідного файлу. Найбільш простий і доступний шлях — двічі клацнути лівою кнопкою миші на тому повідомленні про помилку компілятора, яку необхідно правити. При цьому середовище саме знайде помилковий рядок вихідної програми. Натискання на клавішу < Enter> на виділеному повідомленні про помилку, попередженні приведе до аналогічного результату. При використанні будь-якого способу вікно редагування стає самим верхнім.

Команда Debug (налагодження) з Build (створення) запускає інтегрований наладчик. Можливі три варіанти запуску наладчика Go (перейти), Step Into (крок всередину), Run to Cursor (виконати до курсору). При використанні цих команд вікно редагування виглядає інакше, ніж звичайно. При налагодженні програми в режимі Step Into наладчик висвічую рядок програми, що буде виконуватися наступної. Стрілка покрокового виконання розташовується поруч з функцією яка буде викликана поруч з оператором, що буде виконаний наступним.

Як тільки починається налагодження програми, основне меню Build змінюється на меню Debug, що представляє більш широкі можливості налагодження.

1.1. 4 Типи даних

Основними типами даних мови С розподілені на дві категорії: цілі і числа з плаваючою точкою.

Основні типи даних задаються за допомогою ключових слів: int, long, short, unsingned, char, float, double and signed.

Цілі числа можуть приймати позитивні і негативні значення.

int — основний тип цілих чисел.

long чи long int — підтримує цілі числа, що не уступають по величині найбільшим числам типу int і навіть більше.

short чи short int — є як мінімум 16-бітовим.

Цілі числа без знака приймають тільки позитивні чи значення нуль.

Числа з плаваючою точкою можуть приймати як позитивні так і негативні значення.

Float — основний тип; використовує 32 біта.

Double — дозволяє використовувати більша кількість значимих цифр, використовує 64 біта.

Long double — велика одиниця пам’яті.

1.1. 5 Функції стандартного введення-виведення

Функції стандартного введення — виведення описані у файлі stdio. h.

printf () — форматне виведення на екран:

int printf (char *format, < список виводу >);

Перший параметр є символьним рядком, що задає специфікації формату. Інші параметри — перерахування змінних і виразів, значення яких виводяться. Кожна специфікація формату має вид (параметри в квадратних дужках необов’язкові): %[flags] [width] [. prec] [F|N|h|l] type.

де

type —

тип специфікації

d чи i

ціле десяткове число зі знаком

u

десяткове число без знака

x

ціле 16-ричне число без знака

f

число з плаваючою точкою

e

число в E-формі

g

число з плаваючою точкою або в E-формі

c

один символ

s

рядок

%

символ%

flags —

ознака вирівнювання:

+ чи порожньо

вирівнювання по правому краї

-

вирівнювання по лівому краї

width-

ціле число — загальна ширина поля. Якщо це число починається з цифри 0, виведення доповнюється ліворуч нулями до заданої ширини. У задану ширину входять всі символи виведення, включаючи знак, дробову частину і т. п.

prec —

ціле число, кількість знаків після крапки при виведенні чисел з плаваючою точкою

F —

відповідний елемент списку виведення є далеким вказівником

N —

відповідний елемент списку виведення є близьким вказівником

l —

відповідний елемент списку висновку є long int чи double

scanf () — форматне введення з клавіатури:

int scanf (char *format, < список введення >);

Перший параметр є символьним рядком, що задає специфікації формату (див. функцію printf ()). Інші параметри — перерахування адрес змінних, у які вводяться дані. У цьому списку перед іменами всіх перемінних, крім тих, котрі вводяться по специфікації типу % s, повинний стояти символ &.

1.1.6 Логічні операції

Арифметичні операції:

Бінарними арифметичними операціями являються:

+ додавання;

вирахування;

* множення;

/ ділення;

% ділення по модулю

++ збільшення на одиницю;

— - зменшення на одиницю

Операція ділення (/) цілих супроводжується відкиданням дрібної частини, яка б вона не була.

Операція% - операція взяття модуля використовується в цілочисельні арифметиці. Її результатом являється залишок від ділення цілого числа, яке стоїть зліва від знака операції на число, яке розташоване справа від нього.

Операція% не застосовується к float та double.

Операції відношення та логічні операції:

Операторами відношення являються:

<, < =, >, > =

Всі вони мають однаковий пріоритет. Рівно на одну ступінь нижче пріоритет операторів зрівнювання на рівність: = =,! =

Оператори відношення мають більш низький пріоритет, ніж арифметичні.

До логічних операцій відносять:

& & логічне «И» — дає результат 1, якщо операнд зліва та справа 1, та 0 в противному випадку.

| | логічне «ИЛИ» — дає результат 1, якщо хоч би один операнд дорівнює 1, дає 1.

! логічне «НЕ» — дає результат 1, якщо операнд справа дорівнює 0 та 0 в противному випадку.

Логічні операції та операції відношення обчислюються зліва направо та обчислюються як тільки стає відомим істинність результату.

Операції присвоювання:

В якості операцій використовують: +, -, *, /, %, &, і, > >, < <, ^

Особливості операцій присвоювання:

крім операцій пересилки значення операцій присвоювання має ще і значення рівне результату присвоювання. Це значить, що можна записувати декілька операцій присвоювання, тобто, а = в = с=3

натискання комбінованих операцій присвоювання і =і+2, тобто і + = 2 до старшого значення «+» та зробити новим значенням.

Вираз 1 операція = вираз 2; (вир. 1) = (вир. 1) опер. (вир. 2) з тієї різниці, що вираз 1 обчислюється один раз.

В мові С операції з високими пріоритетами обчислюються першими. Самим вищим пріоритетом являється пріоритет, який дорівнює 1. Пріоритети та порядок операцій наведені в таблиці 1. 2

Таблиця 1.2 — Пріоритети операцій та порядок їх обчислення

Пріоритет

Знак операції

Типи операцій

Порядок виконання

2

() []. ->

Вираження

Зліва направо

1

— ~! * & ++ - sizeof наведення типів

Унарні

Вправо наліво

3

* /%

Мультиплікаційні

Зліва направо

4

+ -

Адитивні

5

< < > >

Зсув

6

< > <= > =

Відношення

7

==≠

Відношення (рівність)

8

&

Порозрядне І

9

^

Порозрядно виключаюче ІЛІ

10

|

Порозрядне ІЛІ

11

& &

Логічне І

12

||

Логічне ІЛІ

13

?:

Умовна

14

= *= /=%= += -= &= |= > >= < <= ^=

Просте та складове присвоювання

Справа наліво

15

,

Послідовне віднімання

Зліва направо

1. 2 Робота з побітовими операціями

1.2.1 Умова завдання.

Скласти функцію, яка зрушує вправо біти негативних чисел на два розряди, а біти 0 і 4 позитивних чисел скидає. Елементи фіксованого масиву знакових чисел представити в десятковому і шістнадцятирічному форматі. Вивести результати дій на екран.

1.2.2 Опис методу рішення

Бітова операція в програмуванні — деякі операції над ланцюжками бітів. У програмуванні, як правило, розглядаються лише деякі види цих операцій: логічні побітові операції і бітові зрушення. Бітові операції застосовуються в мовах програмування і цифровій техніці, вивчаються в дискретній математиці.

До бітових операцій також відносять бітові зрушення. При зрушенні значення бітів копіюються в сусідні по напряму зрушення. Розрізняють декілька видів зрушень — логічного, арифметичного і циклічного, залежно від обробки крайніх бітів. Також розрізняють зрушення вліво (у напрямі від молодшого біта до старшого) і вправо (у напрямі від старшого біта до молодшого).

При логічному зрушенні значення останнього біта по напряму зрушення втрачається (копіюючись в біт перенесення), а перший набуває нульового значення. Також розрізняють зрушення вліво (у напрямі від молодшого біта до старшого) і вправо (у напрямі від старшого біта до молодшого). Логічні зрушення вліво і вправо використовуються для швидкого множення і ділення на 2, відповідно.

Мал. 1.3 — Логічне зрушення

Арифметичне зрушення аналогічне логічному, але значення слова вважається знаковим числом, представленим в додатковому коді. Так, при правому зрушенні старший біт зберігає своє значення. Ліве арифметичне зрушення ідентичне логічному.

Мал. 1.4 — Арифметичне зрушення (правий)

При циклічному зрушенні, значення останнього біта по напряму зрушення копіюється в перший біт (і копіюється в біт перенесення).

Рис. 1.5 — Циклічне зрушення

Отже, можна прийти до висновку, ща наша функція використовує зрушення вправо для негативних чисел, тобто ділення на 2, а 0 і 4 біти позитивних чисел скидуються.

1.2.3 Опис алгоритму програми

signed int massive — заданий масив цілих типів даних с фіксованим значенням {13, 41, -513, 53, -41, 12, -425, 52, 21} виводиться на екран користувачеві за допомогою printf, з поміткою «Before», тобто те, що задано начально. Далі у функції worker (int arg[]) відбувається проголошення проголошення змінної i, яка при умові, що доки i менше довжини массиву i< sizeof (arg), визначається знак та проводяться побітові функції до кожного значення під номером i в масиві, який ми передали раніше. Сама функція здвигу відображаються в программі як «> >» та «< <» в залежності від напряму здвигу. У нашому випадку біти негативних чисел здвигаються вправо, тобто arg[i] > > 2, біти 0 і 4 позитивних чисел скидає, тобто arg[i]|=(0< <0)|(0<<4). Далі в printer (int arg[]) відбувається друк результатів з поміткою «This is hex and dec values after conversion», дані після здвигу та конвертації. За допомогою параметрів printf: %dn (друк у десятковому форматі), 0x % Xn (друк у шістнадцятирічному форматі) виводяться результати перетворень та здвигів на екран.

1.2.4 Тестування роботи програми

Так як вхідних даних, які вводить безпосередньо користувач у програмі немає, то достатньо тільки запустити програму task1. exe і дочекатися виводу на екран проведених операцій із масивом {13, 41, -513, 53, -41, 12, -425, 52, 21}. Для виходу достатньо натиснути будь-яку кнопку на клавіатурі.

Як ми бачимо на екрані, програма використовує заданий масив та робить побітове зрушення, після чого відображає на екран результати DEC (десяткові) та HEX (шістнадцятирічні) значення.

Рис. 1.6 — Тест task 1

1. 3 Робота з функцією заміни у рядку символів

1.3.1 Умова завдання

Скласти функцію, яка замінює в рядку символів першу букву кожного слова великою літерою, якщо вона є рядковою. Функція відображує кількість зроблених змін на екран користувачеві.

1.3.2 Опис методу рішення

Бібліотека обробки рядків в MS Visual Studio забезпечує багато корисних функцій для роботи із строковими даними, наприклад, порівняння рядків, пошук в рядках символів і інших підрядків, розмітку рядків (розподіл рядків на логічні шматки) і визначення довжини рядка.

Якщо функція повинна приймати аргументи, то в її оголошенні слід декларувати параметри, які набудуть значень цих аргументів. Як видно з оголошення наступної функції, оголошення параметрів стоять після імені функції.

Функція is_in () має два параметри: s і d. Якщо символ c входить в рядок s, то ця функція повертає 1, інакше вона повертає 0.

Хоча параметри виконують спеціальне завдання, — набувають значень аргументів, що передаються функції, — вони все одно поводяться так, як і інші локальні змінні. Формальним параметрам функції, наприклад, можна привласнювати які-небудь значення або використовувати ці параметри в яких-небудь виразах.

Виклики за значенням і по посиланню: у мовах програмування є два способи передачі значень підпрограмі. Перший з них — виклик за значенням. При його застосуванні у формальний параметр підпрограми копіюється значення аргументу. У такому разі зміни параметра на аргумент не впливають.

Другим способом передачі аргументів підпрограмі являється виклик по посиланню. При його застосуванні в параметр копіюється адреса аргументу. Це означає, що, на відміну від виклику за значенням, зміни значення параметра призводять до таких самих змін значення аргументу. За невеликою кількістю виключень, в мові Сі для передачі аргументів використовується виклик за значенням. Зазвичай це означає, що код, що знаходиться усередині функції, не може змінювати значень аргументів, які використовувалися при виклику функції.

Виклик функцій за допомогою масивів: коли в якості аргументу функції використовується масив, то функції передається його адреса. У цьому і полягає виключення по відношенню до правила, яке свідчить, що при передачі параметрів використовується виклик за значенням. У разі передачі масиву функції її внутрішній код працює з реальним вмістом цього масиву і цілком може змінити цей вміст. Але ця программа не працює із символами кирилиці.

1.3.3 Опис алгоритму програми

Першим етапом складання програми стає оголошення вхідних даних current за допомогою типу char, який використовується для представлення символів з таблиці ASCII. Далі у оголошуємо головну змінну zum_number, паралельно в second. h оголошуємо індикатор пробелів (space_detector) та лічильник замін (count), встановлений на 0, після чого оголошується перший символ (firstchar) у стан 1. За допомогою модифікатору extern, який використовується для оголошення методу із зовнішньою реалізацією, задаємо умову для заміни символів, використовуючи змінні індикатор пробелів (space_detector) та перший символ (firstchar). Параметр *s рівний пробелу, становить значення індикатора пробелів (space_detector) в 1, далі якщо індикатор пробелів та перший символ однаково знаходяться у стані 1, функція робить заміну за такою формулою:

*s = *s + ('A' - 'a')

Після чого змінні обнуляються до 0 і програма повертаються до лічильника замін (return count). Але все це робиться тільки після того, коли користувач вводить дані, при умові, що всі дані - літерні символи латиниці. За допомогою printf на екран виводиться пропозиція ввести дані «Input text, press enter to parse». При умові, що getchar () (функція, що повертає із стандартного потоку stdin наступний символ) рівна сurrent (вхідним даним), число замін (zum_number) буде дорівнювати числу виконаних замін над введенними даними. Після чого функція putchar (current), записує символ, що міститься в молодшому байті параметра ch, в стандартний потік виведення stdout, тобто робить заміну малої літери на велику по вище описаній формулі з параметром *s. В завершенні програма відображає на екран кількість зроблених замін з таким діалогом «There was N replacements», де N — число замін.

1.3.4 Тестування роботи програми

В даній програмі присутні вхідні та вихідні дані. Присутність вхідних даних зобов’язує користувача вводити їх. Вхідними даними можуть бути будь-які літери латиниці. Вводити слова потрібно через пробел. Розглянемо декілька прикладів роботи програми.

Перший приклад (рис. 1. 7) наглядно показує нам

1. Данні для вводу здійснені користувачем «eto prosto zamechatelniy kursovoi».

2. Преобразування введеного тексту з заміною маленької заглавної літери на велику «Eto Prosto Zamechatelniy Kursovoi».

3. Відображення кількості зроблених замін «There was 4 replacemnts».

Рис. 1.7 — Тест Task 21

Рис. 1.8 — Тест Task 22

Як і в першому прикладі програма робить одні і тіж дії, підраховуючи кількість зроблених замін. Але з недоліків є те, що початковий ввод заглавних великих літер призводить до помилки, наприклад, як у другому прикладі у слов «and». Хоча в рамках поставленої задачі вона праціє ісправно, і це є її головною особливістю.

2. Робота з масивами

2.1 Умова завдання

Задавши двомірний масив речових даних (матрицю А), реалізувати його обробку, як зазначено у варіанті. Вихідні дані задати самостійно, враховуючи специфіку завдання. У програмі повинні бути передбачені функції введення-виведення елементів масиву, А та його обробки. Задана квадратна матриця A розміром 4×4, що складається з дійсних елементів.

2.2 Опис методу рішення

Двовимірний масив — це одновимірний масив, елементами якого є одновимірні масиви. Іншими словами, це набір однотипних даних, що має загальне ім'я, доступ до елементів якого здійснюється по двох індексах. Наочно двовимірний масив зручно представляти у вигляді таблиці, в якій n рядків і m стовпців, а під елементом таблиці, що стоїть в i — у рядку і j — му стовпці розуміють деякий елемент масиву a[i] [j].

побітовий масив алгоритм програмування

Рис. 1.9 — Представлення двовимірного масиву

Дійсно, якщо розібратися з тим, що таке a[i] при фіксованому значенні i, то побачимо, що це одновимірний масив, що складається з m елементів, до яких можна звертатися по індексу: a[i] [1], a[i] [2]., a[i] [m]. Схематично це уся i — й рядок рядок таблиці. Аналогічно, якщо ми розглянемо одновимірний масив рядків, то зможемо помітити, що це так само двовимірний масив, де кожен окремий елемент — це символ типу char, а a[i] - це одновимірний масив, що представляє окремий рядок початкового одновимірного масиву рядків. Виходячи з ідеї визначення двумерного масиву можна визначити рекурентне поняття багатовимірного масиву: n — мерный масив — це одновимірний масив, елементами якого є (n — 1) -масиви. Нескладно здогадатися, що 3-мірний масив візуально можна представити у вигляді куба з осередками (схоже на кубик Рубика), де кожен елемент має вигляд a[i] [j] [k]. А ось з великою розмірністю виникають складнощі з візуальним представленням, але математична модель ясна.

По-іншому двовимірний масив також називають матрицею, а у тому випадку, коли n=m (число рядків дорівнює числу стовпців) матрицю називають квадратною. У матрицях можна зберігати будь-які табличні дані: зміст ігрового поля (шашки, шахи, Lines і так далі), лабіринти, таблицю суміжності графа, коефіцієнти системи лінійних рівнянь і так далі. Матриці часто використовують для вирішення олімпіадних і математичних завдань. У завданнях табличні дані часто визначаються у вхідному файлі таким чином: спочатку в першому рядку вказуються значення n і m через пропуск, а далі йдуть n рядків по m елементів в кожній, також один від одного відокремлені пропуском і вхідний файл може мати, наприклад, наступний зміст, що зрозуміло відбиває вміст матриці при звичайному перегляді.

Директива #define служить для заміни констант, що часто використовуються, ключових слів, операторів або виразів деякими ідентифікаторами. Ідентифікатори, замінюючі текстові або числові константи, називають іменованими константами. Ідентифікатори, замінюючі фрагменти програм, називають макровизначеннями, причому макровизначення можуть мати аргументи.

Ця директива замінює усі наступні входження ідентифікатора на текст. Такий процес називається макропідстановкою. Текст може бути будь-яким фрагментом програми на З, а також може бути і відсутнім. У останньому випадку усі екземпляри ідентифікатора видаляються з програми.

Ці директиви змінять в тексті програми кожне слово WIDTH на число 80, а кожне слово LENGTH на вираження (80+10) разом з дужками, що оточують його.

Дужки, що містяться в макровизначенні, дозволяють уникнути непорозумінь, пов’язаних з порядком обчислення операцій. Наприклад, за відсутності дужок вираження t=LENGTH*7 буде перетворено у вираження t=80+10*7, а не у вираження t=(80+10)*7, як це виходить за наявності дужок, і в результаті вийде 780, а не 630.

У другій синтаксичній формі в директиві #define є список формальних параметрів, який може містити один або декілька ідентифікаторів, розділених комами. Формальні параметри в тексті макровизначення відмічають позиції на які мають бути підставлені фактичні аргументи макровиклику. Кожен формальний параметр може з’явитися в тексті макровизначення кілька разів.

При макровиклику услід за ідентифікатором записується список фактичних аргументів, кількість яких повинна співпадати з кількістю формальних параметрів.

Як і в попередньому прикладі, круглі дужки, в які поміщені формальні параметри макровизначення, дозволяють уникнути помилок пов’язаних з неправильним порядком виконання операцій, якщо фактичні аргументи є виразами.

Для змінних, що представляють число з плаваючою точкою використовуються наступні модификаторы-типа: float, double, long double (у деяких реалізаціях мови long double СІ відсутній).

Величина з модификатором-типа float займає 4 байти. З них 1 байт відводиться для знаку, 8 біт для надмірної експоненти і 23 біта для мантиси. Відмітимо, що старший біт мантиси завжди дорівнює 1, тому він не заповнюється, у зв’язку з цим діапазон значень змінної з плаваючою точкою приблизно рівний від 3. 14E-38 до 3. 14E+38.

2.3 Опис алгоритму програми

За допомогою #define задається кількість рядків і стовпців в матриці 4×4 (X_DIM 4, Y_DIM 4). Далі інформуємо компілятор про функцію, яка буде використана за текстом раніше, ніж буде описана, після чого стоврюється масив завдовжки X_DIM, в який потім запишеться адреса найбільшого числа у стовпціint cur_y [X_DIM].

Слідуючим етапом стає створення двовимірного масиву, з яким будуть проводиться операції matrix[][] і масив для знайдених максимумів float matrix [X_DIM] [Y_DIM], found_biggest [X_DIM]. Створюємо також лічільники i, t = 0 і змінну для находження суми float summ = 0. 0f. Після чого програма виводить запит на введення даних, натякаючи на розміри матриці в пристрій стандартного виводу, та поки дійсна умова, що i менше Y_DIM — перемикаються рядки, а t менше X_DIM перемикаються стовпці. Потім друкує запит на введення даних за поточною адресою в матриці в пристрій стандартного виводу і зчитує введення за поточною адресою в матриці. Поки i менше X_DIM (кількості стовпців) — перемикає стовпці від 0 до X_DIM. Далі призначає масиву для знайдених максимумів за адресою лічильника стовпців знайдений максимум в цьому стовпці found_biggest[i]=biggest_in_column (matrix, i, cur_y) і друкує знайдений максимум в стовпці в пристрій стандартного виводу, вказуючи номер стовпця, само число і де в стовпці воно було знайдене. Після чого підсумовує поточний максимум з попереднім значенням (чи нулем, якщо це перший) summ = summ + found_biggest[i].

Під кінець програма виводить суму максимумів.

Функція пошуку максимуму в стовпці. Їй передається матриця, яка локально буде названа local_matrix, так само номер поточного стовпця і _покажчик_ на масив з адресами максимумів.

Можна використовувати і не покажчик. Наприклад так: float biggest_in_column (float local_matrix [X_DIM] [Y_DIM], int column, int cur_y [Y_DIM], але для масивів це не принципово. Лічильник встановлюється в 0 і потім задається поточний максимум теж як 0, що б не було помилок, інакше при виклику змінної виникне несумісність (float current_biggest = 0. 0f. Покилічильник менше висоти стовпця, порівнює чи більше поточне значення в цьому стовпці і в цьому рядку того, що зараз вважається максимумом і якщо так, призначає максимуму поточне значення в цьому стовпці і в цьому рядку current_biggest=local_matrix[column] [i].

Так само записує в якому місці знаходиться це значення у цього стовпця cur_y[column]=i і після чого повертає максимум в стовпці return current_biggest.

2.4 Тестування роботи програми

В даній програмі присутні вхідні та вихідні дані. Присутність вхідних даних зобов’язує користувача вводити їх. Вхідними даними можуть бути будь-які числа, навіть дробові. Вводити числа потрібно по черзі по кожній координаті при діалозі, з’являється із запитом. Заповнивши числами матрицю, програма оброблює та показує координати найбільших чисел у стовпцях, після чого сумує ці числа і виводить на екран. Розглянемо декілька прикладів роботи програми.

Перший приклад (рис. 1. 7) наглядно показує нам

1. Данні для вводу здійснені користувачем «7, -1, -2. 4, 78, -56, 89, 6. 7, -8. 1, 7. 8, 99, 65, -4, -7, 1, 2, -9».

2. Знаходження координати найбільших чисел у стовпцях

Biggest in column 0 is 7.8 at 2

Biggest in column 0 is 99 at 2

Biggest in column 0 is 65 at 2

Biggest in column 0 is 78 at 2

3. Відображення cуми найбільших чисел

Summ is 249. 8

Рис. 1. 10 — Тест task31

Рис. 1. 11 — Тест task32

Як і в першому прикладі програма працює ісправно в рамках завдання.

Висновки

Отже, розробка трьох програм допомогла отримати практичні навички в роботі з порозрядними логічними операціями та операціями зсуву; створення функції заміни у рядку символів та роботі з одномірними та двомірними масивами.

Розроблені програми можуть повноцінно використатись у створенні інших проектів.

В даний час індустрія виробництва комп’ютерів та програмного забезпечення є однією з найбільш важливих сфер економіки розвинених країн. Щорічно у світі продаються десятки мільйонів комп’ютерів. Тільки в США обсяг продажів комп’ютерів складає десятки мільйонів доларів і постійно продовжує рости. У чому ж причини такого стрімкого зростання індустрії персональних комп’ютерів та їх порівняльна вигідність для багатьох ділових застосувань? Простота використання, забезпечена за допомогою діалогового способу взаємодії з комп’ютером.

Відносно високі можливості з переробки інформації, наявність програмного забезпечення, а також потужних систем для розробки нового програмного забезпечення.

C + + - модульна статично універсальна мова програмування загального призначення. Підтримує різні парадигми програмування, але, в порівнянні з його попередником — мовою Сі, — найбільшу увагу приділено підтримці об'єктно-орієнтованого і узагальненого програмування. Назва

«C + +» походить від Сі ©, в якому унарний оператор ++ позначає інкремент змінної. У 1990-х роках стала однією з найбільш широко застосовуваних мов програмування загального призначення.

При створенні C ++ прагнули зберегти сумісність з мовою Сі. Більшість програм на С справно працюватимуть і з компілятором C + +.

Крім цього, С + + успішно використовується як у багатьох додатках, так і в потужних операційних системах.

Visual C++ 2010 надає потужне і гнучке середовище розробки, що дозволяє створювати застосування для Microsoft Windows і застосування, засновані на Microsoft. NET. Це середовище можна використовувати як інтегроване середовище розробки, так і в якості окремих засобів.

Список джерел

1. Страуструп Б. «Язык программирования С++».

2. Шилдт Г. «Искусство программирования на C++».

3. wikipedia. com

4. msdn. microsoft. com

ПоказатьСвернуть
Заполнить форму текущей работой