Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Структурное программирование. Примеры

 

5.1. Таблица значений функции

5.1.1. Цикл while

 

// Пример 7.2.9

//Вывод таблицы значений функции циклом while

#include <iostream>

#include <math.h>

using namespace std;

double Fx(double x);

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

double a,b,h,x;

cout << "Введите диапазон a,b через пробел >";

cin >> a >> b;

cout << "Введите шаг изменения h > ";

cin >> h;

cout << "Таблица значений" << endl;

cout << "------------------------" << endl;

cout << " X : Y " << endl;

cout << "------------------------" << endl;

x=a; // начальное значение параметра цикла

while ( x<=b ) // условие повторения цикла

{

cout << " " << x << "\t\t"<< Fx(x) << endl;

x+=h; // изменение параметра цикла

}

cin.get();cin.get();

}

 

double Fx(double x) {

double y;

//y=x*x; //вид вычисляемой функции

y=sqrt(x); //вид вычисляемой функции

return y;

}

 

5.1.2. Цикл for

 

// Пример 7.2.10

//Вывод таблицы значений функции циклом for

#include <iostream>

#include <math.h>

using namespace std;

double Fx(double x);

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

double a,b,h,x;

cout << "Введите диапазон a,b через пробел >";

cin >> a >> b;

cout << "Введите шаг изменения h > ";

cin >> h;

cout << "Таблица значений" << endl;

cout << "------------------------" << endl;

cout << " X : Y " << endl;

cout << "------------------------" << endl;

for (x=a; x<=b; x+=h)

cout << " " << x << "\t\t"<< Fx(x) << endl;

// for (x=a; x<=b; cout << " " << x << "\t\t"<< Fx(x) << endl,x+=h);

cin.get();cin.get();

}

double Fx(double x) {

double y;

//y=x*x; //вид вычисляемой функции

y=sqrt(x); //вид вычисляемой функции

return y;

}

 

5.1.3. Операторы while, do while, for, switch

 

// Пример 7.2.11

// Повторение выполнения приложения при помощи цикла while

// Повторение ввода при помощи цикла do-while

// Вывод таблицы значений функции циклом for

// Выбор функции оператором switch

#include <iostream>



#include <math.h>

using namespace std;

enum TFunc {Finish, Kvadrat, Kub, Koren, Obratnoe, Sinus};

double Fx(double, TFunc);

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

double a,b,h,x;

int v;

// цикл выполнения приложения

while (true) {

// выбор типа функции - личная функция

do

{

cout << "Введите число\n1-квадрат, 2-куб, \
3-кв. корень, 4-обратное число, 5-синус, 0-выход >";

cin >> v;

} while (v<Finish || v>Sinus);

 

// завершение работы приложения

if (v==Finish) {

cout << "Приложение завершено! " ;

cin.get();

break;

}

// ввод границ отрезка - личная функция

do {

cout << "Введите диапазон a,b через пробел >";

cin >> a >> b;

} while (a>=b);

 

// ввод шага изменения - личная функция

do {

cout << " Введите шаг изменения h (0.1-2.0) > ";

cin >> h;

} while (h<0.1 || h>2);

 

// печать шапки таблицы

cout << "Таблица значений" << endl;

cout << "------------------------" << endl;

cout << " X : Y " << endl;

cout << "------------------------" << endl;

 

// вывод таблицы значений функции

for (x=a; x<=b; x+=h) {

cout << " " << x << "\t\t"<< Fx(x,(TFunc)v) << endl;

}

 

cin.get();

}

}

 

// функция для вычисления текущего значения х

double Fx(double x, TFunc v) {

double y;

switch (v) {

case 1 : y=x*x; break;

case 2 : y=x*x*x; break;

case 3 : y=sqrt(x); break;

case 4 : y=1/x; break;

case 5 : y=sin(x); break;

}

return y;

}

 

5.2. Числа Фибоначчи ( интересный for )

 

// Пример 7.2.12

// Нахождение N-го числа Фибоначчи итерацией

#include <iostream>

