Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие2013_09_28.doc
Скачиваний:
24
Добавлен:
20.05.2015
Размер:
2.72 Mб
Скачать

Оператор for

Оператор for— это, пожалуй, наиболее популярный способ организации цикла. Он имеет следующий формат:

for(выражение_1; условие_ 2; выражение_3)

тело_цикла;

Традиционно назначение заданных в заголовке for() выражений следующее. Выражение_1 обычно используется для установления началь­но­го зна­че­ния переменных, управляющих циклом. Условие_2 — это опре­деляющее условие, при котором тело цикла будет выпол­нять­ся. Выражение_3 определяет изменение переменных, управ­­ляю­щих циклом, после каждого выполнения тела цикла.

Схема выполнения оператора for:

1. Вычисляется выражение_1.

2. Вычисляется условие_2.

3. Если значения условие_2 отлично от нуля (true), выполня­ет­ся тело цикла, вычисляется выраже­ние_3 и осуществляется пере­ход к пункту 2; если условие_2 равно нулю (false), то управление пе­ре­дается на оператор, следующий за операторомfor.

Оператор цикла вида

for (выражение_1; условие_2; выражение_3)

тело_цикла ;

может быть заменен оператором whileследующим образом:

выражение_1;

while (условие_2)

{ тело_цикла

выражение_3;

}

Существенно то, что проверка условия всегда выполняется в нача­ле цикла. Это значит, что тело цикла может ни разу не выпол­нить­ся, если условие выполнения сразу будет ложным.

Пример: вычислить квадраты чисел от 1 до 9.

int main()

{ int i,b;

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

{ b=i*i;

cout<<b<<endl;

}

return 0;

}

Одим из вариантов использования оператора forявляется бес­ко­нечный цикл. Для организа­ции такого цикла можно исполь­зо­вать пустое условное выражение, а для выхода из цикла обычно используют дополнительное условие и операторbreak.

Пример:

for (;;)

{ ...

... break;

...

}

Так как согласно синтаксису языка С/C++ оператор может быть пустым, тело оператора for также может быть пустым. Такая форма оператора может быть использована для организации поиска.

Пример: найти номер первого элемента массива t, значение которого больше 10.

for (i=0; t[i]<=10 ; i++) ;

В данном примере переменная цикла i принимает искомое значение.

Цикл с постусловием do -while

Оператор цикла do- whileназывается оператором цикла с постус­ло­ви­ем и используется в тех случаях, когда необхо­ди­мо выполнитьтело цикла хотя бы один раз. Формат опера­тора имеет следующий вид:

do тело_цикла while (условие);

Схема выполнения оператора do - while:

1. Выполняется тело_цикла.

2. Вычисляется значение условия.

3. Если условие ложно, то выполнение оператора do - whileзаканчи­ва­ется и выполняется следую­щий по порядку опе­ра­тор. Если усло­виеистинно, то выполнение оператора про­дол­жается с пункта 1.

Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break.

Задача 18. Выдать на экран таблицу простых чисел, вычисляемых по известному трехчлену Эйлера: y = x2x + 41. Аргумент x изменяется от 1 до 40 с шагом 1.

Таблица состоит из двух столбцов: в первом содержатся значения аргумента x, а во втором – значения функции y. В программе реализована постраничная печать таблицы с приостановкой вывода на экран после каждых 23 строк.

#include <stdio.h>

#include <conio.h>

int main()

{

int x, y, line=1;

printf ("\t ТАБЛИЦА ПРОСТЫХ ЧИСЕЛ\n\n");

for(x=1; x<41; x++)

{

y = x*x - x + 41;

printf("\t %d \t\t %d\n",x, y);

line++;

// постраничная печать

if(line == 23)

{

line=1;

printf("\nДля продолжения -Enter");

getch();

}

}

getch( );return 0;

}

Задача 19. Составить программу вычисления приближенного значения числа , используя следующее бесконечное произведение:

(формула Валлиса, 1656г).

Очевидно, что в знаменателе стоят квадраты последовательных нечётных чисел, начиная с 3, а числитель каждого сомножителя на единицу меньше знаменателя. Вычисления следует прекратить, когда очередной сомножитель будет отличаться от 1 не более, чем на заданное число ε = 1.0E-7, т.е.

, k=1, 2, …

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <math.h>

int main()

{

double eps=1.0e-7, t, z, P=1, k=1;

do

{

z = (2*k + 1)*(2*k + 1);

t = z - 1;

P = P*t/z;

k++;

}

while(fabs(1 - t/z) >= eps);

printf("Приближенно pi = %lf\n ", P*4);

getch(); return 0;

}

Задача 20. Создание простейшего меню.

#include <stdio.h>

#include <iostream.h>

#include <conio.h>

intmain ()

