Циклічні конструкції в мовах програмування високого рівня

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Курсова робота

"ЦИКЛІЧНІ КОНСТРУКЦІЇ У МОВАХ ПРОГРАМУВАННЯ ВИСОКОГО РІВНЯ "

Студент групи

Науковий керівник:

канд. пед. наук.

Тамбов 2007

ЗМІСТ

ВСТУП

1. ІСТОРІЯ МОВ ПРОГРАМУВАННЯ ВИСОКОГО РІВНЯ

1.1 Класифікація мов програмування

1.2 Мова C

1.3 Мова C + +

1.3 Мова Java

1.4 Мова C #

2. ЦИКЛІЧНІ КОНСТРУКЦІЇ У МОВАХ ВИСОКОГО РІВНЯ

2.1 Алгоритмічна структура циклу.

2.2 Цикли в мові С.

2.3 Цикли в мові С + +.

2.4 Цикли в мові Java.

2.5 Цикли в мові С #

3. ПРИКЛАД ПРОГРАМ ЦИКЛІЧНО КОНСТРУКЦІЙ НА МОВІ С #

3.1 Програма № 1 цикл while

3.2 Програма № 2 цикл do-while.

3.3 Програма № 3 цикл for.

3.4 Програма № 4 цикл foreach

ВИСНОВОК

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

ВСТУП

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

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

Робоча гіпотеза: рішення наукової проблеми можливо шляхом вивчення та аналізу матеріалів з ​​різних джерел і розробки на практиці програм з використанням циклів.

Мета роботи: вивчення циклічних конструкцій в мовах високого рівня.

Завдання дослідження:

- Ознайомитися з особливостями деяких сучасних мов програмування високого рівня;

- Дослідити циклічні конструкції в мовах високого рівня;

- Підготувати літературний огляд джерел за темою роботи;

- Написати одну або декілька програм, що демонструють використання циклічних конструкцій в мові С #.

Об'єкт дослідження: - мови програмування високого рівня.

Предмет дослідження - циклічні конструкції.

Метод дослідження полягає у аналізі, узагальнення літератури і програмування.

Науковою новизною є отримання нових знань про використання циклічних конструкцій в мовах програмування високого рівня.

Практична значимість полягає в придбанні навичок використання циклічних конструкцій для написання програм.

Джерельна база - бібліотека ТФ МДУКМ, інтернет.

1. ІСТОРІЯ Мови програмування високого рівня

1.1 Класифікація мов програмування

Мова програмування - це формалізований мова для опису алгоритму розв'язання задач на комп'ютері. Мови програмування можна розділити на:

- Мови програмування низького рівня;

- Мови програмування високого рівня.

До групи мов низького рівня входять машинні мови та мови символічного кодування: (Автокод, Асемблер). Оператори цієї мови - це ті ж машинні команди, але записані мнемонічними кодами, а в якості операндів використовуються не конкретні адреси, а символічні імена. Всі мови низького рівня орієнтовані на певний тип комп'ютера, тобто є машинно-залежними. Машинно-орієнтовані мови - це мови, набори операторів і образотворчі засоби яких істотно залежать від особливостей ЕОМ (внутрішнього мови, структури пам'яті і т.д.).

До мова ам програмування високого рівня відносяться Фортран, Алгол, Кобол, Бейсік, Сі, Пролог, С + +, С #, JAVA і т.д. Ці мови машинно-незалежні, тому що вони орієнтовані не на систему команд тієї чи іншої ЕОМ, а на систему операндів, характерних для запису певного класу алгоритмів. Однак програми, написані на мовах високого рівня, займають більше пам'яті і повільніше виконуються, ніж програми на машинних мовах. Це і є основний їх недолік.

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

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

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

Для опису структур управління програміст може використовувати також ключові слова, як if, while; послідовності машинних команд, що відповідають цим описам компілятор генерує динамічно.

Всі створені до теперішнього часу мови були зв'язані один з одним, причому на кожен новий мова в тій чи іншій формі впливають його попередники. У процесі такого "перехресного запилення" кошти з однієї мови адаптуються іншим, вдала новинка інтегрується в існуючий контекст, а віджила конструкція відкидається за непотрібністю. Приблизно так і відбувається еволюція комп'ютерних мов і розвиток мистецтва програмування. Найбільш відомими і популярними мовами програмування на сьогоднішній день є: С, С + +, Java, С # [1].

1.2 Мова C

Мова С був розроблений на початку 1970-х років Денисом Рітчі (Dennis Ritchie), яка у той час в компанії Bell Laboratories. Хоча спочатку мову С створювався для розробки операційних систем і компіляторів, він швидко отримав популярність в середовищі програмістів і придбав додаткові переваги завдяки його стандартизації, виконаної Американським інститутом національних стандартів (ANSI - American National Standards Institute).

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

Приклад програми на мові С:

/ * Програма обробки списку * / # include <stdio. H>

# Include <string.h>

main ()