using namespace std;

//typedef unsigned long int ULONG;

typedef long double ULONG;

ULONG fib(ULONG position);

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

ULONG answer,position;

cout << "Номер числа в последовательности?:";

cin >> position;

cout << "\n";

answer=fib(position);

cout<< "Значение числа Фибоначчи = "<< answer;

cin.get();cin.get();

}

ULONG fib(ULONG n) {

ULONG minusTwo=1, minusOne=1, answer=2;

if (n<3)

return 1;

for (n-=3; n; n--) {// n=0 - ложь - условие завершения цикла

minusTwo=minusOne;

minusOne=answer;

answer=minusOne+minusTwo;

}

return answer;

}

5.3. Программа, работающая под управлением меню

 

// Пример 7.2.13

//Использование бесконечного цикла и выбора в меню

#include <iostream>

using namespace std;

typedef unsigned short int USHORT;

USHORT menu();

void DoTaskOne(); // Заглушки будущих функций - Stub

void DoTaskMany(USHORT);

void DoSomeThing();

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

bool exit=false; // флаг для завершения цикла

while(true) { // бесконечный цикл

USHORT choice=menu();

switch (choice) {

case (1) : DoTaskOne(); break;

case (2) : DoTaskMany(2); break;

case (3) : DoTaskMany(3); break;

case (4) : break;

case (5) : DoSomeThing(); break;

case (6) : DoTaskMany(4); break;

case (7) : exit=true; break;

default: cout << " Выберите снова\n"; cin.get(); break;

}

if (exit==true) break;

}

cin.get();

}

USHORT menu(){

USHORT choice;

cout << "**** Меню ****\n\n";

cout << "(1) Выбор 1.\n";

cout << "(2) Выбор 2.\n";

cout << "(3) Выбор 3.\n";

cout << "(4) Обновление меню.\n";

cout << "(5) Выбор DoSomeThing.\n";

cout << "(6) Выбор 4.\n\n";

cout << "(7) Выход.\n\n";

cout << ": ";

cin >> choice;

return choice;

}

void DoTaskOne() {

cout << "Задача 1! Для продолжения нажмите <Enter>\n";

cin.get(); cin.get();

}

void DoSomeThing() {

cout << "DoSomeThing! Для продолжения нажмите <Enter>\n";

cin.get(); cin.get();

}

void DoTaskMany(USHORT which) {

if (which ==2) cout << "Задача 2!\n";

else if (which == 3) cout << "Задача 3!\n";

else cout << "Задача 4!\n";

cout << " Для продолжения нажмите <Enter>\n";

cin.get(); cin.get();

}

5.4. Ввод числа из нужного диапазона

// Пример 7.2.14

// Повторение при вводе чисел с клавиатуры

#include <iostream>

using namespace std;

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int age, min=20,max=30;

// Ввод возраста от min до max

do {

cout << "Введите возраст (" << min << "-" << max << ") ? " << endl;

cin >> age;

} while(age < min || age > max);

cout << "Возраст: " << age <<endl;

cin.get();

// Ввод возраста < min или > max

do {

cout << "Возраст <" << min << " или > " << max << " ? " << endl;

cin >> age;

} while(age >= min && age <= max);

cout << "Возраст : " << age <<endl;

cin.get();cin.get();

}

 

// Пример 7.2.15

// Ввод чисeл нужного диапазона

#include <iostream>

#include <ctype.h>

#include <string>

#include <conio.h>

using namespace std;

int GetNumber(int min, int max);

string FormString();

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int MyInt, Age;

MyInt=GetNumber(1,10);

Age=GetNumber(20,40);

cout << "Введены числа : ";

cout << MyInt << '\t' << Age << endl;

cin.get(); cin.get();

}

int GetNumber(int min, int max) {

string str;

int value;

do {

cout << "Введите целое от " << min << " до " << max << endl;

str=FormString();

value=atoi(str.c_str()); // преобразование строки С++ в целое

} while (value < min || value > max);

cout << "Введено число: " << value << endl;

return value;

}