{

int choice;

do

{

clrscr();

cout<<"1) ВВОД ДАННЫХ "<<endl;

cout<<"2) ОБРАБОТКА "<<endl;

cout<<"3) ВЫВОД ДАННЫХ "<<endl;

cout<<"4) ВЫХОД "<<endl;

cout<<"\n\n ВАШ ВЫБОР ==> "; cin>>choice;

switch(choice)

{

case 1: cout<<"Вызов процедуры ВВОД ДАННЫХ "<<endl; break;

case2: cout<<"Вызов процедуры ОБРАБОТКА ДАННЫХ "<<endl;break;

case3: cout<<"Вызов процедуры ВЫВОД ДАННЫХ "<<endl;break;

case 4: cout<<"КОНЕЦ РАБОТЫ "<<endl;break;

default: cout<<"НЕТ ВЫБОРА... "<<endl;

}

getch();

}

while(choice !=4);

return 0;

}

Задача 21. Программа реализует модель кассового аппарата. Пользователь вводит число покупок и затем последовательно – стоимость каждой из них, а программа накапливает суммарную стоимость всех покупок выводит с помощью функцииprintf() на экран соответствующее сообщение .

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

int main()

{

float s=0, p;

int k=1, m;

cout<<"Сколько покупок? ";

cin>>m;

while(k<=m)

{

cout<<"Стоимость "<<k<<"-й покупки = ";

cin>>p;

s+=p;

k++;

}

printf("С Вас причитается %.2fгрн.",s);

getch();return0;

}

Задача 22. Решается та же задача, что и в предыдущем примере, но количество покупок заранее не известно, что вполне логично (вспомните, когда в супермаркете Вы оказываетесь перед кассой с полной корзиной продуктов). Кассир по очереди вводит стоимость каждой покупки, а когда покупки исчерпались, он нажимает клавишу с цифрой 0, а программа выводит на экран сообщение о количестве и стоимости всех покупок.

// Программа отлажена в Visual Studio 2008

#include "stdafx.h"

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

int main()

{

// Устанавливаем локализацию для выходного потока

wcout.imbue( locale( "rus_rus.866" ) );

// Выводим строку на русском !

wcout<< L" Для завершения работы нажми цифру 0\n\n";

float s=0, p; int k=1;

while(1)

{

wcout<<L"Стоимость "<<k<<L"-й покупки: ";

cin>>p;

if(p==0)

break;

s+=p;

k++;

}

wcout<<L"Вы приобрели "<<k-1<<L" покупок"<<"\n";

wcout<<L"на сумму "<<s <<L"грн.";

getch(); return 0;

}

Задача 23. Программа строит на экране простой график затухающих колебаний, определяемый функцией

на отрезке [0, 2.16] c шагом d=0.09.

Ось OX графика направлена вертикально вниз, а ось OY – по горизонтали вправо (подразумевается). В каждой строке выводится “кусочек” оси OX (символ | в 40-й колонке экрана) и звездочка – в позиции, соответствующей очередному значению функции. Обратите внимание на формирование переменного формата вывода символа * в функции printf().

// Программа отлажена в Visual Studio 2005 (20.04.2008)

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <math.h>

const int PI = 3.14159;

int main()

{

double x,y,d; int T;

d=0.09; x=0;

while(x <= 2.16)

{

y=exp(-x)*sin(2*PI*x);

T=(int)18*y + 40;

if(y >= 0)

{

printf("%*c",40,'|');

printf("%*c\n",T-40,'*');

}

else

{

printf("%*c",T,'*');

printf("%*c\n",40-T,'|');

}

x=x+d;

}

getch(); return 0;

}

Построенный программой график имеет вид, показанный ниже.

Задача 24. При таможенном досмотре с пассажира взыскивают госпошлину, которая составляет 5% от общей стоимости провозимых им товаров, если последняя превышает 1400 долларов. Составить программу, которая последовательно вводит по запросу стоимость провозимых товаров для каждого пассажира и вычисляет сумму пошлины.

// Программа отлажена в Visual Studio 2008 (2.05.2008)

#include <conio.h>

#include <iostream>

using namespace std;

const int LEN=80;

int main()

{

float s,n; char ch;

char fio[LEN];

// Устанавливаем локализацию для выходного потока

wcout.imbue( locale( "rus_rus.866" ) );

// Выводим строку на русском !

do

{

wcout<< L"\nВаша фамилия? "; cin>>fio;

wcout<<fio<<L", cтоимость ваших товаров?: ";

cin>>s;

if (s<=0) break;

cout<<fio;

if (s<=1400)

wcout<<L", проходите. Не задерживайте очередь";

else

wcout<<L", платите в кассу $"<<s*0.05;

wcout<<L"\nЕсть еще пассажиры(y/n)? ";

ch=getch();

}

while( ch=='y' || ch == 'Y');

getch(); return 0;

}

Задача 25. Программа выводит на экран кодовую таблицу ASCII в 4 колонки, с использованием постраничного вывода на экран.

#include <stdio.h>

#include<conio.h>

int main()

