Рок C/C++ Вступление. Hello World!


Урок 4. Оператор выбора switch. Генерация случайных чисел



бет8/12
Дата07.02.2022
өлшемі498,5 Kb.
#96247
түріУрок
1   ...   4   5   6   7   8   9   10   11   12
Байланысты:
C общсвед
C общсвед

Урок 4. Оператор выбора switch. Генерация случайных чисел.


Оператор выбора switch позволяет выбрать участок кода для выполнения по метке, которая совпадет с выражением в конструкции оператора.Синтаксис
switch (выражение)

{
case метка1:

оператор 1;
break;

case метка 2:


break;
default: операторы;

}
Пример: клиент покупает билеты в количестве N штук в определенную зону (A B C D), по 20, 30, 50 и 100 руб. соответственно, если клиент купит, больше чем на 2000 руб, то скидка 3%, больше 5000 – 5%.


Например:
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
char a;
int pb, numb;
double oplata, disc=0;
cout<<"В какую зону хотите купить билеты? A,B,C,D?";
cin>>a;
if (a=='a'||a=='A'||a=='b'||a=='B'||a=='c'||a=='C'||a=='d'||a=='D')
{switch (a)
{
case 'a':
case 'A':
cout<<"Вы выбрали зону А\n";
pb=20;
break;
case 'b':
case 'B':
cout<<"Вы выбрали зону B\n";
pb=30;
break;
case 'c':
case 'C':
cout<<"Вы выбрали зону C\n";
pb=50;
break;
case 'd':
case 'D':
cout<<"Вы выбрали зону D\n";
pb=100;
break;
}
cout<<"Сколько вы хотите купить билетов? ";
cin>>numb;
if (numb*pb>=5000)
{
disc=numb*pb*0.05;
cout<<"Ваша скидка = "<}
else
if (numb*pb>=2000)
{
disc=numb*pb*0.03;
cout<<"Ваша скидка = "<}
else
{disc=0;
cout<<"Ваша скидка = "<}
cout<<"\nВнесите оплату в размере = "<cin>>oplata;
if (oplata>=numb*pb-disc)
cout<<"Ваша сдача = "<else
cout<<"Не хватает "<}
else
cout<<"Нет такой зоны\n";
}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
В какую зону хотите купить билеты? A,B,C,D?c
Вы выбрали зону C
Сколько вы хотите купить билетов? 600
Ваша скидка = 1500
Внесите оплату в размере = 28500руб.
30000
Ваша сдача = 1500 руб.
Вы выбрали зону = c
Количество билетов = 600
Стоимость билетов = 28500 руб.
Для продолжения нажмите любую клавишу . . .
Генерация случайных чисел на компьютере в принципе невозможна, т.к. чтобы что-то сгенирировать нужно от чего-то отталкиваться, в компьютере это время. Для генерации псевдослучайного числа нам понадобиться 2 библиотеки и и 3 функции
1. time() - возвращает значение времени от указанной точки, до сейчас. Для генерации случайных чисел обычно используется 0\
2. srand() - принимает значение на основе которого будет генерироваться случайное число.
3. rand() - сама функция генерации случайного ЦЕЛОГО числа, генерирует случайные числа в диапазоне от 0 до 65536.
Простейшая конструкция для получения случайного числа
#include
#include
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");

srand(time(NULL));

int random;


random=rand();
cout<<"Случайное число = "<}
Однако нас не интересует диапазон от 0 до 65 тысяч, нам интересен свой диапазон от A до B.
#include
#include
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
srand(time(NULL));
int random,a, b;
cout<<"Введите диапазон от и до ";
cin>>a>>b;

random=rand()%(b+1-a)+a;

cout<<"Случайное число = "<
}
Задача: 
Пользователь и компьютер бросают кубики, на бросок делается ставка(вводится с клавиатуры). Определить победителя и проигравшего, учесть возможность ничьей, за каждое выигранное очко победителю начисляется размер ставки, а у проигравшего отнимается, вывести сколько денег будет у каждого в конце игры, первоначало 100 руб.
Решение:
#include
#include
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
srand(time(NULL));
int ku, kc;
double st, bu=100, bc=100;
kc=rand()%6+1;
ku=rand()%6+1;
cout<<"Счет компьютера = "<cout<<"Счет пользователя = "<cout<<"Введите размер ставки ";
cin>>st;
if (bc>=5*st&&st>0&&bu>=5*st)

