Показать сообщение отдельно
Старый 22.04.2007, 14:15 ↑ #33
dkanus Мужской
cтарейшина эго-форума
 
Регистрация: 28.01.2007
Сообщений: 761
dkanus отключил(а) отображение уровня репутации
Exclamation Re: Уроки программирования на C++ для начинающих

Урок четвёртый - ветвление програмы и булевы переменные
До этого наши программы имели линейную структуру, т.е. всегда выполнялось каждое действие, независимо ни от чего. Сегодня мы рассмотрим возможности ветвления хода программы. Разберём такой пример - нам нужно найти действительные корни квадратного трёхчлена. Случаи, когда D > 0 и D = 0 мы ещё можем объединить в один, так как, по сути, корня два, но вот для D < 0 действительных корней нет и нам нужно отработать ситуацию отдельно. Сделаем так:
Код:
#include <math.h> //  В этом файле определены различные
                          // математические функции, мы рассмотрим их поздней
                          // пока же мы используем только функцию для
                          // вычисления квадратного корня - sqrt
#include <stdio.h>
#include <conio.h>
void main()
{float a, b, c, D; // Объявим и введём переменные
	puts("Enter a:");
	scanf("%e", &a);
	puts("Enter b:");
	scanf("%e", &b);
	puts("Enter c:");
	scanf("%e", &c);
	D = b*b - 4*a*c;
	if(D >= 0) // Внутри конструкции if помещаем условие и если оно
        **// верно, то выполняется кусок кода заключённый в фигурные
          //скобки
	printf("D = %f\nx1 = %f\nx2 = %f\n", D, (-b+sqrt(D))/(2*a), 
        (-b-sqrt(D))/(2*a));
        }
	else // Это необязательный блок, который будет выполнен, если
              // условие не соблюдено
		puts("D < 0"); // Как видим, если необходимо выполнить лишь
                                    // одну операцию, скобки можно опустить
	getch();
}
В конструкции if мы использовали условие - ">=", существует ещё - "<=", а также знаки строгого неравенства ">" и "<". Если необходимо проверить равенство двух чисел можно использовать "==", а знак "!=" даст положительный результат, если числа не равны.
Задание 1 - модифицировать программу так, чтобы она отдельно рассматривала случай, когда D = 0.
По сути операции условия возвращают логическое значение (true/false) и его можно сохранить в переменной типа bool, и использовать в дальнейшем например так
Код:
#include <stdio.h>
#include <conio.h>
void main()
{int a;
	scanf("%d", &a);
	bool b = (a == 0);
	if(b)
		puts("Zero!");
	else
		puts("Something new...");
	getch();
}
Также существует несколько булевых операций, помогающих расширить возможности if.
1) (bool&&bool) - возвращает true если оба значения true, иначе false
2) (bool||bool) - возвращает true если хотя бы одно значение true, иначе false
3)(!bool) - меняет значение на противоположное, true->false, а false->true

if может принимать и значения других переменных. 0 будет считаться false, а всё остальное true
Код:
(true&&true) = true
(true&&false) = false
(false&&false) = false
(true||true) = true
(true||false) = true
(false||false) = true
!true = false
!false = true

if((1==2)||(5!=6))
**
...
// Этот код будет выполняться
...
}
if(!(1==1))
**...
// А этот нет
...
}
Задание 2 - напишите тест с подсчетом балов

Последний раз редактировалось dkanus; 24.04.2007 в 17:31.
dkanus вне форума   Ответить с цитированием