{

int line=1; unsigned char ch;

clrscr();

for(ch=32; ch<255; ch++)

{

printf("%c\t %c - %d",(ch%4 == 0)?'\n ':' ',ch,ch);

line++;

// постраничная печать

if(line/4 == 23)

{

line = 1;

printf("\nДля продолжения -Enter");

getch(); clrscr();

}

}

getch( ); return0;

}

Задача 26. Программа на чёрном экране пользователя изображает падение букв английского алфавита (с указанием рядом их кода ASCII) по центру экрана на строку, составленную из символов «звёздочка». Причём, на первой строке появляется буква А, при переходе на вторую строку она превращается в В, затем — в С и так далее. Для позиционирования курсора в заданную точку экрана (x,y) в средеBorlandC++Builderиспользована библиотечная функцияgotoxy(x,y).

// Программа отлажена в Borland C++ Builder 6

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

int main()

{

clrscr();

int line=1, symbol=65;

while(line<=26)

{

gotoxy(1,26);

cout<<"\t\t\t*****************************************";

gotoxy(39,line);

printf("%c=%d",symbol,symbol);

Sleep(500);

clrscr();

line++; symbol++;

}

getch(); return 0;

}

Задача 27. Вывести на экран строку из звёздочек, над которой слева направо поочерёдно появляются символы с кодами 001 и 002 кодовой таблицы ASCII, причём это движение сопровождается системным звуком с тоном, меняющимся от 130 гц вверх с шагом 16 гц.

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

#include <dos.h>

int main()

{

int k = 1; char s ='\001', v ='\002';

while(k<=78)

{

clrscr();

gotoxy(1,24);

cout<<"\t\t\t*********************************************";

gotoxy(k,12);

printf("%c",(k%2==0)? s:v);

Beep(130+((k++)-1)*16, 400);

}

getch(); return 0;

}

Задача 28. Символ «*» движется по параболеy = –x2. Движение начинается в левом нижнем углу экрана, а заканчивается в правом нижнем.

// Программа отлажена в Borland C++ Builder 6

#include <conio.h>

#include <iostream.h>

#include <dos.h>

intmain()

{

int x,y; float a = -39;

clrscr();

while(a<39)

{ y=a*a/64;

x=a+40;

gotoxy(x,y);

cout<<"*";

Sleep(100);

a++;

}

getch(); return 0;

}

Задача 29. По преданию, индийский правитель Шерам, большой ценитель шахмат, решил наградить изобретателя шахмат Сета. Тот попросил выдать награду зерном: за первую клетку шахматной доски одно зерно, за вторую – два и т.д., точнее, за каждую следующую клетку – в два раза больше, чем за предыдущую. К удивлению великого раджи, в стране не хватило зерна, чтобы выполнить “скромное ” пожелание изобретателя шахмат. Далее приведена программа, последовательно подсчитывающая количество зерен за каждую клетку и их общее количество за все 64 клетки. Попутно подсчитывается потребное количество зерна в тоннах, исходя из оценки, что 1 кг зерна содержит примерно 4000 зерен.

// Программа отлажена в Visual Studio 2008

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

// Раджа и мудрец

int main ()

{

int k=1; double a=1,t,s=0L;

t=a/4000000;

while(k<=64)

{

printf("%20d %30.0lf %20.3lf\n",k,a,t);

if(k%22==0)

{

printf("Press Enter...\n\n");

getch();

}

a=a*2; k=k+1; t=a/4000000;

s=s+t;

}

printf("\n\t TOTAL \t %d \t\t %.3lf",k-1,s);

getch();return 0;

}

Задача 30. Программа позволяет угадать возраст Вашего дедушки, который может находиться в интервале от 45 до 109 лет. В программе используются две библиотечные функции: функция random(num), где num имеет тип int, возвращает случайное целое значение из диапазона от 0 до (num1); функция randomize инициализирует генератор случайных чисел.

// Программа отлажена в Borland C++ Builder 6 (май 2008)

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#include <stdlib.h>

intmain()

{

int high,mid,low,k=1,year,found;

char ch;

do

{ randomize();

found = 0;

low = random(10)+45;

high = random(30)+80;

cout<<"Хотите, я угадаю, сколько лет "<<endl;

cout<<"(от "<<low<<" до "<<high<<" ) Вашему дедушке(y/n)"<<endl;

k=1; getch();

while(low<=high && !found)

{

mid = (low+high)/2;

cout<<"Вашему дедушке "<<mid<<" лет(y/n)?";

cin>>ch;

if(ch == 'y' || ch == 'Y')

{

cout<<"\n Ура! Я угадал за "<<k<<" попыток";

found = 1;

}

else

{

m2: cout<<"Больше(>) или меньше(<)? ";

cin>>(ch);

if(ch == '>')

low = mid+1;

else

if (ch=='<')

high=mid-1;

else

{

cout<<"Нажмите Shift+знак(< или >)"<<'\n';

goto m2;

}

k++;

}

}

cout<<"\n\n еще(y/n)? ";

ch=getch();

}

while(ch=='y' || ch=='Y');

return0;

}