{
cout<<"Кубик компьютера\n";


switch (kc)

{ case 1:


cout<<"*******\n";
cout<<"* *\n";
cout<<"* ' *\n";
cout<<"* *\n";
cout<<"*******\n";
break;
case 2:
cout<<"*******\n";
cout<<"* *\n";
cout<<"* ' ' *\n";
cout<<"* *\n";
cout<<"*******\n";
break;
case 3:
cout<<"*******\n";
cout<<"* *\n";
cout<<"* ' ' *\n";
cout<<"* ' *\n";
cout<<"*******\n";
break;
case 4:
cout<<"*******\n";
cout<<"* ' *\n";
cout<<"* ' ' *\n";
cout<<"* ' *\n";
cout<<"*******\n";
break;
case 5:
cout<<"*******\n";
cout<<"* ' *\n";
cout<<"* ' ' *\n";
cout<<"* ' ' *\n";
cout<<"*******\n";
break;
case 6:
cout<<"*******\n";
cout<<"* ' ' *\n";
cout<<"* ' ' *\n";
cout<<"* ' ' *\n";
cout<<"*******\n";
break;
}
cout<<"Кубик пользователя\n";
switch (ku)
{ case 1:
cout<<"*******\n";
cout<<"* *\n";
cout<<"* ' *\n";
cout<<"* *\n";
cout<<"*******\n";
break;
case 2:
cout<<"*******\n";
cout<<"* *\n";
cout<<"* ' ' *\n";
cout<<"* *\n";
cout<<"*******\n";
break;
case 3:
cout<<"*******\n";
cout<<"* *\n";
cout<<"* ' ' *\n";
cout<<"* ' *\n";
cout<<"*******\n";
break;
case 4:
cout<<"*******\n";
cout<<"* ' *\n";
cout<<"* ' ' *\n";
cout<<"* ' *\n";
cout<<"*******\n";
break;
case 5:
cout<<"*******\n";
cout<<"* ' *\n";
cout<<"* ' ' *\n";
cout<<"* ' ' *\n";
cout<<"*******\n";
break;
case 6:
cout<<"*******\n";
cout<<"* ' ' *\n";
cout<<"* ' ' *\n";
cout<<"* ' ' *\n";
cout<<"*******\n";
break;
}
if (ku>kc)
{
cout<<"Выйграл пользователь\nВыйгрышь составил "<<(ku-kc)*st<<"\nСчет компьютера = "<cout<<"\nСчет пользователя = "<}
else
if (ku{
cout<<"Выйграл компьютер\nВыйгрышь составил "<<(kc-ku)*st<<"\nСчет компьютера = "<cout<<"\nСчет пользователя = "<}
else
if (ku==kc)
cout<<"Ничья\n";
}
else
cout<<"Такая ставка недопустима!\n";
}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Счет компьютера = 100
Счет пользователя = 100
Введите размер ставки 15
Кубик компьютера
*******
* ' ' *
* ' ' *
* ' ' *
*******
Кубик пользователя
*******
* *
* ' ' *
* ' *
*******
Выйграл компьютер
Выйгрышь составил 45
Счет компьютера = 145
Счет пользователя = 55
Для продолжения нажмите любую клавишу . . .

Урок 5. C/C++ Циклы for, while, do while.