string FormString() {

int ENTER=13, ch;

string str;

while (1) {

ch=_getch();

if (ch==ENTER) {

cout << endl; break;

}

if (isdigit(ch)) {

str+=(char)ch;

cout << (char)ch;

}

}

return str;

}

Практические задания

1. Каким будет значение х после завершения цикла for?
for ( int x=0; x < 100; x++);

2. Напишите вложенный цикл for, печатающий картинку из нулей 10х10.

3. Напишите циклы for, while, do…while для печати чисел от 100 до 200 через 2.

4. Напишите программу для ввода числа из заданного диапазона с клавиатуры. В случае выхода за границу диапазона повторите ввод числа.

5. Напишите программу вычисления суммы и произведения чисел, вводимых с клавиатуры :

a. количество чисел предварительно вводится с клавиатуры;

b. вычисления прекращаются по запросу программы.

6. Что неверно в следующем коде?
int counter=0;
while (counter < 10) {
cout << “counter: ” << counter;
}

7. Что неверно в следующем коде?
for (int counter=0; counter < 10; conter++) ;
cout << “counter: ” << counter;

8. Что неверно в следующем коде?
int counter=100;
while (counter < 10) {
cout << “counter: ” << counter; counter--;
}

9. *** Напишите циклическую программу для ввода параметров объекта (Cat, Pencil, Worker, Student…) с клавиатуры и распечатки их на экран. Использовать классы из предыдущей темы.

10. Напишите 3 варианта switch для печати названий дней недели, используя различные типы его параметра : целое, символ и перечисление.

11. Напишите программу для вывода характеристики землетрясения по шкале Рихтера, используя следующую таблицу решений

Баллы Характеристика
n < 5 Легкое, нет разрушений
5 <= n < 5.5 Среднее, небольшие разрушения
5.5 <= n < 6.5 Серьезное, разрушения и повреждения стен
6.5 <= n < 7.5 Бедствие, многие дома и здания повреждены
n > 7.5 Катастрофа, большинство домов и зданий разрушены

 

12. Напишите программу для определения срока службы электрической лампочки на основе ее мощности, используя следующую таблицу решений.

Мощность, Вт Срок службы, ч
40, 60
75, 100
150, 200

 

13. Что недопустимо, а что логически неправильно в следующем коде?
double color=1;
switch (color) {
case 1 : cout << “Black\n”;
case 2 : cout << “White\n”;
default : cout << “Other\n”;
}

Контрольные вопросы

1. Почему отказались от циклов с меткой и оператором goto?

2. Как работает цикл while?

3. Может ли тело цикла while не выполниться ни разу?

4. Может цикл while выполняться бесконечно? Как избежать этого?

5. Может ли условие в цикле while быть сложным?

6. Для чего предназначены операторы break и continue?

7. Какой оператор обязательно должен быть внутри цикла while (1) ?

8. В каких случаях пользуются циклом do…while?

9. Какие три этапа включает в себя цикл for? Как он работает?

10. Можно ли в цикле for инициализировать и изменять несколько переменных?

11. Можно ли пропускать параметры в цикле for?

12. Может ли цикл for быть пустым?

13. Можно ли внутрь одного цикла вкладывать другой? Есть ли на это ограничения?

14. Какого типа должен быть параметр оператора switch?

15. Для чего в операторе switch используется оператор break?

16. Что произойдет, если случай оператора switch не будет завершен break?

17. Почему рекомендуется внутрь switch вставить случай default?

18. Есть ли ограничение на количество случаев в операторе switch?

19. Как сделать выбор между конструкциями if/else и switch?

Заключение

В данном конспекте лекций были освещены теоретические и практические приемы основ программирования на языке С++.

Цель пособия - дать правильное представление студентам о возможностях языка С++ и подготовить их к дальнейшему его изучению, т.е. к освоению объектно-ориентированного программирования (ООП).