Задача 31. Разменять заданную сумму денег минимальным количеством купюр, если в обиходе имеются купюры достоинством в 100, 50, 20, 10, 5, 2 и 1 грн.

// Программа отлажена в Visual Studio 2008

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

int main()

{ int d; bool p = false;

cout<<" \nВведите сумму для размена ";

cin>>d;

while(!p)

if (d>=100)

{

d=d-100;

cout<<' '<<100;

}

else if( d>=50)

{

d=d-50;

cout<<' '<<50;

}

else if (d>=20)

{

d=d-20;

cout<<' '<<20;

}

else if(d>=10)

{

d=d-10;

cout<<' '<<10;

}

else if (d>=5)

{

d=d-5;

cout<<' '<<5;

}

else if (d>=2)

{

d=d-2;

cout<<' '<<2;

}

else if (d>=1)

{

d=d-1;

cout<<' '<<1;

}

else p=true;

getch(); return 0;

}

Задача 32. Пусть требуется открыть в банке R-процентный депозитный счет на на сумму P долларов. Предполагая, что вся прибыль остается на депозите счета, рассчитать и выдать на экран сумму денег A на счете на конец каждого года за N лет. Расчетная формула:

A=P(1+R)N

Это — программа вычисления так называемых сложных процентов, выводящая результат в виде таблицы по годам с итоговой строкой.

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

#include <math.h>

int main()

{

clrscr();

float p, s, r, n, a;

cout<<"Сколько денег Вы сдаёте ? ";

cin>>p;

cout<<"На сколько лет? ";

cin>>n;

cout<<"Какова ставка банка в процентах? ";

cin>>r;

cout<<" Годы Вклад на депозите"<<"\n";

for(s = 1; s<=n; s++)

{

a = p*pow((1+r/100),s);

printf("%12.0f %25.2f\n",s,a);

}

cout<<"\n";

printf("Итого %6.0f %25.2f\n",n,a);

getch();

return0;

}

Задача 33. Программа производит обратный отсчёт секунд . Для задержки выполнения программы на заданное число миллисекунд использована функцияSleep().

#include <iostream.h>

#include <conio.h>

#include <dos.h>

int main()

{

clrscr();

int m;

for(m=5; m>0; m--)

{

Sleep(1000);

gotoxy(38,20-m);

cout<<m<<" сек.\n";

}

Sleep(1000);

gotoxy(37,21-m);

cout<<"П У С К !";

getch();

return0;

}

Задача 34.В этом примере демонстрируется применение функций text­back­ground (цвет фона) и textcolor (цвет символа), которые определяют цвет фона на экране и цвет выводимых символов соответственно (в средеBorlandC++Builder6). Для установки подходящего цвета используйте числовые либо символьные константы, приведенные ниже в таблице.

Символьная константа

Числовая константа

Определяемый цвет

BLACK

BLUE

GREEN CYAN

RED

MAGENTA

BROWN

LIGHTGRAY

DARKGRAY

LIGHTBLUE

LIGHTGREEN

LIGHTCYAN

LIGHTRED

LIGHTMAGENTA

YELLOW

WHITE

BLINK

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

128

Черный

Темно-синий

Темно-зеленый

Бирюзовый

Красный

Фиолетовый

Коричневый

Светло-серый

Темно-серый

Светло-синий

Светло-зеленый

Светло-бирюзовый

Розовый

Малиновый

Желтый

Белый

Мерцание

Здесь же используется функция создания текстового окна:

Window(x1, y1, x2, y2),

определяющая область экрана, которая в дальнейшем будет рассматриваться функциями вывода как весь экран. Здесь x1, y1 — координаты левого верхнего, а х2, у2 — координаты правого нижнего угла окна. Сразу после выполнения процедуры курсор помещается в левый верхний угол окна, а само окно очищается (заполняется цветом фона). В созданном окне устанавливается локальная система координат (левый верхний угол имеет координаты (1,1)).

// Программа отлажена в Borland C++ Builder 6

#include<iostream.h>

#include<stdlib.h>

#include<conio.h>

#include<dos.h>

voidmain()

{ char name[20];

textbackground(0);

clrscr();

//Желтые буквы на синем фоне

textbackground(3);

window(1,1,35,11);

textcolor(14); clrscr();

cprintf(" Введи свое имя\n ");

cprintf("\r и нажми Enter ") ;

scanf(“%s”,name); randomize();

// Случайный выбор цвета

do

{

textbackground(random(7)+1);

window(40,12,75,22);

textcolor(random(15)+1);

clrscr();

gotoxy(6,8);

cprintf("Привет, %s",name);

Sleep(1000);

}

while(!kbhit()); //пока не нажата ни одна клавиша

textmode(3); // Сброс всех установок

getch();

}

Задача 35. Шуточная программа, производящая обратный отсчёт секунд, а затем создающая иллюзию форматирования диска.

// Программа отлажена в Borland C++ Builder 6

#include <iostream.h>

#include <conio.h>

#include <dos.h>

int main()

{

clrscr();

int m,n; char s=176,t=178;

for(m=5; m>0; m--)

{

Sleep(1000);

gotoxy(38,20-m);

cout<<m<<" sek\n";

}

Sleep(1000);

gotoxy(32,21-m);

cout<<"Formatting disk C: "<<"\n"; Sleep(1000);

gotoxy(27,22-m);

cout<<"All data will be destroyed!"<<"\n";

Sleep(1000);

for(n=1;n<=80;n++)

{

gotoxy(n,23-m);

cout<<s;

}

for(n=1;n<=80;n++)

{

Sleep(200);

gotoxy(n,23-m);

cout<<t;

}

for(n=1;n<=80;n++)

{

gotoxy(n,23-m);

cout<<'.';

}

gotoxy(32,24-m);

cout<<"FORMAT COMPLETED!!!"<<"\n";

getch(); return 0;

}

Задача 36. Программа реализует так называемый «прогресс-индикатор»: сначала в 12 строке экрана стро­ится линейка из 80 символов, заполненная символом с кодом 176, а затем по этой ли­ней­ке движется символ с кодом 178, закрашенный жёлтым цветом, с задержкой 0.5 сек. Внизу после каждых 8 выведенных символов сообщается об объеме выполненной работы (в %). Предлагаем самостоятельно объединить эту задачу с предыдущей (просто добавить вывод сообщения о мнимом форматировании диска). На синем фоне Windows-окна зрелище не для слабонервных.

// Программа отлажена в Borland C++ Builder 6

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#include <iostream.h>

#include <stdlib.h>

intmain()

{

int k,i; char c1=176,c2=178;

textbackground(6); //цвет фона

textcolor(14); //цвет символов

clrscr();

//нарисовать дорожку

gotoxy(1,12);

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

//cout<<c1;

cprintf(“%c”,c1);

//а теперь жёлтый индикатор

for(k=1;k<=80;k++)

{ gotoxy(k,12);

//cout<<c2;

cprintf(“%c”,c2);

if(k%8==0)

{ gotoxy(35,15);

//cout<<k/8*10<<"% сделано";

cprintf(“%d % сделано”, k/8*10);

}

Sleep(500);

}

getch();return0;

}

Задача 37. Автоморфными называются числа, которые содержатся в младших разрядах их квадрата, например:

52 = 25, 252 = 625

Найти все автоморфные числа в заданном числовом интервале.

// Программа отлажена в Visual Studio 2008

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

int main()

{

long i, n, x, y, lim, divizor;

lim=10; divizor=10; n=1;

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

{

for (x=n; x<=lim; x++)

{ y=x*x;

if (y%divizor==x)

printf(" x= %ld, y= %ld\n",x,y);

}

printf("\n");

lim=lim*10;

divizor*=10;

n=n*10;

}

getch();return 0;

}

Задача 38. Строится трубопровод заданной длины. Имеются трубы двух различных размеров. Вы­вести сообщение — сколько длинных и сколько коротких труб требуется для строитель­ства? Найти все варианты.

Замечание. Задача не всегда имеет решение; если решения нет - вывести сообщение об этом на экран (самостоятельно).

#include <stdlib.h>

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

#include <dos.h>

int main()

{

clrscr();

int max, x, y, s, c1, c2, t; t=1;

cout<<"Длина трубы 1-го типа ? ";

cin>>c1;

cout<<"Длина трубы 2-го типа ? ";

cin>>c2;

cout<<"Длина трубопровода ? ";

cin>>s;

for(x=0; x<=s/c1; x++)

for(y=0; y<=s/c2; y++)

if(c1*x+c2*y==s)

{cout<<" Длинные трубы - "<<y<<" Короткие трубы - "<<x<<"\n";}

getch();

return 0;

}

Задача 39. Есть отрезки труб длинойaметров иbметров (a<b). Сколько тех и других потребуется, чтобы проложить трубопровод заданной длины T сминимальнымчислом сварных швов? (Трубы разрезать нельзя!).

Замечание. Задача всегда имеет решение при a=3, b=5, если T>7.

#include <stdio.h>

#include <iostream.h>

#include <conio.h>

intmain()

{

intt3,t5,T;

inta=3,b=5;

clrscr();

printf("длина трубопровода?");

cin>>T;

t3=0;

while(t3<=T/a)

{

t5=(T-a*t3)/b;

if(a*t3+b*t5 == T)

{cout<<a<<"-м: "<<t3<<endl;

cout<<b<<"-м: "<<t5<<endl;

break;

}

else

t3++;

}

if(t3>T/a)

cout<<"Нельзя построить";

getch();return 0;

}

Задача 40. Программа определяет все двузначные числа, делящиеся без остатка на сумму своих цифр и выводит их на экран так, что числа каждого десятка находятся в новой строке .

#include <iostream.h>

#include <conio.h>

int main()