{

char names [10] [9], pivot [9];

int i, j;

/ * Введення імен з клавіатури * /

for (i = 0; i <10; + + i)

scanf ("% s", names [i]);

/ * Сортування списку імен * /

for (i = 1; i <10; + + i)

{Strcpy (pivot, names [i]);

j = i - 1;

while ((j> = 0) & & (strcmp (pivot, names [j]) <0)

{Strcpy (names [j +1], names [j]); - j;}

strcpy (names [j +1], pivot);}

/ * Друк відсортованого списку * /

for (i = 0; i <10; + + i) {

printf ("% s \ n", names [i]);}

1.3 Мова C + +

До кінця 1970-х розмір проектів став наближатися до критичного, при перевищенні якого методика структурного програмування і мова С "опускали руки". Тому стали з'являтися нові підходи до програмування, що дозволяють вирішити цю проблему. Один з них отримав назву (ООП). Використовуючи ООП, програміст міг справлятися з програмами набагато більшого розміру, ніж раніше. Але вся біда полягала в тому, що С, найпопулярніший на той час мову, не підтримував ООП. Бажання працювати з об'єктно-орієнтованої версією мови С, зрештою, і призвело до створення C + +. Мова C + + був розроблений Б'ярні Страуструпом (Bjarne Stroustrup) в компанії Bell Laboratories (Муррей Хіл, Нью-Джерсі), і роком заснування вважається 1979-й. Спочатку творець нової мови назвав його "С з класами", але в 1983 році це ім'я було змінено на C + +. C + + повністю включає елементи мови С. Таким чином, С можна вважати фундаментом, на якому побудовано C + +. Більшість додатків, які Страуструп вніс в С, були призначені для підтримки об'єктно-орієнтованого програмування. По суті, C + + - це об'єктно-орієнтована версія мови С. Зводячи "будівлю" C + + на фундаменті С, Страуструп забезпечив плавний перехід багатьох програмістів на "рейки" ООП. Замість необхідності вивчати абсолютно нову мову, С-програмісту досить було освоїти лише нові засоби, що дозволяють використовувати переваги об'єктно-орієнтованої методики.

Протягом 1980-х років C + + інтенсивно розвивався і до початку 1990-х уже був готовий для широкого використання. Зростання його популярності носив вибухоподібне характер, і до кінця цього десятиліття він став найбільш широко використовуваним мовою програмування. У наші дні мову C + +, як і раніше має незаперечну перевагу при розробці високопродуктивних програм системного рівня. Важливо розуміти, що створення C + + не було спробою винайти абсолютно нову мову програмування. Це було свого роду удосконалення і без того дуже успішного мови. Такий підхід до розробки мов (взяти за основу існуючий мову і підняти його на новий щабель розвитку) дав початок тенденції, яка продовжує жити й сьогодні [4, 6].

Приклад програми на мові С + +:

/ / Програма обробки списку

# Include <iostreain. H>

# Include <string.h>

const int ListLength = 10;

/ / Всі об'єкти класу list містять список імен і три відкритих

/ / Методу, які називаються getnames, sortlist і printnames.

class list

{Private:

char names [ListLength] [9];

public:

void getnames ()

{Int i;

for (i = 0; i <ListLength; * + i)

cin »names [i];}

void sortlist ()

{Int i, j;

char pivot [9];

for (i = 1; i <ListLength; + + i)

{Strcpy (pivot, names [i]);

j = i - 1;

while ((j> = 0) & & (stremp (pivot, names [j]) <0))

{Strcpy (names [j +1], names [j]); - j;}

strcpy (names [j +1], pivot);}}

void printnames ()

{Int i;

cout «endl;

for (i = 0; i <ListLength; + + i)

cout «names [i]« endl;}}

/ / Створення об'єкта з ім'ям namelist і звернення до нього з / / вимогою ввести декілька імен, відсортувати їх, а / / потім вивести відсортований список на екран. Void main ()

{List namelist;

namelist.getnames ();

namelist.sortlist ();

namelist. printnames ();

1.3 Мова Java

Наступною сходинкою на сходах прогресу мов програмування стала мова Java, який спочатку називався Oak (у перекладі з англ. "Дуб").

Java - це об'єктно-орієнтована мова програмування, розроблений компанією Sun Microsystems на початку 90-х років. Його розробники багато запозичили з мов С и C + +. Будучи новою мовою, Java ще не піддавався стандартизації. Дійсно, мова Java все ще знаходиться на стадії еволюції. Однак багато захоплено відносяться до цієї мови, оскільки він обіцяє стати стандартом для тих програм, які відомі як "аплети Java" і які можна передавати через Internet у вигляді виконуваних модулів і запускати на будь-який клієнтській машині. Завдяки такій здатності статичні за своєю природою гіпертекстові документи можна замінити динамічними програмами, з якими користувач зможе взаємодіяти безпосередньо [7].

Приклад програми на мові Java:

/ / Програма обробки списку

import java. io .*

/ / Всі об'єкти класу list містять список імен і три відкритих

/ / Методу, які називаються getnames, sortlist і printnames.

class list

{Final int ListLength = 10;

private String [] names;

public list ()

{Names = new String [ListLength]}

public void getnames {}

{Int i;

Datalnput data = new DatalnputStream (System.in);

for (i = 0; i <ListLength; i + +)

{Try (names [i] = data.readLine ();

catch (IOException e ){};}

public void sortnames ()

{Int i, j; String pivot; for (i = 1; i <ListLength; i + +)

{Pivot = names [i]); j = i - 1;

while ((j> = 0) & & (pivot.compareTo (names [j]) <0))

{Names [j +1] = names [j]; j -;}

names [j +1] = pivot;}}

public void printnames ()

{Int i; for (d = 0; i <ListLength; i + +)

System.out.println (names [i ]);}}

/ / Створення об'єкта з ім'ям namelist і звернення до нього з / / вимогою ввести декілька імен, відсортувати їх, а / / потім вивести відсортований список на екран.

class sort {public static void main (String args [])

{List namelist = new list ();

namelist.getnames ();

namelist.sortnames ();

namelist.printnames ();}}

1.4 Мова C #

Розробники Java успішно вирішили багато проблем, пов'язані з перенесенням в середовищі Internet, але далеко не всі. Одна з них - міжмовна можливість взаємодії (Cross-language interoperability) програмних і апаратних виробів різних постачальників, або багатомовне програмування (Mixed-language programming). У разі вирішення цієї проблеми програми, написані на різних мовах, могли б успішно працювати одна з іншою. Така взаємодія необхідно для створення великих систем з розподіленим програмним забезпеченням (ПЗ), а також для програмування компонентів ПЗ, оскільки найціннішим є компонент, який можна використовувати в широкому діапазоні комп'ютерних мов та операційних середовищ. Крім того, в Java не досягнута повна інтеграція з платформою Windows. Хоча Java-програми можуть виконуватися в середовищі Windows (за умови встановлення віртуальної машини Java), Java і Windows не є міцно пов'язаними середовищами. А оскільки Windows - це найбільш широко використовувана операційна система в світі, то відсутність прямої підтримки Windows - серйозний недолік Java [13].

Щоб задовольнити ці потреби, Microsoft розробила мову С #. З # був створений в кінці 1990-х років і став частиною загальної. NET-стратегії Microsoft. Вперше він побачив світло як б-версії в середині 2000 року. Головним архітектором З # був Андерс Хейлсберг (Anders Hejlsberg) - один з провідних фахівців в області мов програмування, що отримав визнання у всьому світі. Досить сказати, що в 1980-х він був автором досить успішного продукту Turbo Pascal, витончена реалізація якого встановила стандарт для всіх майбутніх компіляторів. З # безпосередньо пов'язаний з С, C + + і Java. І це не випадково. Ці три мови - найпопулярніші і найулюбленіші мови програмування в світі. Більше того, майже всі професійні програмісти сьогодні знають С і C + +, і більшість знає Java. Оскільки З # побудований на міцному, зрозумілою фундаменті, то перехід від цих "фундаментальних" мов до "надбудові" відбувається без особливих зусиль з боку програмістів. Так як Андерс Хейлсберг не збирався винаходити своє "колесо", він зосередився на введенні удосконалень і нововведень.

"Дідусем" С # є мова С. Від З мову С # успадкував синтаксис, багато ключових слова й оператори. Крім того, С # побудований на поліпшеної об'єктної моделі, визначеної в C + +. Якщо ви знаєте З або C + +, то з С # ви відразу станете друзями. З # і Java пов'язані між собою дещо складніше. Як згадувалося вище, Java також є нащадком С і C + +. У нього теж спільний з ними синтаксис і подібна об'єктна модель. Подібно Java C # призначений для створення стерпного коду. Однак З # - не нащадок Java. Швидше С # і Java можна вважати двоюрідними братами, мають спільних предків, але які отримали від батьків різні набори "генів". Зв'язок мови можна зобразити у вигляді схеми, яка представлена ​​на малюнку 1 [12].

Малюнок 1 - Схема зв'язку мов програмування

Загальну зв'язок мов можна побачити в коді C # програми:

/ / Визначення найменшого множника,

/ / Що складається з однієї цифри.

using System;

class Ladder {

public static void Main () {

int num;

for (num = 2; num <12; num + +) {

if ((num% 2) == 0)

Console.WriteLine ("Найменший множник числа "+

num + "дорівнює 2.");

else if ((num% 3) == 0)

Console.WriteLine ("Найменший множник числа" +

num + "дорівнює 3.");

else if ((num% 5) == 0)

Console.WriteLine ("Найменший множник числа" +

num + "дорівнює 5.");

else if ((num% 7) == 0)

Console.WriteLine ("Найменший множник числа" +

num + "дорівнює 7.");

else

Console.WriteLine (num +

"Не ділиться на 2, 3, 5 або 7.");}}

2. ЦИКЛІЧНІ КОНСТРУКЦІЇ У МОВАХ ВИСОКОГО РІВНЯ

2.1 Алгоритмічна структура циклу

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

- Цикли з лічильником, в яких тіло циклу виконується певна кількість разів;

- Цикли з умовою, в яких тіло циклу виконується до тих пір, поки виконується умова.

Вони всі складаються з декількох етапів. Це:

- Підготовка циклу, в яку входять початкові присвоєння;

- Тіло циклу - команди повторення циклу;

- Умова - обов'язкова частина циклу "Поки".

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

Тепер розглянемо цикл "While або Поки". Цикл "While" є циклічною конструкцією з умовою, тобто це такий цикл, де тіло циклу виконується до тих пір, поки виконуються деякі умови. Його найпростіша блок схема зображена на малюнку 3.

Рисунок 2 - Схема циклу For

Рисунок 3 - Схема циклу While

Існує також порожній цикл - це цикл без тіла циклу. У більшості випадків він застосовується для створення пауз у програмах.

Найбільш часто в алгоритмах і програмах застосовуються два види циклів. Це цикли "While або поки" та "For або Для".

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

2.2 Цикли в мові С

У мові C застосовуються такі циклічні конструкції: while, for.

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

Його конструкція виглядає таким чином:

while (умова) {оператор;}

... Продовження ...

або

while (умова) {

оператори; ... }

... Продовження ...

Приклад циклу:

int x;

x = 10;

While (x> 0) {Printf ("x =% d \ n", x);

x = x - 1;} printf ("Кінець. \ n");

printf ("x стало рівне% d. \ n", x) / * друкує 0 * /

Цикл for ("для кожного") Цей цикл є просто інший записом одного з варіантів циклу while. Він служить зазвичай для виконання певної дії кілька разів, не "поки істинно умова", а "виконати N-раз". У такого циклу є "змінна циклу" або "лічильник повторень".

int i;

i = a / * початкова ініціалізація * /

while (i <b) {тело_цікла;

i + = c / * збільшення лічильника * /}

... Продовження ...

переписується у вигляді

int i; for (i = a; i <b; i + = c) тело_цікла;

Тело_цікла буде виконано для значень i

a

a + c

a + c + c

...

поки i <b

У найпростішому разі:

for (i = 1; i <= N; i + +)

Printf ("i =% d \ n", i)

i означає "номер повторення".

Такий цикл служить для повторення схожих дій кілька разів з різним значенням параметра. Оператор break ("вивалитися з циклу") Оператор break змушує перервати виконання тіла циклу і відразу перейти до продовження програм

While (условіе1) {

оператори1; if (условіе2)

break; оператори2;}

... Продовження ... і

for (i = 0; условіе1; i + +) {оператори1;

if (условіе2) break; оператори2;}

... Продовження ...

Цей оператор дозволяє організовувати додаткові точки виходу з циклу (при додаткових умовах).

Приклад:

for (i = 0; i <20; i + +) {

Printf ("i =% d \ n", i);

if (i == 7) {Printf ("break loop! \ n");

break; / * вивалитися з циклу * /}

printf ("more \ n");}

Printf ("finished, i =% d \ n", i) / * друкує 7 * /

Зокрема, з його допомогою можна організовувати нескінченний цикл: for (;;){ / * заголовок нескінченного циклу * /

оператори1;

if (условіе2)

break;

оператори2;} ... продовження ...

Тут в самому заголовку циклу не перевіряється жодних умов, такий цикл триває нескінченно. Умова продовження вважається завжди істинним. Єдиний спосіб вийти з нього - це зробити break (при якомусь умови) в тілі циклу, що і написано [2,3].

Нескінченний цикл можна також організувати за допомогою:

while (1) {

...

}

2.3 Цикли в мові С + +

Припустимо, нам потрібно обчислити суму всіх цілих чисел від 0 до 100. Для цього скористаємося оператором циклу for:

int sum = 0;

int i;

for (i = 1; i <= 100; i = i + 1)

/ / Заголовок циклу

sum = sum + i; / / тіло циклу

Оператор циклу складається з заголовка циклу і тіла циклу. Тіло циклу - це оператор, який буде повторно виконуватися (в даному випадку - збільшення значення змінної sum на величину змінної i). Заголовок - це ключове слово for, після якого в круглих дужках записані три вирази, розділені крапкою з комою. Перший вираз обчислюється один раз до початку виконання циклу. Друге - це умова циклу. Тіло циклу буде повторюватися до тих пір, поки умова циклу істинно. Третє вираз обчислюється після кожного повторення тіла циклу.

Оператор for реалізує фундаментальний принцип обчислень у програмуванні - ітерацію. Тіло циклу повторюється для різних, в даному разі послідовних, значень змінної i. Повторення іноді називається итерацией. Ми ніби проходимо по послідовності значень змінної i, виконуючи з поточним значенням одне і те ж дію, тим самим поступово обчислюючи потрібне значення. З кожною итерацией ми підходимо до нього все ближче і ближче. З іншим принципом обчислень у програмуванні - рекурсією - ми познайомимося в розділі, що описує функції. Будь-яке з трьох виразів у заголовку циклу може бути пропущено (в тому числі і всі три). Те ж саме можна записати наступним чином:

int sum = 0;

int i = 1;

for (; i <= 100;) {

sum = sum + i;

i = i + 1;}

Зауважимо, що замість одного оператора циклу ми записали кілька операторів, укладених у фігурні дужки - блок. Інший варіант:

int sum = 0;

int i = 1;

for (;;) {

if (i> 100)

break; sum = sum + i;

i = i + 1;}

В останньому прикладі ми знову зустрічаємо оператор break. Оператор break завершує виконання циклу. Ще одним допоміжним оператором при виконанні циклів служить оператор продовження continue. Оператор continue змушує пропустити залишок тіла циклу і перейти до наступної ітерації (повторення). Наприклад, якщо ми хочемо знайти суму всіх цілих чисел від 0 до 100, які не діляться на 7, можна записати це так:

int sum = 0;

for (int i = 1; i <= 100; i = i +1) {

if (i% 7 == 0)

continue; sum = sum + i;}

Ще одна корисна властивість циклу for: у першому вираженні заголовка циклу можна оголосити змінну. Ця змінна буде дійсна тільки в межах циклу.

Іншою формою оператора циклу є оператор while. Його форма наступна:

while (умова) оператор

Умова - як і в умовному операторі if - це вираз, який приймає логічне значення "істина" або "брехня". Виконання оператора повторюється до тих пір, поки значенням умови є true (істина). Умова обчислюється заново перед кожною итерацией. Підрахувати, скільки десяткових цифр потрібно для запису цілого додатного числа N, можна за допомогою наступного фрагмента:

int digits = 0;

while (N> 0) {

digits = digits + 1;

N = N / 10;}

Третьою формою оператора циклу є цикл do while. Він має форму:

do {оператори} while (умова);

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

char ch;

do {

ch = getch (); / / функція getch повертає

/ / Символ, введений з

/ / Клавіатури

} While (ch! ='*');

У операторах while і do також можна використовувати оператори break і continue. Як легко помітити, оператори циклу взаємозамінні. Оператор while відповідає оператору for:

for (; умова;) оператор

Приклад читання символів з ​​терміналу можна переписати у вигляді:

char ch;

ch = getch ();

while (ch! = '*') {

ch = getch ();}

Різні форми потрібні для зручності і наочності запису [4, 5, 6].

2.4 Цикли в мові Java

У мові програмування java, як і в інших мовах програмування, використовуються такі циклічні конструкції як while, for, do while.

Основний оператор циклу у мові Java - оператор while - виглядає так:

while (лог.Вьгр) оператор

Спочатку обчислюється логічний вираз; якщо його значення true, то виконується оператор, який утворює цикл. Розпочнемо, знову обчислюється лог.вир. і діє оператор, і так до тих пір, поки не вийде значення false. Якщо логічний вираз спочатку дорівнює false, то оператор не буде виконаний жодного разу. Попередня перевірка забезпечує безпеку виконання циклу, дозволяє уникнути переповнення, поділу на нуль і інших неприємностей. Тому оператор while є основним, а в деяких мовах і єдиним оператором циклу.

Оператор в циклі може бути і порожнім, наприклад, наступний фрагмент коду:

int i = 0;

double s = 0.0;

while ((s + = 1.0 / + + i) <10);

обчислює кількість i складань, які необхідно зробити, щоб гармонійна сума s досягла значення 10. Такий стиль характерний для мови С. Можна організувати і нескінченний цикл:

while (true) оператор

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

Якщо в цикл треба включити кілька операторів, то слід утворити блок операторів {}.

Інший оператор циклу - оператор do-while - має вигляд do оператор while (лог.Вир)

Тут спочатку виконується оператор, а потім відбувається обчислення логічного виразу логічного виразу. Цикл виконується, поки логічного виразу залишається рівним true.

У циклі do-while перевіряється умова продовження, а не закінчення циклу. Істотна відмінність між цими двома операторами циклу тільки в тому, що в циклі do-while оператор обов'язково виконається хоча б один раз. Наприклад, нехай задана якась функція f (x), що має на відрізку, [о; b] рівно один корінь. Нижче представлена ​​ця програма:

class Bisection {

static double f (double x) {

return x * x * x - 3 * x * x +3;}

/ / Або що - то інше public static void main (String!] args) {double a = 0.0, b = 1,5, с, y, eps = le-8;

do {с = 0.5 * (a + b); у = f (с);

if (Math.abs (y) <eps) break; / / Корінь знайдений. Виходимо з циклу / / Якщо на кінцях відрізка [а; с] / / функція має різні знаки: if (f (а) * у <0.0) b = с;

/ / Отже, корінь тут. Переносимо точку b в точку з

/ / В іншому випадку: else а * с;

/ / Переносимо крапку а в точку с / / Продовжуємо, поки відрізок [а; Ь] не стане малий} while (Math, abs (b - a)> = eps); System. Out. Println ("x =" + c + ", f (" + c + ") =" + y)}}

І ще один оператор циклу - оператор for - виглядає так:

for (спісок.Вир; лог.Вир; спісок.Вир2) оператор

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

Потім обчислюється логічний вираз лог.вир. Якщо воно істинне, true, то діє оператор, потім обчислюються зліва направо вираження зі списку виразів спісоквир2. Далі знову перевіряється лог.вир. Якщо воно істинне, то виконується оператор і спісоквир2 і т. д. Як тільки лог.вир стане рівним false, виконання циклу закінчується. Коротше кажучи, виконується послідовність операторів.

Будь-яка частина оператора for може бути відсутнім: цикл може бути порожнім, вирази в заголовку теж, при цьому точки з комою зберігаються. Можна задати нескінченний цикл:

for (;;) оператор

У цьому випадку в тілі циклу слід передбачити який-небудь вихід.

Хоча в операторі for закладені великі можливості, використовується він, головним чином, для перерахувань, коли їх число відомо, наприклад, фрагмент коду:

int s = 0;

for (int k = 1; k <= N; k + +) s + = k * k;

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

for (int i = 0; i <N; i + +) {

if (i '== j) continue;

s + = 1.0 / (i - j);}

Друга форма містить мітку:

continue мітка

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

Також в операторах циклу використовується оператор break для негайного виходу з циклічних конструкцій.

оператор break мітка застосовується всередині помічених операторів циклу, оператора варіанту або поміченого блоку для негайного виходу за ці оператори. Наступна схема пояснює цю конструкцію:

Ml: {/ / Зовнішній блок

М2: {/ / Вкладений блок - другий рівень

М3: {/ / Третій рівень вкладеності ... if (щось трапилося) break M2;} \ / / Якщо true, то тут нічого не виконується / / Тут теж нічого не виконується}

/ / Сюди передається управління}

Спочатку збиває з пантелику те обставина, що мітка ставиться перед блоком або оператором, а управління передається за цей блок або оператор. Тому мені здається що не варто захоплюватися оператором break з міткою [8].

2.5 Цикли в мові С #

Керовані ітерації, або цикли, в С # виконують оператори for, while, do / while і foreach. У кожному разі виповнюється простий або складений оператор, поки значення булевского вираження залишається рівним true. Виняток становить foreach, що виробляє ітерацію списку об'єктів. Цикл, for надає механізм для проходу по циклу, при якому ініціалізується деяка локальна змінна і виконується оператор в циклі до тих пір, поки задана умова істинна, причому перед переходом до наступної ітерації проводиться який-небудь простий крок. Синтаксис циклу:

for (ініціалізатор; умова; ітератор;) оператор {и}

Де ініціалізатор-вираз, що обчислюється до початку циклу (зазвичай тут ініціалізується локальна змінна, яка використовується як лічильник циклу), умова-вираз, що обчислюється перед виконанням кожної ітерації циклу (наприклад, перевірка того, що лічильник циклу менше певного значення), ітератор -це вираження, яке буде виконуватись після кожної ітерації циклу (наприклад, збільшення лічильника циклу). Цикл, for відомий також як цикл з передумовою, оскільки умова циклу обчислюється до виконання операторів циклу, а в тому випадку, якщо умова відразу виявляється рівним false, оператори циклу взагалі не будуть виконані. Перед кожною итерацией циклу умова обчислюється знову. Цикл завершується, як тільки результат обчислення умови стає false. Цикл for чудово підходить для повтору оператора або кількох операторів заздалегідь визначене число разів. Наступний приклад показує типове використання циклу for:

for (int I = 0; I <100; i + +)

{/ / Цикл буде виконаний 100 разів}

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

/ / Цей цикл проходить по рядках

for (int i = 0; i <100; i + +)

{/ / Це цикл проходить по стовпцях

for (int j = 0; j <100; j + +) {

a [i, j] = 0;}}

Розглянемо цикл while, його загальна форма має такий вигляд:

whi1е (умова) інструкція;

Тут під елементом інструкція розуміється або одиночна інструкція, або блок інструкцій. Роботою циклу управляє елемент умова, який являє собою будь-допустиме вираз типу bool. Елемент інструкція виконується до тих пір, поки умовний вираз повертає значення істина. Як тільки ця умова стає помилковим, управління передається інструкції, що слідує за цим циклом.

Цикл while працює наступним чином. Перевіряється значення змінної num. Якщо він більше нуля, лічильник mag инкрементируется, а значення num ділиться на 10. Цикл повторюється до тих пір, поки num більше нуля. Коли num стане рівним нулю, цикл завершиться, а змінна mag буде містити порядок вихідного числа. Подібно циклу for, умовний вираз перевіряється при вході в цикл while, a це означає, що тіло циклу може не виконатися жодного разу. Це властивість циклу (иллюстрируемое наступною програмою) усуває необхідність окремого тестування до початку циклу:

/ / Обчислення цілих ступенів числа 2.

using System;

class Power {

public static void Main () {

int e;

int result;

for (int i = 0; i <10;

result = 1;

e = i;

while (e> 0) {

result *= 2;

e-;

Console.WriteLine ("2 в ступеня "+ i +

"Дорівнює" + result);

Третім циклом в С # є цикл do-while. На відміну від циклів for і while, в яких умова перевіряється при вході, цикл do-while перевіряє умову при виході з циклу. Це означає, що цикл do-while завжди виконується хоча б один раз. Його загальний формат має такий вигляд:

do {інструкції;} while {умова);

Незважаючи на те, що фігурні дужки необов'язкові, якщо елемент інструкції складається тільки з однієї інструкції, вони часто використовуються для поліпшення читабельності конструкції do-while, не допускаючи тим самим плутанини з циклом while. Цикл do-while виконується до тих пір, поки залишається істинним елемент умова, що являє собою умовний вираз. У наступній програмі цикл do-while використовується для відображення у зворотному порядку цифр, складових заданий ціле число.

using System;

class DoWhileDemo {

public static void Main () {

int num;

int nextdigit;

num = 198;

Console.WriteLine ("Число:" + num);

Console.Write ("Число з зворотним порядком цифр: ");

do {nextdigit = num% 10;

Console.Write (nextdigit);

num = num / 10;

} While (num> 0); Console.WriteLine ();}}}

І ще одна циклічна конструкція foreach. Цикл foreach призначений для опитування елементів колекції. Колекція - це група об'єктів. У С # визначено кілька типів колекцій, серед яких можна виділити масив. Формат запису циклу foreach має такий вигляд:

foreach (тип імя__переменной in колекція) інструкція;

Тут елементи тип і ім'я_змінної задають тип та ім'я ітераційної змінної, яка при функціонуванні циклу fоreach буде отримувати значення елементів з колекції. Елемент колекція служить для вказівки опитуваної колекції (в даному випадку в якості колекції ми розглядаємо масив). Таким чином, елемент тип повинен збігатися (або бути сумісним) з базовим типом масиву. Тут важливо запам'ятати, що итерационную змінну стосовно до масиву можна використовувати тільки для читання. Отже, неможливо змінити вміст масиву, присвоївши ітераційної змінній нове значення.

Розглянемо простий приклад використання циклу foreach. Наведена нижче програма створює масив для зберігання цілих чисел і привласнює його елементам початкові значення. Потім вона відображає елементи масиву, попутно обчислюючи їх суму [10, 12, 13, 14].

/ / Використання циклу foreach.

using System;

class ForeachDemo {

public static void Main () {

int sum = 0; int [] nums = new int [10];

/ / Надаємо елементів масиву nums значення,

for (int i = 0; i <10; i + +) {nums [i] - i;

/ / Використовуємо цикл foreach для відображення значень

/ / Елементів масиву і їх підсумовування,

foreach (int x in nums) {

Console.WriteLine ("Значення елемента дорівнює:" + х);

sum + = х;}

Console.WriteLine ("Сума дорівнює:" + sum );}}}

3. ПРИКЛАД ПРОГРАМ ЦИКЛІЧНО КОНСТРУКЦІЙ НА МОВІ С #

3.1 Програма № 1 «цикл while»

Припустимо необхідно знайти орендну плату за приміщення за 10 років. Відомо, що орендна плата на місяць становить 1200р. і що вона збільшується на 5% на рік. Для написання програми вирішення цього завдання скористаємося циклом while:

using System;

/ / Вказує що використовується простір імен system

using System.Collections.Generic;

using System.Text; {

namespace ConsoleApplication5

{

class Program

{

/ / Об'евленіе функції main

static void Main (string [] args)

{

/ / Програма розрахунку орендної плати

/ / Рік початку і кінця орендної плати

int i = 2007, j = 2017;

/ / Орендна плата в місяць і відсотки вгод

decimal Renta = 1200, Procent = 5;

/ / Заголовок стовпців

Console.WriteLine ("Рік Оренда");

Console.WriteLine ("---- -----");

while (i <= j)

{/ / Рядок виводу орендної плати

Console.WriteLine ("{0, -8} {1,10: C2}", i, Renta);

/ / Розрахунок орендної плати за рік

Renta *= (1 + Procent / 100);

Renta = Decimal.Round (Renta, 2);

i + +;

} Console.ReadLine (). }}}

У результаті чого отримана сума орендної плати за 10 років. Результат роботи цієї програми зображено на малюнку 3

Рисунок 3 - Результат програми № 1 «цикл while»

3.2 Програма № 2 «цикл do-while»

Цикл do - while корисний у програмах, що передбачають введення даних. Нижче представлений текст програми, яка виконує декілька простих математичних дій, в кінці чого запитує у користувача про його бажання виконати інше обчислення.

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication6

{

class Program

{Static void Main (string [] args)

{String strAnswer;

double a;

do

{/ / Запит на введення першого числа числа

Console.WriteLine ("Введіть перше число"); double n1 = Convert.ToDouble (Console.ReadLine ());

/ / Запит на введення второрго числа

Console.WriteLine ("Введіть друге число"); double n2 = Convert.ToDouble (Console.ReadLine ());

/ / Запит на вибір дії

Console.WriteLine ("Оберіть дію +: /: *: -:");

string s = Convert.ToString (Console.ReadLine ());

/ / Виконання умови

/ / Якщо введене значення відповідає знаку + то виконується складання

if (s == "+")

{

a = n1 + n2;

Console.WriteLine ("Сума чисел дорівнює:" + a);

}

/ / Якщо введене значення відповідає знаку * то виконується множення

else if (s == "*")

{A = n1 * n2;

Console.WriteLine ("Твір чисел дорівнює:" + a);

} / / Якщо введене значення відповідає знаку - то виконується віднімання

if (s == "-")

{

a = n1 - n2;

Console.WriteLine ("Різниця чисел дорівнює:" + a);

}

/ / Якщо введене значення відповідає знаку / то виконується поділ

else if (s == "/")

{A = n1 / n2;

Console.WriteLine ("Приватне чисел дорівнює:" + a);

} / / Запит на новий облік

Console.Write ("Не бажає користувач виконати інше обчислення (y / n)");

strAnswer = Console.ReadLine (). Trim ();

} / / Відбувається порівняння strAnswer символом y

while (strAnswer.Length> 0 & & strAnswer.ToLower () [0] == 'y');

Console.ReadLine ();

}

}

}

Результат программии можна побачити на малюнку 4

Малюнок 4 - Результат програми № 2 «цикл do - while»

3.3 Програма № 3 «цикл for»

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

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication7

{

class Program

{

static void Main (string [] args)

{

int i, j, m, n;

/ / Запит на введення кількості рядків

Console.WriteLine ("введіть n");

n = Convert.ToInt32 (Console.ReadLine ());

/ / Запит на кількість стовпців

Console.WriteLine ("введіть m");

m = Convert.ToInt32 (Console.ReadLine ());

/ / Ініціалізація масивів

int [,] a = new int [n, m];

int [,] b = new int [n, m];

int [,] c = new int [n, m];

int [] d = new int [n];

/ / Заповнення масивів випадковими числами

Random r = new Random ();

for (i = 0; i <n; i + +)

{

for (j = 0; j <m; j + +)

{

a [i, j] = r.Next (0, 10);

b [i, j] = r.Next (0, 10);

}

}

Console.WriteLine ("---------------- матриця a ------------");

for (i = 0; i <n; i + +)

{

for (j = 0; j <m; j + +)

{

/ / Вивід матриці а

Console.Write (a [i, j] + "|");}

Console.WriteLine ();

}

Console.WriteLine ("--------------- матриця b -------------");

for (i = 0; i <n; i + +)

{

for (j = 0; j <m; j + +)

{

/ / Вивід матриці b

Console.Write (b [i, j] + "|");}

Console.WriteLine ();

}

Console.WriteLine ("------------ c = (сума а і b )-----------");

for (i = 0; i <n; i + +)

{

for (j = 0; j <m; j + +)

{/ / Рахунок суми і висновок матриці

c [i, j] = a [i, j] + b [i, j];

Console.Write (c [i, j] + "|");}

Console.WriteLine ();}

Console.ReadLine ();}}}

Результат цієї програми зображено на малюнку 5

Малюнок 5 - Результат виконання програми № 3 «цикл for»

3.4 Програма № 4 «цикл foreach»

Припустимо необхідно організувати пошук числа в масиві. Для цього можна використовувати циклічну конструкцію foreach. Нижче наведено текст програми з такою циклом:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication10

{Class Search

{Public static void Main (string [] args)

{

int [] n = new int [10];

int val;

bool found = false;

/ / Присвоюємо елементам масиву n значення

for (int i = 0; i <10; i + +)

n [i] = i;

Console.WriteLine ("Введіть значення");

val = Convert.ToInt32 (Console.ReadLine ());

/ / Використовуємо цикл foreach для пошуку в масиві n

/ / Заданого значення

foreach (int x in n)

{

if (x == val)

{

found = true;

break;}}

if (found)

Console.WriteLine ("Значення знайдено!");

else

Console.WriteLine ("Значення незнайдене!");

Console.ReadLine ();}}}

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

Малюнок 6 - Результат роботи програми № 4 «цикл foreach»

ВИСНОВОК

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

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

Програма немислима без циклічних конструкцій, так як всі програми засновані на повторенні.

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

1. Лахатін, А.С. Мови програмування. Учеб. посібник / А.С. Лахатін, Л.Ю. Іскакова. - Єкатеринбург, 1998. - 548с.: Іл.

2. Богатирьов, А. Мова програмування С [Електронний ресурс] / А. Богатирьов .- електр. дан. - Режим доступу: http://www.refby.com. - Загл. з екрану.

3. Уейт, М. Мова С. Керівництво для початківців. / М. Уейт, С. Прага, Д. Мартін. - М.: Світ, 1995. - 521с.: Іл.

4. Фрідман, А.Л. Мова програмування С + + / А. Л. Фрідман. - М.: Біном, 2006. - 523с.: Іл.

5. Патрикеєв, Ю.М. Об'єктно-орієнтоване програмування на Broland C + + [Електронний ресурс] / Ю. М. Патрикеєв. - Електрон. Дан. - Режим доступу: http://www.intuit.ru/department/pl/cpp/lit.html. - Загл. з екрану.

6. Тарасов, І. Thinking in C + + / І. Тарасов .- М.: 2004 .- 496с.: Іл.

7. Гагин, А. Історія JAVA / А. Гагин .- М, 1998.-257с.: Іл.

8. Таранов, А. Java як центр архіпелагу [Електронний ресурс] / А. Таранов, В. Цішевскій. - Електрон. дан .- Режим доступу: http:// www. fortunecity.com/skyscraper/mmx/490/index.html. - Загл. з екрану.

9. Коропів, С. Алгоритм [Електронний ресурс] / С. Коропів. - Електрон. дан. - Режим доступу: ftp://labrea.stanford.edu/pub/cweb/. - Загл. з екрану.

10. Робінсон, С. C # для професіоналів: T.1. / С. Робінсон, О. Корнес, Д. Глін, Б. Харвей та ін; пер. з англ. С. Кортигін та О. Труфанов. - М. ЛОРІ. - М.: 2005. - 999с.

11. Петцольд, Ч. Програмування в тональності C #. - М.: изд-во торговий дім «Російська редакція», 2004. - 512с.: Іл.

12. Шілдт, Г. Повний довідник по C #. / Г. Шілдт; пер. з англ. Н.М. Ручко. - М.: Изд. будинок Вільямс, 2004. - 752с.: Іл.

13. Бішоп, Дж. C # у короткому викладі / Дж.Бішоп, Н. Хорспул; пер.с.англ. - М.: Біном, 2005. - 472с.: Іл.

14. Троелсен, Е. C # і платформа. NET. Бібліотека програміста / Е. Троелсен. - Пітер.: 2004. - 796с.: Іл.

Посилання (links):
  • http://www.refby.com/
  • http://www.intuit.ru/department/pl/cpp/lit.html.% 20 -
  • Додати в блог або на сайт

    Цей текст може містити помилки.

    Програмування, комп'ютери, інформатика і кібернетика | Курсова
    176.1кб. | скачати


    Схожі роботи:
    Мова програмування високого рівня С
    Біосинтез 2Н-міченого інозину високого рівня дейтерірованності
    Розробка програмного продукту на мові високого рівня
    Біосинтез 2Н міченого інозину високого рівня дейтерірованності
    Програмування універсальних мікропроцесорів на мовах Асемблер
    Розгалужені циклічні процеси
    Циклічні коливання і кризи в економіці
    Циклічні коливання і кризи в економіці
    Основні поняття математичного програмування Побудова моделі задачі лінійного програмування
    © Усі права захищені
    написати до нас