ООП - методика разработки программ, состоящих из объектов. Основой для создания объектов являются классы. ООП позволило реализовать, внедрить в жизнь и постоянно дорабатывать огромные по размерам программные проекты. Разработать и сопровождать такие проекты по силам только большим группам программистов. Методами структурного программирования, применяемыми ранее, эти проекты реализовать было просто невозможно.

Вторая часть конспекта лекций будет посвящена изучению объектно-ориентированных возможностей языка С++, механизмам использования свободной памяти, концепциям хранения и обработки большого количества объектов в оперативной и внешней памяти.

Желаю всем успехов в освоении и использовании языка С++. Его знание позволит, в случае необходимости, достаточно быстро освоить языки программирования Java и C#, которые являются потомками C++.

 


Литература

1. Джесс Либерти. Освой самостоятельно С++. 3 и-е. М.: Вильямс. – 2000.

2. Г. Шилдт. Полный справочник по С++. 4 и-е. – М.: Вильямс. – 2003.

3. Т.А. Павловская. С/С++. Программирование на языке высокого уровня. ПИТЕР-2002

4. С.В. Глушаков. Практикум по С++. ФОЛИО – 2006

5. Х. Дейтел, П. Дейтел. Как программировать на С++.

6. Страуструп Б. Язык программирования С++. БИНОМ, 1999

7. Керниган Б., Ритчи Д., Фьюэр А. Язык программирования Си. - М.: Финансы и статистика , 2000.

8. Прата С. Язык программирования С. Лекции и упражнения : пер. с англ. / С. Прата. – 5-е изд. – М. : Вильямс, 2006. – 960 с.

9. Ю.Л. Кетков. Введение в языки программирования C и C++
http://www.intuit.ru/department/pl/ccpp/

10. А.Л. Фридман. Язык программирования C++
http://www.intuit.ru/department/pl/cpp/


Содержание

Введение.. 3

Тема 1: Введение в С++. 5

Лекция 1.1. Эволюция языка С++. Цикл разработки приложения. 5

Лекция 1.2. Работа в среде Visual Studio. 13

Практические задания. 21

Контрольные вопросы.. 22

Тема 2: Составные части программы на С++. 24

Лекция 2.1. Структура простой программы.. 24

Лекция 2.2. Использование функций. 36

Практические задания. 48

Контрольные вопросы.. 49

Тема 3: Переменные и константы... 51

Лекция 3.1. Встроенные типы данных. 51

Лекция 3.2. Константы, перечисления, синонимы типа. 61

Практические задания. 75

Контрольные вопросы.. 76

Тема 4: Операции и выражения.. 78

Лекция 4.1. Математические операторы и выражения. 78

Лекция 4.2. Логические операторы и выражения. 93

Практические задания. 105

Контрольные вопросы.. 106

Тема 5: Функции. 108

Лекция 5.1. Личные и встроенные функции. 108

Лекция 5.2. Параметры. Значения по умолчанию. Перегрузка. Рекурсия. 130

Практические задания. 147

Контрольные вопросы.. 149

Тема 6: Структуры. Классы и объекты. 150

Лекция 6.1. Структуры в языке С. 150

Лекция 6.2. Классы с открытыми данными. 163

Лекция 6.3. Конструкторы и деструктор. Cкрытие данных. 185

Лекция 6.4. Введение в библиотеки классов. 205

Практические задания. 213

Контрольные вопросы.. 214

Тема 7: Циклы, выбор вариантов. 216

Лекция 7.1. Циклы. 216

Лекция 7.2. Выбор из вариантов. 228

Практические задания. 246

Контрольные вопросы.. 248

Заключение.. 249

Литература.. 250

 

<== предыдущая лекция | следующая лекция ==>
| Структурное программирование. Примеры

Дата добавления: 2014-01-03; Просмотров: 360; Нарушение авторских прав?;


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



ПОИСК ПО САЙТУ:


Читайте также:



studopedia.su - Студопедия (2013 - 2017) год. Не является автором материалов, а предоставляет студентам возможность бесплатного обучения и использования! Последнее добавление ‚аш ip: 54.224.255.158
Генерация страницы за: 0.15 сек.