{

clrscr();

int x, y, t;

for(x=1; x<=9; x++)

{

cout<<"\n";

for(y=0; y<=9; y++)

if((x*10+y)%(x+y) == 0)

cout<<x<<y<<" ";

}

getch();

return 0;

}

Задача 41. Программа реализует правило, согласно которому покупателю с 1 гривны всегда выдаётся сдача наименьшим количеством монет. Например, если стоимость покупки 24 коп., то продавец, руководствуясь этим правилом, должен дать сдачу набором монет: 50, 25, 1.

#include <stdio.h>

#include <conio.h>

#include <dos.h>

intmain ()

{

intt,s;

clrscr();

printf("Сколько стоит покупка?");

scanf("%d",&s);

t = 100-s;

printf("Вот ваша сдача:");

while(t>=50)

{

t-=50;

printf(" 50 ");

}

while(t>=25)

{

t-=25;

printf(" 25 ");

}

while(t>=10)

{

t-=10;

printf(" 10 ");

}

while(t>=5)

{

t-=5;

printf(" 5 ");

}

while(t>=2)

{

t-=2;

printf(" 2 ");

}

while(t>=1)

{

t-=1;

printf(" 1 ");

}

getch();return 0;

}

Задача 42. Программа позволяет получить на экране двоичное представление введенного по запросу символа. Используются команды логического умножения (&) и сдвига (>>). Функция putchar() выводит на экран один символ.

voidmain()

{

unsigned char c,mask=0x80;

clrscr();

printf("Введи символ ");

c=getch();

printf("%c = ",c);

while(mask)

{

if(c&mask)

putchar('1');

else

putchar('0');

mask>>=1;

}

getch(); return 0;

}

Задача 43.Программа позволяет получить на экране равнобедренный треугольник заданной высоты N, сплошь заполненный символом “*”.

// Программа отлажена в Borland C++ Builder 6

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#include <stdlib.h>

intmain()

{

int k,n,m,x,y;

clrscr();

cout<<"Введи высоту ==> ";

cin>>n;

x=40,y=1;

m=1;

while(m<=n)

{

gotoxy(x--,y++); //позиционирование курсора

k=1;

while (k<=2*m-1)

{

cout<<"*";

k++;

}

m++;

}

getch();return0;

}

Задача 44.Символ с кодом 002 “взлетает” с нижней строки экрана, предварительно заполненной символом “=” и медленно поднимается вверх.

// Программа отлажена в Borland C++ Builder 6

#include<iostream.h>

#include<stdio.h>

#include<conio.h>

#include<dos.h>

intmain()

{

int k; char ch='\002';

clrscr();

gotoxy(1,24);

for(k=1;k<80;k++)

cout<<"=";

for(k=24;k>0;k--)

{

gotoxy(40,k); //позиционирование курсора

putch(ch);

Sleep(500);

gotoxy(40,k);

putch(' '); //стереть символ

}

getch();return0;

}

Задача 45.Программа-секундомер. В центре экрана выводятся числа от 1 до 60, последова­тель­но сменяющие друг друга через 1 сек. Вывод осуще­ствляется в маленьком окне, закра­шен­ном коричневым цветом; цвет цифр жёлтый. Задержку выполнения программы на заданное число миллисекунд осуществляет библиотечная функция функция Sleep().

// Программа отлажена в Borkfnd С++ Builder 6 (1.04.2008)

#include <iostream.h>

#include <conio.h>

intmain()

{

intk=1;

textbackground(0); //восстановить фон

clrscr();

window(36,12,43,12); //"форточка" в центре

textbackground(6);

textcolor(14);

clrscr();

while( k<=60 && !kbhit())

{

gotoxy(2,1);

cprintf("%d cek",k++);

//cout<<k++<<" сек";

//Задержка выполнения программы на

//заданное число миллисек

Sleep(1000);

}

return 0;

}

Задача 46. Программа в центре экрана последовательно с интервалом в 0.5 сек. выводит символы « – », « \ », « | », « / », имитируя вращение малого пропеллера. Процесс длится, пока не нажата какая-нибудь клавиша. Эту ситуацию контролирует стандартная функция kbhit(). Для приостановки выполнения программы на 0.1 сек. применена функцияSleep().

// Программа отлажена в Borland С++ Builder 6. 1.04.2008

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

intmain()

{

char a='\-', b='\\',c='\|',d='\/';

clrscr();

double msk=100;

do

{

gotoxy(40,12); cout<<a<<'\007'; Sleep(msk);

gotoxy(40,12); cout<<b<<'\007'; Sleep(msk);

gotoxy(40,12); cout<<c<<'\007'; Sleep(msk);

gotoxy(40,12); cout<<d<<'\007'; Sleep(msk);

}

while(!kbhit());

getch(); return 0;

}

Задача 47. Символ с кодом 002 ("рожица") движется по экрану вдоль главной диагонали.

// Программа отлажена в Borland C++ Builder 6

#include<iostream.h>

#include<conio.h>

#include<dos.h>

intmain()

{

int x=1, y=1; char ch='\002';

clrscr();

while(y<=24)

{

gotoxy(x,y); //курсор в точку x,y

cout<<(ch); //вывод символа

Sleep(300); //пауза

clrscr(); //очистка экрана

gotoxy(45,24);

cout<<"\t\t---------------------";

x+=3; y++;

}

getch(); return 0;

}

Задача 48. Найти все трехзначные натуральные числа, которые делятся без остатка на сумму своих цифр

#include <iostream.h>

#include <conio.h>

intmain()

{

clrscr();

inta=100, z1, z2, z3;

while(a<=999)

{

z3=a%10; // последняя цифра

z1=a/100; // первая цифра

z2=a/10%10; // средняя цифра

if(a%(z1+z3+z2) == 0)

cout<<a++<<" " ;

}

getch();return 0;

}

Задача 49. Программа генерирует случайную последовательность латинских прописных букв, которые появляются в произвольных местах на экране и исчезают через T сек. Старайтесь нажимать на клавишу, которая соответствует символу на экране. Конец игры — ESC. По завершении программа выводит количество правильных и неправильных ответов

// Программа отлажена в Borland C++ Builder 6

#include <stdlib.h>

#include <iostream.h>

#include <conio.h>

#include <time.h>

#include <dos.h>

intmain()

{

char ch,s; int T=5;

intkp=0, // к-во правильных и

kn=0; // к-во неправильных ответов

randomize(); clrscr();

do

{

s=random(26)+65; //случайная буква

gotoxy(random(78)+1,random(23)+1);

putch(s); Sleep(T*1000); clrscr();

cout<<"Что смотришь? Теперь жми наугад";

ch=getch(); clrscr();

if(ch==s)

kp++;

else

kn++;

}

while(ch!=27);

clrscr();

cout<<"правильных - "<<kp<<endl;

cout<<"неправильных - "<<kn-1<<endl;

getch();

return0;

}

Задача 50.Программа генерирует случайную последовательность латинских прописных букв, которые появляются в произвольных строках на экране и движутся слева направо. Старайтесь нажимать на клавишу, которая соответствует символу на экране. Угаданный символ падает вниз, а при неверно нажатой клавише на его месте появляется символ с кодом 002. Конец игры — ESC. По завершении программа выводит количество правильных и неправильных ответов.

// Программа отлажена в Borland C++ Builder 6

#include <stdlib.h>

#include <iostream.h>

#include <conio.h>

#include <time.h>

#include <dos.h>

intmain()

{

charch,s;

inty,x,kp=0, kn=0;// к-во правильных и

// к-во неправильных ответов

randomize(); clrscr();

do

{ clrscr();

s = random(26)+65; //случайная буква

x = 1;

y = random(23)+1;

do

{ gotoxy(x,y);

putch(s); Sleep(500);

clrscr();

x++;

}

while(!kbhit());

// Очень ВАЖНО! getch() выбирает из буфера

// символ, оставленный функцией kbhit()

ch=getch();

if(ch == s || ch == s+32)

{

while(y<25)

{ gotoxy(x,y);

putch(s); Sleep(250);

clrscr();

y++;

}

kp++;

}

else

{ if(ch == 27) break;

kn++; gotoxy(x,y);

putch('\002'); Sleep(3500);

clrscr();

}

}

while(ch != 27); //ESC

clrscr();

cout<<"правильных - "<<kp<<endl;

cout<<"неправильных - "<<kn<<endl;

getch();

return0;

}

Задачи для самостоятельного решения

1. Используя оператор цикла:

а) напечатайте в 12-й строке экрана последовательность чисел

23 21 19 17 … 3 1,

б) напечатайте эти же числа вдоль главной диагонали экрана:

23

21

19

17

15

…..

3

1

в) напечатайте эти же числа вдоль побочной диагонали экрана:

1

3

5

7

9

….

21

23

2. Напечатайте все двузначные натуральные числа, сумма цифр которых равна 8.

3. Напечатайте все трехзначные натуральные числа, в которых средняя цифра равна сумме крайних цифр .

4. Построить в центре экрана малое текстовое окно размером 3х5 символов, закрасив его малиновым цветом. Используя оператор цикла, организовать вывод в центр этого окна разноцветной последовательности сменяющих друг друга символов     с кодами 3, 4, 5 и 6 соответственно .

Вывод завершается про нажатии любой клавиши.

5. Организуйте вывод символа , который движется вдоль главной диагонали экрана .

6. Организуйте вывод символа  , который движется вдоль побочной диагонали экрана

  1. Составить таблицу значений простых чисел, вычисляя их по соотношениям:

=  4x2  162x + 1681,

=  9x2  249x + 1763,

если изменяется от 1 до 40 с шагом 1.

  1. Получить таблицу температур по Цельсию от 0 до 100 градусов и их эквивалентов по шкале Фаренгейта, используя для перевода формулу:

Tf = 1.8*Tc+32,

где Tf — температура по Фаренгейту , Tc — температура по Цельсию.