Любой цикл предназначен для много кратного исполнения одного участка кода. Цикл for в своем простейшем исполнении позволяет задать определенное количество выполнений кода.
Синтаксис: for(инициализация переменных; условия; шаг цикла){для 2 и более действий нужны фигурные скобки;}
Например:
#include
using namespace std;
void main()
{
for(int i=1; i<10; i++)

{cout<
}
Пример: Напишите программу, которая вычисляет сумму целых чисел от а до 500 (значение a вводится с клавиатуры)
Например:
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
int i, a, sum=0;
cout<<"Введите начальное значение от 1 до 500: ";
cin>>a;
i=a;
for (;i<=500;i++, a++)

{sum=sum+a;


cout<}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите начальное значение от 1 до 500: 493
493
987
1482
1978
2475
2973
3472
3972
Для продолжения нажмите любую клавишу . . .
Пример: Найти среднее арифметическое всех целых чисел от 1 до 1000
Например:
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
int i;
double sum=0;
i=1;
for (;i<=1000;i++)
{sum+=i;}
sum=sum/(double)(i-1);
cout<<"среднее арифметическое = "<}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите начальное значение от 1 до 500: среднее арифметическое = 500.5
Для продолжения нажмите любую клавишу . . .
Пример: Подсчитать количество целых чисел в диапазоне от 100 до 999, у которых есть две одинаковые цифры
Например:
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
int i=100, counter=0, n1, n2, n3;
for (;i<=999;i++)
{ n1=i%10;
n2=i/10%10;
n3=i/100;
if(n1==n2||n1==n3||n2==n3)

counter++;


}
cout<<"счетчик = "<}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
счетчик = 252
Для продолжения нажмите любую клавишу . . .
Циклы while и do-while, единственное отличие от for в том что в них проверяется условие выполнения, ни объявить, ни изменить переменную в конструкции while нельзя.Поэтому чтобы выйти из цикла нужно изменять переменные внутри самого цикла, так чтобы условие стало ложным.
Синтаксис:
while(условие){для 2 и более действий нужны фигурные скобки;}
do{всегда нужны скобки;}while(условие);
Главное различие между while и do-while в том, что в первом случаи условие проверяется перед выполнением кода(предусловный цикл), во втором код выполняется 1 раз перед тем как будет проверено условие(постусловный цикл).
Например:
#include
using namespace std;
void main()
{
int i=1;
while(i<10)
{i++;
cout<}
Цикл do-while удобен для проверки верности ввода значений
Например: Нам нужно ввести число от 1 до 10
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
int num;
cout<<"Введите число от 1 до 10 = ";
do{
cin>>num;
if(num<1||num>10)
{cout<<"Недопустимое значение, введите число от 1 до 10 ";}
}while(num<1||num>10);

Пропуск итераций, выход из цикла до его завершения
В определенных условиях нам может понадобиться пропустить один или несколько повторений кода, для этих целей есть оператор continue; он прерывает выполнение текущей итерации, и возвращает к началу цикла. Для полного выхода из цикла, до его завершения служит команда break;
Например: Нам нужно посчитать сумму всех вводимых чисел, но если введено 10, то его не нужно учитывать, а если введен 0, нужно прекратить суммирование.
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
int sum=0, input;

while(1)


{
cout<<"Число для суммирования: "<cin>>input;
if(input==10)
{
cout<<"10 не суммируется"<continue;
}
if(input==0)
{
cout<<"введен 0, выходим из цикла"<break;
}
sum+=input;
}
cout<<"Сумма = "<}
Задача:
Пользователь вводит два целых числа. Необходимо вывести все целые числа, на которые оба введенных числа делятся без остатка
Решение:
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
int i, num, num2, max;
cout<<"Введите 2 числа ";
cin>>num>>num2;
for (i=1;i<=num||i<=num2;i++)
{
if(num%i==0&&num2%i==0)
cout<<"Делится на "<}
}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите 2 числа 128 192
Делится на 1 нацело
Делится на 2 нацело
Делится на 4 нацело
Делится на 8 нацело
Делится на 16 нацело
Делится на 32 нацело
Делится на 64 нацело
Для продолжения нажмите любую клавишу . . .
Задача2:
Даны целые числа a1, a2, a3 … не равные нулю. Определить их сумму. Программа завершает свою работу после ввода нулевого значения
Решение:
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
double n1, sum=0;
int i=0;
n1=1;
for (i=1;n1!=0;i++)
{
cout<<"Введите число ";
cin>>n1;
sum+=n1;
}
cout<<"Сумма = "<}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите число 34
Введите число 63
Введите число 17
Введите число 61
Введите число 0
Сумма = 175
Для продолжения нажмите любую клавишу . . .
Задача3: 
Гражданин открыл счет в банке, вложив 10000 руб. Через каждый месяц размер вклада увеличивается на p%(годовой процент) от имеющейся суммы (p – вещественное число, 0 < p < 25 годовой процент). По данному p определить, через сколько месяцев размер вклада превысит 11000 руб, и вывести найденное количество месяцев k (целое число) и итоговый размер вклада (вещественное число).
Решение:
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
double sum=10000, p;
int i=1, k;
cout<<"Введите процентную ставку от 0 до 25 ";
cin>>p;
k=1;
for (;sum<=11000;k++)
sum=sum+sum*p/100/12;
cout<<"Вклад = "<}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите процентную ставку от 0 до 25 4
Вклад = 11013.2
Месяцы = 30
Для продолжения нажмите любую клавишу . . .
Задача4: 
Напишите программу, которая выводит рисунок ёлки, с помощью циклов
Решение:
#include
#include
using namespace std;
void main()
{
setlocale (LC_CTYPE,"rus");
int str, i, imax;
cout<<"Введите количество секций и ёё высоту\n";
cin>>imax>>str;
for (i=1;i<=imax;i++)
{
int line, space, star, mline, mspace, mstar;
mline=str;
mspace=mline;
mstar=1;
for(line=1;line<=mline;line++)
{ for(space=1;space<=mspace;space++)
{
cout<<" ";
}
for(star=1;star<=mstar;star++)
{
cout<<"*";
}
mspace--;
mstar+=2;
cout<<"\n";
}
}
}
Компилируем нашу программу нажатием ctrl+F5 или (Dedug -> Start without debugging). И видим результат.
Результат
Введите количество секций и её высоту
3 5
*
***
*****
*******
*********
*
***
*****
*******
*********
*
***
*****
*******
*********
Для продолжения нажмите любую клавишу . . .


Достарыңызбен бөлісу:
1   ...   4   5   6   7   8   9   10   11   12




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет