Методів обробка рядкових масивів даних

Автор: Пользователь скрыл имя, 20 Сентября 2011 в 10:17, курсовая работа

Описание работы

Об’єкт дослідження – обробка одновимірних масивів.

Предметом дослідження – обробка рядкових масивів даних.

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

Работа содержит 1 файл

курсовая по информатике.doc

— 192.00 Кб (Скачать)

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

   Першим  компілятором, що підтримів export в шаблонах, став Comeau C++ на початку 2003 року (опісля п'ять років після виходу стандарту). У 2004 році бета-версія компілятора Borland C++ Builder X також почала його підтримку.

   Обидва  цих компілятора засновані на зовнішньому інтерфейсі EDG. Інші компілятори, такі як Microsoft Visual C++ або GCC, взагалі цього не підтримують. Ерб Саттер (Herb Sutter), секретар комітету із стандартизації С++, рекомендував прибрати export з майбутніх версій стандарту унаслідок серйозних складнощів в повноцінній реалізації, проте згодом остаточним рішенням було вирішено його залишити.

   Із  списку інших проблем, пов'язаних з  шаблонами, можна навести питання  конструкцій часткової спеціалізації  шаблонів, які погано підтримувалися протягом багатьох років після виходу стандарту С++.

    ВИСНОВКИ

   Мова C++ є однією з найпоширеніших сучасних мов програмування. Вона займає домінуюче положення в світі персональних комп'ютерів. C++ - універсальна мова високого рівня. Але окрім властивостей, властивих іншим мовам високого рівня (структурність, модульність програм), в неї включені засоби програмування, властиві мовам низького рівня типу Асемблера (побітові операції, операції зрушення, робота з адресами). C++ витончена і зручна для побудови багатомодульних структурованих програм. Вона є могутнім і гнучким засобом для написання на ній операційних систем, їх компонентів. Мова C++ є продовженням і розвитком мови С, розробленої Д. Рітчи на початку сімдесятих років і що набула широке поширення. Сама ж мова C++, розроблена Бьярном Страуструпом, з'явилася лише в 1983 р. До стандарту Д. Рітчи були додані нові елементи, можливості, що істотно розширили його. Це перш за все класи, додавання яких зробило C++ однією з самих широко використовуваних об'єктно-орієнтованих мов програмування. Не дивлячись на відносно недавню розробку, мова C++ до теперішнього часу вже завоювала велику популярність як у професійних, так і програмістів, що починають. 
 
 
 
 
 
 
 
 
 
 
 

РОЗДІЛ 2. Обробка рядкових масивів даних

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

   Масив – це кінцева послідовність даних  одного типу. Кожен елемент масиву має однакове ім’я – ім’я масиву, і відрізняється індексом (ціле число), за яким здійснюється доступ до елемента масиву. Індекси масивів у С/С++ починаються з 0. У програмі одновимірний масив оголошується наступним чином:

   <тип> <ім’я масиву> [розмір] <ініціалізація>; ,

   де  розмір – кількість елементів одновимірного масиву.

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

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

   Наприклад:

   - оголошення одновимірного масиву  з п’яти елементів цілого типу:

   int a[5];

   - динамічне виділення пам’яті  під 10 цілочисельних елементів:

   int*m=new int [10];

   Враховуючи  те, що ім¢я масиву є вказівником, зрозумілим стає зміст останньої операції: вказівникові на int m присвоюється початкова адреса ділянки пам¢яті, виділеної у динамічній області під 10 цілочисельних елементів.

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

   Натомість ініціалізацію статичних масивів  можна здійснювати при їх визначенні. При цьому слід зауважити, що у  С/С++ не перевіряється вихід індексу  за межі масиву.

   Наприклад:

   double d[] = {1, 2, 3, 4, 5};

   float f[10]={1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.0};

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

   Для звернення до елементів масивів використовуються два способи, наприклад до 4-го (по порядку) елемента масиву a можна звернутися як a[3] або *(a+3). Останнє звернення базується на факті, що ім’я масиву є одночасно вказівником на його нульовий елемент, а зміщення вказівника у пам’яті відбувається на величину індексу помножену на розмір типу елементів масиву у байтах.

   Пам’ять, зарезервовану під динамічний масив  за допомогою new[ ], потрібно звільняти  оператором delete [] <ім¢я массиву>.

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

   2.2. Рядки, як одновимірні масиви символів

   У мовах С/С++ немає окремого типу даних  “рядок символів”, подібно до типу string у алгоритмічній мові PASCAL. Тому робота з рядками реалізована  шляхом використання одновимірних масивів  типу char. Рядок символів – це одновимірний масив типу char, останнім елементом якого є нульовий байт. Нульовий байт – це байт, кожен біт якого рівний нулю, при цьому для нульового байта визначена символьная константа ¢\0¢ (ознака закінчення рядка або нуль-термінатор). Тому, якщо рядок містить k символів, в описі масиву потрібно вказати розмірність k+1.

   Так, для збереження у масиві рядкової константи “Лабораторна робота з  рядками”, необхідно описати масив char s. В кінці рядкової константи  символ ґ \0¢ вказувати не потрібно, оскільки це зробить компілятор мови С.

   Рядки можна

   а) ініціалізувати при декларуванні.

   Наприклад:

   charS1[10]=”123456789”,S2[]=”abcdefg”,S3[]={‘1’,‘2’,‘3’,‘\0’};,

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

   б) вводити з клавіатури, не використовуючи при цьому оператора циклу, подібно  звичайним масивам. 
 
 

   2.3. Символьна інформація та рядки

     2.3.1. Збереження символьної інформації

   Для символьних даних в C/С++ введено тип char. Для представлення символьної інформації використовуються символи, символьні змінні і текстові константи. Приклади:

   const char c=’c’; //символ-константа – займає  один байт

   char a,b; // символьні змінні, займають  по одному байту

   const char *s=“Приклад рядка\n” ; // рядкова  константа

   Рядок в С++ - це масив символів, що закінчується нуль-символом ‘\0’. За місцезнаходженням  цього символу визначається фактична довжина рядка. Кількість елементів  у такому масиві на 1 більше за зображення рядка (рис. 8.1). 

   A    \0         A
“A”

рядок(2байти)

        ‘A’

символ (1байт)

   Рис. 8.1. 

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

   Приклади:

   char s1[10]="string1"; // масив символів  з десяти елементів

   char s3[]={‘s’,’t’,’a’,‘r’,’t’,’\0’}; // масив  з 6 елементів типу char

   сhar *s4="string4"; // вказівник-змінна на рядок

   char *s=”String5”; // виділяється 8 байтів  для рядка

   char *sss=new char[10]; /* виділяється динамічна  пам’ять

   під 10 елементів типу char*/

   strcpy(sss,”Thanks”);// у цю область пам’яті копіюється рядок.

2.3.2. Функції вводу/виводу при роботі з рядками

Для вводу  і виводу символьних даних у бібліотеці мови С (файл <stdio.h>) визначені наступні функції:

   int getchar() - здійснює введення одного символу з вхідного потоку і повертає один байт інформації (символ) у вигляді значення типу int. Це робиться для розпізнавання ситуації, коли при зчитуванні буде досягнуто кінець файлу.

   int putchar (int c) – розміщує в стандартний вихідний потік символ c.

   Приклад:

   # include <stdio.h>

   void main()

   {char c, d;

   c=getchar(); putchar(c);

   d=getchar(); putchar(d);

   }

   char* gets(char*s) – зчитує рядок s із стандартного потоку до появи символу ‘\n’, сам символ ‘\n’ у рядок не заноситься. Повертає вказівник на цей рядок.

   int puts(const char* s) – записує рядок у стандартний потік виводу, додаючи в кінці рядка символ ‘\n’, у випадку вдалого завершення повертає значення більше або рівне 0 і від’ємне значення у випадку помилки.

   Також для вводу/виводу рядка можна  використовувати функції scanf/printf, відповідно, задавши специфікатор формату %s:

   # include <stdio.h>

   void main(){

   const int n=10;

   char s[n];

   scanf(“%s”, s); printf(“%s”, s);}

   Ім’я  масиву є вказівником-константою на початок рядка, тому не слід застосовувати  операцію взяття адреси (&), що зазвичай використовується з функцією вводу scanf. Ввід буде здійснюватися до першого символу пропуску. Для того щоб ввести рядок, який складається з декількох слів, використовується специфікатор %c (символи) із зазначенням у ньому максимальної кількості символів, що вводяться, наприклад:

   scanf(“%10c”, s);

   При виводі рядка на екран можна в  специфікації %s зазначити кількість  символів, які відводяться під  рядок:

   printf(“%15s”, s);

   Функції вводу/виводу мови С++, описані у заголовному  файлі <iostream.h>:

   cin>>s; //ввід рядка зі стандартного потоку до появи першого пропуску.

   При введенні, наприклад, рядка “Ваня  Іванов” в рядок s буде записано лише перше слово рядка, а саме “Ваня\0”.

   cout<<s; //вивід рядка в стандартний потік до першого пропуску.

   Якщо  потрібно ввести рядок, який складається  з декількох слів, в одну рядкову змінну, використовують методи getline або get класу istream, об’єктом якого є cin. Виклик цього методу здійснюється наступним чином: після імені об’єкту cin ставиться крапка, за якою записується ім’я методу:

   #include<iostream.h>

   int main()

   {const in n=80;

   char s[n];

   cin.getline(s, n); cout<<s<<endl;

   cin.get(s, n); cout<< s}

   Метод getline зчитує з вхідного потоку n-1 символів або менше (якщо символ переводу рядка зустрінеться раніше) і записує їх у рядкову змінну s. Символ переводу рядка також зчитується (видаляється) з вхідного потоку, але не записується у рядкову змінну, замість нього розміщується завершальний ’\0’. Якщо в рядку вихідних даних більше за n-1 символів, наступне введення буде виконуватися з того ж рядка, починаючи з першого символу, що не був зчитаний.

Информация о работе Методів обробка рядкових масивів даних