9. Найти и напечатать все трёхзначные натуральные числа, делящиеся на

а) каждую из своих цифр(кроме 0);

б) сумму своих цифр.

10. Дано натуральное число m ( m < 27 ). Получить все трёхзначные натуральные числа, сумма цифр которых равна m.

  1. Получить все трёхзначные натуральные числа, сумма цифр которых равна их произведению.

12. Получить все трёхзначные натуральные числа, в которых сумма крайних цифр равна средней цифре.

13. Составить программы для решения следующих задач:

a) Символ  движется в 40-й колонке экрана сверху вниз, а затем символ , в этой же колонке движется снизу вверх.

б) Одновременно в 38-колонке экрана символ  движется сверху вниз, а в 40-й колонке символ  движется снизу вверх.

в) В 40-й колонке навстречу друг другу движутся символы  и  . В месте их столкновения появляется слово “ БАБАХ”.

  1. Составить программу, которая последовательно вводит по одному числу и находит максимальное из введённых чисел. Признак конца - ввод нуля.

  1. Составить программу, которая последовательно вводит по одному целому числу и находит отдельно сумму чётных и сумму нечётных чисел. Процесс продолжается до ввода нуля.

  1. Составить программу, которая последовательно вводит по одному числу и находит отдельно сумму положительных и сумму отрицательных чисел. Процесс продолжается до ввода нуля.

  1. Некий предприниматель хочет приобрести недвижимость общей стоимостью в N гривен. Он располагает суммой в S гривен, а его бизнес приносит ему ежемесячно доход в D гривен.

Составить программу, которая определяет начальные величины N, S и D, и показывает (выводит на экран) динамику накопления денег от месяца к месяцу и определяет количество месяцев, необходимых для накопления нужной суммы.

  1. Найти и напечатать все трёхзначные натуральные числа, сумма кубов цифр которых равна самому числу.

  1. Найти все трёхзначные натуральные числа, сумма цифр которых равна заданному числу m (m  <= 27).

  1. Ввести последовательность из n действительных чисел и найти среднее арифметическое положительных чисел из введённой последовательности.

  1. Напечатать в возрастающем порядке все трёхзначные натуральные числа, в десятичной записи которых нет одинаковых цифр.

  1. Составить программу, которая определяет различные возможные способы размена 1 гривны. Предполагается, что в обращении имеются монеты следующего достоинства:

50, 25, 10, 5, 2 и 1 коп

  1. Груз перевозят в трёх — и пятитонных автомобилях. Сколько тех и других потребуется для перевозки T тонн груза? Найти все возможные варианты.

  1. Получить все шестизначные «счастливые» номера, т.е. такие натуральные числа, у которых сумма его первых трёх цифр равна сумме трёх последних цифр.

  1. Составить программу, реализующую правило, по которому покупателю со 100 гривен при покупке товара всегда выдаётся сдача наименьшим количеством купюр. Считать, что в обиходе есть купюры достоинством:

50, 20, 10, 5, 2 и 1 гривны.

  1. Предприятие выплачивает своим работникам надбавку к основной зарплате, которая зависит от стажа их работы. Соответствующие зависимости сведены в таблицу.

Стаж Надбавка, %

до 5 лет 0

от 5 до 10 лет 10

свыше 10 лет 15

Составить программу, которая последовательно запрашивает размер основной зарплаты и стаж работающего, а затем вычисляет и выводит сумму надбавки и общую зарплату с учётом надбавки. Число служащих не превышает 30.

27. Поступающее на элеватор зерно проверяют на влажность. Если она превышает 20%, то первоначальный вес зерна уменьшают на 7%. Составить программу, в которой последовательно запрашивают вес зерна и его влажность, а затем вычисляют и печатают вес зерна, поступивший в зачёт. Число поставщиков = 20.

28. Плата за пользование электроэнергией исчисляется по следующему правилу: за первые 90 квт/ч взыскивается по 6.5 коп, за каждый израсходованный киловатт-час, а за каждый последующий — в два раза больше. Составить программу, которая последовательно (в цикле) по запросу вводит количество израсходованной в месяц эл. энергии, вычисляет и выводит начисленную к оплате сумму. Число плательщиков = 29.

29. При таможенном досмотре с пассажира взыскивают госпошлину, которая составляет 5% от общей стоимости провозимых им товаров, если последняя превышает 1400 долларов. Составить программу, которая последовательно вводит по запросу стоимость провозимых товаров для каждого пассажира и вычисляет сумму пошлины. Всего пассажиров не более 30.

30. Закройщик ателье получает надбавку к зарплате, если он достиг определённой экономии материала. Соответствующие зависимости показаны в таблице:

Отходы, % Надбавка, %

5 17

10 12

  1. 7

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

  1. Ввести натуральное число n(n<=65535). Найти и выдать на экран сумму его цифр.

  2. Найти наибольший общий делитель двух заданных чисел.

  3. Найти наименьшее общее кратное двух заданных чисел.