Для этого урока готова новая версия: "Операции отношения и логические операции" и "Условный оператор if-else".
В новой версии:
- Ещё более доступные объяснения и больше примеров
- Задачи с автоматической проверкой решений
Добрый
день уважаемые читатели.
С
сегодняшнего урока мы начинаем рассмотрение группы управляющих конструкций. Из
названия понятно, что это конструкции, предназначены для управления программой.
До этого мы разбирали простейшие
программки, в которых все записанные операторы выполняются последовательно друг
за другом. Такие программы называются линейными.
Но часто, то, как программа должна
работать зависит от каких-либо условий. Если условие выполняется, то надо действовать
так, если не выполняется – иначе.
Вспомните любую игру с ветвящимся сюжетом, когда если вы беретесь за выполнение
задания, то вы обязательно наткнетесь на что-то, а если нет, то ничего не
будет. Именно для этого используется
управляющие конструкции, об одной из которых
и будет вестись сегодня речь.
Приступим.
Операторы
соотношений и логические выражения.
Помимо
арифметических операторов, рассматриваемых в прошлом уроке, в Си есть и
операторы соотношений. К ним относятся следующие операторы:
> - больше
>= -
больше либо равно
< -
меньше
<= -
меньше либо равно
== - равно
!= - не
равно
Они
используются в логических выражениях. Например:
Листинг
5.1
int a=4, b=10;
a>10;
b!=0;
Любое выражение
либо истинно, либо ложно. В нашем примере, первое выражение ложь (false) второе истина (true). Еще часто, когда условие ложно
подразумевают 0, когда истинно подразумевают 1. Это очень удобно, для компьютера
ведь для него двоичная система счисления является основной. В электронике, например, под истиной
подразумевается «есть ток», под ложью - «нет
тока» . Рассмотрим пример:
Листинг
5.2
#include <stdio.h>
int main(void)
{
int a=4, b=10, c, d;
c = а>10;
d = b != 0;
printf("pervoe virazenie %d \nvtoroe virazenie %d \n",c,d);
return (0);
}
С
помощью него вы можете убедиться, что ложным
выражениям соответствует значение ноль, истинным единица. Вообще, любое число,
не равное 0 является истиной, а 0 это ложь.
Теперь,
когда с истинностью и ложностью условий мы разобрались, переходим к рассмотрению
первого управляющей конструкции.
Управляющая
конструкция if
- else.
Конструкция
if-else используется для принятия
решения. Вспомните развилку дорог, когда вы можете пойти либо так, либо иначе. Для наглядности рассмотри её работу на простой
программе. Пусть пользователь вводит два целых числа, и программа должна
вывести большее из них.
Листинг 5.3
#include <stdio.h>
int main(void)
{
int a, b;
printf("Vvedite dva celih chisla:");
scаnf("%d %d", &a, &b);
if (a > b)
printf("%d naibolshee chislo\n", a);
else
printf("%d naibolshee chislo\n", b);
return (0);
}
Теперь
разберемся с синтаксисом конструкции if-else.
Сначала
идет ключевое слово if
(с английского «если») далее в скобочках
записано условие, которое проверяется (в нашем случае а больше b). Следом записан ОДИН оператор,
который должен выполняться, если условие истинно (в нашем случае printf("%d naibolshee chislo\n", a);) , потом ключевое слово else и следом за ним, ОДИН оператор,
который должен выполняться, если условие ложно (в нашем случае printf("%d naibolshee chislo\n", b);).
Формально
синтаксис конструкции if-else выглядит так:
Листинг 5.4
if (логическое выражение) оператор1; else
оператор 2;
Он работает следующим образом. Сначала вычисляется логическое
выражение. Если оно истинно (т. е. отлично от нуля), выполняется
оператор1. Если выражение ложно (т. е. его значение равно нулю), то выполняется
оператор2.
Кстати, блок else может и
отсутствовать. Такая запись наывается сокращенной записью, или неполной
конструкцией ветвления.
Листинг 5.5
if (логическое выражение) оператор1;
В данном случае, если условие будет ложным программа ничего
делать не будет. А просто продолжит своё
выполнение.
Теперь остановимся на на оговорке об одном операторе. Это
оговорка очень существенна. Иначе конструкция if будет работать неправильно. Для того, чтобы выполнить
несколько операторов, используется составной оператор. Это обычные фигурные
скобки {} записанная между ними группа операторов, воспринимается компилятором
как один.
Формально:
Листинг 5.6
if (логическое
выражение)
{
оператор;
оператор;
оператор;
}
else
{
оператор;
оператор;
оператор;
}
После закрывающей скобки, точку с запятой ставить не надо.
Кстати, как вы уже могли заметить тело любой
функции тоже заключено в составной оператор {}
Из опыта, я вам настоятельно советую всегда использовать фигурные
скобки, даже если внутри них будет один оператор. Это еще одна небольшая
хитрость, используемая при написании программ. Очень часто это позволяет
избежать глупых ошибок.
По своей сути, оператор if проверяет в условии числовое выражение. Т.е. либо ноль ( т.е.
ложь), либо не ноль (т.е. истинна). Поэтому вместо условия (a != 0), можно просто писать (a). Но пользоваться такой записью надо осторожно, часто бывает
она затрудняет понимание программы.
Внутри управляющей
конструкций if-else можно использовать любые конструкции языка, в
том числе и еще саму конструкцию if-else. Если
опять вспомнить пример с развилкой дорог, получается, что после одной развилки появляется другая развилка.
Отсутствие else-части в одной из вложенных друг в
друга if-конструкций может привести к неправильному понимаю записи. Для
разрешения этой проблемы, используется простое правило:
«else относится к ближайшему if, у которого нет
своего else.»
Для примера:
Листинг
5.7
if (n > 0)
if (а > b)
z = a;
else
z = b;
В данном случае else относится к внутреннему (второму) if, а
если нам надо чтобы else относился к внешнему (первому) if, то необходимо расставить соответствующим образом фигурные скобки.
Листинг 5.8
f ( > 0)
{
if (а > b)
z = a;
}
else
z = b;
Кстати, конструкция if является одним оператором, и для неё одной в
принципе скобки не нужны, но как я уже упоминал, лучше всегда использовать
фигурные скобки, дабы избежать случаев
неправильного толкования записи. Потому что искать такие ошибки в
программах очень тяжело. Еще, советую использовать отступы, для показания того,
что и к чему относится. Это относится к стилю оформления кода. Как я уже обещал
в комментариях к одному из уроков, я
посвящу в будущем этой теме отдельный пост.
Теперь немного о типичных ошибках. Для проверки
равенства двух чисел используется оператор «==» два знака равно. Очень часто
из-за невнимательности, в условиях вместо (a==b)
пишут (a=b). И
программа работает не так как нужно. С точки зрения компилятора, когда написано
выражение a=b истинно
всегда, кроме случаев, когда b равно
нулю. Мы, фактически, присваиваем переменной а значение b. Если оно не ноль, то выражение истинно, если 0
ложно. А нам-то нужно сравнить их значения. Поэтому будьте внимательны. Вот
пример, с ошибкой:
Листинг 5.9
#include <stdio.h>
int main(void)
{
int a, b;
printf("Vvedite dva celih chisla:");
scаnf("%d %d", &a, &b);
if (a = b)
printf("a i b ravni\n");
else
printf("a i b ne ravni\n");
return (0);
}
Логические
операторы. Сложные условия.
В предыдущих программах, мы рассматривали простейшие
условия, состоящие из одного оператора отношения. Теперь, давайте рассмотрим программу, которая
проверяет, принадлежит ли точка с координатой х, заданному промежутку оси х (-10; 10].
Листинг 5.10
#include <stdio.h>
int main(void)
{
float x;
printf("Vvedite x");
scаnf("%f", &x);
if (x>-10)
{
if (x<=10)
{
printf("x prinadlegit promegytku\n");
}
else
{
printf("x ne prinadlegit promegytku\n");
}
}
else
{
printf("x ne prinadlegit promegytku\n");
}
return (0);
}
Эта программа состоит из двух вложенных условий.
Для того, чтобы точка находилась в промежутке (-10;10] она должна быть больше
-10, и меньше или равна 10. В нашей программе мы использовали два вложенных
условия. Но ту же задачу можно решить и с помощью одной конструкции if. Для этого, для записи сложного условия, нужно
применить логические операторы. Их всего несколько:
!(условие) – оператор логическое НЕ. Отрицает
условие. Если условие было истина, оно становится ложным, если было ложным
становится истинным.
(условие1) && (условие2) - оператор логическое
И. Возвращает истину если оба условия
истинны. Иначе возвращает ложь.
(условие1) || (условие2) - оператор логическое ИЛИ. Возвращает истину,
если хотя бы одно из условий истинно или оба сразу истинны. Иначе ложь.
А нашем случае есть два условия (x>-10) (x<=10) если выполняется и первое И второе, то точка попадает в
промежуток, иначе нет.
Если использовать логический оператор, то программу можно переписать следующим образом:
Листинг 5.11
#include <stdio.h>
int main(void)
{
float x;
printf("Vvedite x");
scаnf("%f", &x);
if ((x>-10) && (x<=10))
{
printf("x prinadlegit promegytku\n");
}
else
{
printf("x ne prinadlegit promegytku\n");
}
return (0);
}
Как видите, запись программы стала более компактна
и легче для понимания.
Приоритет
логических операций.
Как и арифметические операции логические операции
имеют тоже различный приоритет.
- Операции в скобках
- Логическая операция НЕ
- Логические отношения
- Логическая операция И
- Логическая операция ИЛИ
Так же как и для арифметических операций,
скобками можно изменить порядок выполненияю
Как видите, приоритет операций логических
соотношений выше, чем приоритет логических операций И и ИЛИ. Поэтому, в
принципе, в программе Листинг 5.11 можно было бы условие записать (x>-10 && x<=10). Но опять же, чтобы не запутаться в более сложных условиях, я
советую вам всегда явно указывать приоритет с помощью скобок, дабы избежать
досадных ошибок.
Ну вот на этом и закончим сегодняшнее занятие.
Резюме урока:
- Узнали и научились использовать составной оператор
- Разобрались с логическими операциями соотношений и логическими выражениями
- Ознакомились с управляющей конструкцией if-else и научились её пользоваться
- Узнали про логические операторы НЕ, И, ИЛИ
- Выяснили приоритет логических операторов
Задание для практической работы:
- Напишите программу которая по вводимому числу выводит его модуль, не используя функцию fabs(). Программа должна считать вещественное число с клавиатуры, и вывести на экран модуль этого числа.
- Напишите программу для решения уравнения ax = b относительно х в целых числах. Учтите, что a может принимать любые значения, в том числе и 0. На вход программе подаются целые числа a, b, по модулю не превосходящие 30000. Требуется вывести целый корень уравнения, если он существует и единственный. Если уравнение не имеет корней, то вывести no solution. Если уравнение имеет больше одного целого корня, то вывести many solutions.
- Поле шахматной доски определяется парой чисел (a, b), каждое от 1 до 8, первое число задает номер столбца, второе – номер строки. Заданы две клетки. Определите, может ли шахматная ладья попасть с первой клетки на вторую за один ход. Входные данные: 4 целых числа от 1 до 8 каждое, первые два задают начальную клетку, вторые два задают конечную клетку. Начальные и конечные клетки не совпадают. Программа должна вывести YES, если из первой клетки ходом ладьи можно попасть во вторую или NO в противном случае.
- Даны вещественные числа a, b, c. Найдите все решения квадратного уравнения ax2+bx+c=0. Формат входных данных: три вещественных числа. Формат выходных данных: два вещественных числа, если уравнение имеет два корня, одно действительное число – при наличии одного корня. При отсутствии действительных корней программа выводит no solution.
- По данному числу n<100 закончите фразу "На лугу пасется..." одним из возможных продолжений: "n коров", "n корова", "n коровы", правильно склоняя слово "корова". Программа должна вывести введенное число n и одно из слов (на латинице): korov, korova или korovy, например, 1 korova, 2 korovy, 5 korov. Между числом и пробелом должен стоять ровно один пробел.
Самостоятельная практическая работа.
ОтветитьУдалитьРешение квадратных уравнений.
#include "stdio.h"
#include "math.h"
int main(void)
{
int a,b,c,D;
float x1,x2,x;
printf("Vvedite a b c 4erez probel\n Primer 3x*x-6x+3\n a=3 b=-6 c=3\n");
scanf("%d %d %d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
double pow(double x,double y);
double sqrt(double x);
D=pow(b,2)-4*a*c;
if (D>0)
{
x1=(-b+sqrt(D))/2*a;
x2=(-b-sqrt(D))/2*a;
printf("x1=%f,x2=%f\n",x1,x2);
}
else
{
x=-b/(2*a);
printf("x=%f\n",x);
}
return(0);
}
Программа вроде работает.
Только не смог сделать что бы программа выводила на экран "Комплексные числа или решения нет" когда D<0.
Добрый день Камиль. Программа по вычислению корней квадратного уравнения - показательная, вероятнее всего она будет и в домашнем задании.
УдалитьНачнем разбор.
1) Почему вы решили что, коэффициенты квадратного уравнения обязательно целые числа? Ну предположим это ваше условие, тогда поговорим о дискриминанте. Рассмотрим выражение для его вычисления.
pow(b,2)-4*a*c;
pow(b,2)- вернет тип double. 4*a*c - будет целого типа, так как все переменные целые. Получится вы будете складывать double + int. в этом ничего плохого нет, результат получится типа double, потому что тип double больше (главнее). Если говорить на языке математики, то все целые числа являются подмножеством всех вещественных чисел. Это немножко затрагивает тему преобразования типов, о которой будем говорить позже. А теперь ошибка, мы присваиваем тип double переменной D типа int. В нашем случае число будет тоже целое, потому как a,b,c целые, НО представьте если бы они были вещественные и тогда дискриминант получился бы равным, например, 4.3. 4.3 Преобразовалась бы к типу int и осталось бы всего 4. получился бы дискриминант равный 4. И программа считала бы корни с ошибкой. Так делать не стоит. За этим надо следить. Вот порядок типов int < float < double. Если присваивать меньший тип большему, то ничего особенного не случился, но если присваивать больший тип, меньшему может произойти потеря точности вычислений.
2. Если мы подключаем библиотеку с какой либо функцией то нам в программе не следует опять писать её описание. Т.е. вот эти строчки
double pow(double x,double y);
double sqrt(double x);
не нужны.
3. Зачем объявлять дополнительную переменную x? Ведь можно сохранять и в x1 или x2. У нас ведь либо одна ветка выполняется, либо другая. Это конечно не ошибка, но нерациональное использование памяти.
4. Теперь по поводу условий. Разберем условие:
если D>=0 то 2 корня или 1 корень
иначе D<0 то в области вещественных чисел корней
нет.
Если первое условие выполнится, то понадобится еще один выбор, чтобы определить сколько корней будет, значит добавится еще одно условие вложенное.
Теперь попробуйте написать программу, с учетом этих замечаний.
возьму на себя смелость добавлю еще одно замечание:
Удалитьвыражение x1=(-b+sqrt(D))/2*a; считается не корректно так как деление производится не на весь знаменатель целиком, а по порядку сначала на два, а за тем на а.
чтоб все считалось правильно надо писать так x1=(-b+sqrt(D))/ (2*a);
Задание 3.
ОтветитьУдалить#include "stdio.h"
int main(void)
{
int a,b,a1,b1;
printf("Vvedite chetyre celih chisla ot 1 do 8: ");
scanf("%d %d %d %d", &a,&b,&a1,&b1);
if ((a==a1)||(b==b1))
printf("YES\n");
else
printf("NO\n");
return 0;
}
Возможно сделано не так как надо, но она работает :)
Добрый вечер Dispose. Всё хорошо.
ОтветитьУдалить#include "stdio.h"
ОтветитьУдалить#include "math.h"
int main(void)
{
float a,b,c,x1,x2;
double D;
printf("Vvedite a b c 4erez probel\n Primer 3x*x-6x+3\n a=3 b=-6 c=3\n");
scanf("%f %f %f",&a,&b,&c);
printf("a=%f,b=%f,c=%f\n",a,b,c);
D=pow(b,2)-4*a*c;
printf("D=%f\n",D);
if (D>=0)
{
if (D>0)
{
x1=(-b+sqrt(D))/2*a;
x2=(-b-sqrt(D))/2*a;
printf("x1=%f,x2=%f\n",x1,x2);
}
else
{
x1=-b/(2*a);
printf("x=%f\n",x1);
}
}
else
{
printf("KompleksnbIe 4isla ili resheniya net\n");
}
return(0);
}
Задание 1
ОтветитьУдалить#include "stdio.h"
#include "math.h"
int main(void)
{
float a;
double x;
scanf("%f",&a);
x=sqrt(pow(a,2));
printf("%f\n",x);
return(0);
}
Задание 3
ОтветитьУдалить#include "stdio.h"
int main(void)
{
int a,b,a1,b1;
printf("Vvedite 4etbIri celbIh 4isla ot 1 do 8\n");
scanf("%d%d%d%d",&a,&b,&a1,&b1);
printf("Pervaya kletka=%d,%d.Vtoraya kletka=%d,%d\n",a,b,a1,b1);
if ((a==a1)||(b==b1))
{
printf("yes\n");
}
else
{
printf("no\n");
}
return(0);
}
Написана с ошибками
УдалитьЕсли мы возьмем отрицательное числа,либо числа отличные от условия 1<=x<=8 ,не соблюдая условие,то задача будет решаться,что не логически при (-2,4) (-2,100)...
Задание 5.
ОтветитьУдалить#include
int main(void)
{
int n,a,b;
printf("Vvedite chislo ot 1 do 100: ");
scanf("%d", &n);
if(n<100)
if(n>=11&&n<=14)
{
printf("Na lugu pasetsya %d korov \n", n);
}
else
{
b=n%10;
if(b==1)
printf("Na lugu pasetsya %d korova \n", n);
if(b>=2&&b<=4)
printf("Na lugu pasetsya %d korovy \n", n);
if(b>=5&&b<=9)
printf("Na lugu pasetsya %d korov \n", n);
else
a=b%10;
if(a==0)
printf("Na lugu pasetsya %d korov \n", n);
}
return 0;
}
Добрый день Камиль.
ОтветитьУдалить1) Предполагалось не такое решение, а с помощью конструкции if-else. Но будем считать что всё верно. Хотя это не оптимально. Ибо даже если число положительное все операции всё равно выполняются. При том, операции очень ресурсоемкие. Если есть желание перепишите эту программу, не использую вообще библиотеку math.h
3) Хорошо.
4) Хорошо.
Добрый вечер Dispose.
ОтветитьУдалить5) Намудрили. Ввели непонятную переменную а, в которой абсолютно нет толку. Ввели лишнюю проверку для 100. Программа работает, но на некоторых данных после вывода строки на экран слетает (17 например). Переменная а не инициализирована, а с ней происходит сравнение. Перепишите, убрав указанные недостатки. =)
Задание 1
ОтветитьУдалить#include "stdio.h"
int main(void)
{
float x;
scanf("%f",&x);
if (x<0)
{
printf("%f\n",-x);
}
else
{
printf("%f\n",x);
}
return(0);
}
#include "stdio.h"
ОтветитьУдалитьint main(void)
{
int a,b;
scanf("%d %d",&a,&b);
if (((a>30000)||(b>30000))||((a<-30000)||(b<-30000)))
{
printf("nevernbIe zna4eniya\n");
}
else
{
if((a==0)&&(b!=0))
{
printf("no solution\n");
}
else
{
if((a==0)&&(b==0))
{
printf("many solution\n");
}
else
{
if (b%a!=0)
{
printf("no solution\n");
}
else
{
printf("%d\n",b/a);
}
}
}
}
return(0);
}
if(((n%10>4)&&(n%10<=9))||(n%10==0))
ОтветитьУдалить{
printf("%d korov\n",n);
}
Исправленная строка кода.
Добрый день Камиль.
ОтветитьУдалить1)Да, хорошо. Хотя можно обойтись и неполной конструкцией if.
2) Хорошо. Но я не понимаю, что за необходимость проверять входные данные
if (((a>30000)||(b>30000))||((a<-30000)||(b<-30000)))
В условии написано, что входные данные не превышают эти значения, вы только усложняете себе задачу этими проверками. Не надо проверять данные, если они заданны условием.
5)Хорошо, только опять ненужная проверка
if(n>=100)
Ну и напоминаю, соблюдайте формат вывода. Не korovbI, а korovy.
Задание 1.
ОтветитьУдалить#include
int main()
{
float a;
printf("Vvedite veschestvennoe chislo:");
scanf("%f",&a);
if (a<0)
printf("%f",-a);
else
printf("%f",a);
return 0;
}
Задание 2.
#include
int main()
{
int a,b;
scanf("%d%d",&a,&b);
if ((a==0)&&(b!=0))
printf("no solution");
else
{
if ((a==0)&&(b==0))
printf("many solutions");
else
{
if (b%a!=0)
{
printf("no solution");
}
else
{
printf("%d",b/a);
}
}
}
return 0;
}
Задание 3.
#include "stdio.h"
int main(void)
{
int a,b,a1,b1;
printf("Vvedite parametru kletok ot 1 do 8");
scanf("%d%d%d%d",&a,&b,&a1,&b1);
printf("Pervaya kletka=%d,%d.Vtoraya kletka=%d,%d\n",a,b,a1,b1);
if ((a==a1)||(b==b1))
{
printf("yes\n");
}
else
{
printf("no\n");
}
return(0);
}
Задание 4.
Задание 5.
Да-да-да.
УдалитьN1
ОтветитьУдалить#include "stdio.h"
int main (void)
{
float x;
printf(" vvedite chislo:");
scanf("%f", &x);
if (x>=0)
printf( "modul vachego chisla;%f", x);
else
x*=-1;
printf(" vi videte modul vashego chisla :%f", x);
return(0);
}
Сойдет. Хотя можно и лучше. Без ветки элс, и одним printf.
Удалитьзадание 2
ОтветитьУдалить//программа решения уравнений вида:ax=b
#include "stdio.h"
int main (void)
{
float x,a,b;
printf("vvedite chislo a i b");
scanf(" %f %f", &a,&b);
if ((a==0)||(b==0))
{
printf(" no solutions");
}
else
{x=a/b;
printf("%f- koren urvnenia",x);
}
return(0);
}
Неправильно. Не учтены несколько случаев. Например если b=0, то для любого а != 0, ответ есть. Это х=0.
Удалить//третье зажание
ОтветитьУдалить#include "stdio.h"
#include
using namespace std;
int main ()
{
int x, y, x1, y1;
printf("Vvedite chetire cifri cherez probel, opredeliayushie nachalnoe i konechnoe polozhenie ladyi: ");
scanf("%i%i%i%i", &x, &y, &x1, &y1);
if ((x==x1) || (y==y1))
{
cout<<"YES";
}
else
{
cout<<"NO";
}
cout<<"\n";
return 0;
}
//четвертое задание
ОтветитьУдалить#include "stdio.h"
#include
#include
using namespace std;
int main ()
{
int a, b, c, d;
float x1, x2, d1;
cout<<"Vvedite znacheniya a b c cherez probel dlia formuli a(x*x)+bx+c=0 : ";
scanf("%i %i %i", &a ,&b , &c);
d=b*b-4*a*c;
d1=sqrt(float(d));
if (d>0)
{
x1=(-b-d1)/(2*a);
x2=(-b+d1)/(2*a);
cout<<"Dva kornia,\nx1="<<x1<<"\n"<<"x2="<<x2;
}
if (d==0)
{
x1=-b/2*a;
cout<<"x="<<x1;
}
if (d<0)
{
cout<<"Deystvitelnih korney net";
}
cout<<"\n";
return 0;
}
А использовать в одной программе cout и scanf вообще очень-очень плохо. =)
Удалить//пятое задание
ОтветитьУдалить#include "stdio.h"
#include
#include
using namespace std;
int main ()
{
int n, a;
cout<<"Vvedite chislo menshe 100: ";
cin>>n;
if (n>9)
{
a=n-n/10*10;
if ((a==1) && (n!=11))
{
cout<<"Na pole posetsa "<=2) && (a<=4)) && ((n<12) && (n>20)))
{
cout<<"Na pole posetsa "<=5) && (a<=9)) || (a==0) || ((n>=11) && (n<=19)))
{
cout<<"Na pole posetsa "<=2) && (n<=4))
{
cout<<"Na pole posetsa "<=5) && (n<=9))
{
cout<<"Na pole posetsa "<<n<<" korov";
}
}
cout<<"\n";
return 0;
}
что-то оно код программы перемешало ((
УдалитьРешения надо писать на чистом Си.=)
УдалитьЗадание № 1
ОтветитьУдалить#include
int main(void)
{
float x;
printf("Vvedite chislo x\n");
scanf("%f", &x);
if (x>-1)
{
printf("Modul chisla pologitelniy x=%.0f\n", x);
}
else
{
printf("Modul chisla otricatelniy x=%.0f\n", x);
}
return(0);
}
А как же все числа из промежутка (0;-1] ? Для них модуль тоже определен. =)
УдалитьЗадание № 2
ОтветитьУдалить#include
#include
int main(void)
{
int a,b;
float x;
printf("Programma resheniya yravneniya ax=b\n");
printf("Vvedite celoe chislo a\n");
scanf ("%d", &a);
printf("Vvedite celoe chislo b\n");
scanf("%d", &b);
x=(float)b/a;
if (!((a>30000)||(a<-30000)||(b>30000)||(b<-30000)))
{
if (x!=0)
{
if (a==0)
{
printf("many solutions\n");
}
else
{
printf("x=%.2f\n", x);
}
}
else
{
printf("no solution\n");
}
}
else
{
printf("Nevernoe vvedenie dannih\n");
}
return(0);
}
Сразу же неправильно. Лишняя проверка
Удалитьif (!((a>30000)||(a<-30000)||(b>30000)||(b<-30000)))
Уже в условии задано, что числа находятся в этих пределах.
А еще, у тебя вычисляется х сразу, а это неправильно.
Во-первых, а может быть равно нулю, а во вторых, даже если ответ не целое число будет, ты его все равно уже посчитал. Нерационально. Переделай. =)
Задание № 3
ОтветитьУдалитьнемножко своего добавил))
#include
#include
int main(void)
{
int a,b,c,d;
printf("Vvedite nomer stolbca i stroki pervoy kletki:\n");
scanf("%d %d", &a,&b);
printf("Vvedite nomer stolbca i stroki vtoroy kletki:\n");
scanf("%d %d", &c,&d);
if (((a>=1)&&(b>=1))&&((a<=8)&&(b<=8)))
if ((a==c)||(b==d))
printf("YES\n");
else
{
printf("NO\n");
}
else
{
printf("Nevernoe vvedenie dannih\n");
}
return(0);
}
Опять лишняя проверка if (((a>=1)&&(b>=1))&&((a<=8)&&(b<=8)))
УдалитьНе надо ничего добавлять. =)
Задание № 4
ОтветитьУдалить#include
#include
int main(void)
{
float a,b,c;
float x,x1,x2,D;
printf("Programma resheniya kvadratnogo yravneniya ax2+bx+c=0\n");
printf("input a\n");
scanf("%f", &a);
printf("input b\n");
scanf("%f", &b);
printf("input c\n");
scanf("%f", &c);
D=pow(b, 2)-(4*a*c);
if (D>=0)
{
if (D==0)
{
x=-b/(2*a);
printf("yravnenie imeet odin koren x=%.2f\n", x);
}
else
{
x1=(-b-sqrt(D))/(2*a);
x2=(-b+(sqrt(D)))/(2*a);
printf("yravnenie imeet dva kornya x1=%.2f x2=%.2f\n", x1, x2);
}
}
else
{
printf("no solution\n");
}
return(0);
}
Да. Хорошо. =)
УдалитьЗадание № 5
ОтветитьУдалить#include
#include
int main(void)
{
int n;
float x;
printf("Vvedite chislo do 100\n");
scanf("%d", &n);
if (n<100)
{
if ((x=n%10)>=0 && (x=n%10)!=1)
{
if ((x=n%10)>=2 && (x=n%10)<5)
{
printf("Na lugu pasetsya %.0d korovy\n", n);
}
else
{
printf("Na lugu pasetsya %.0d korov\n", n);
}
}
else
{
printf("Na lugu pasetsya %0.d korova\n", n);
}
}
else
{
printf("ne vernoe vvedenie dannih\n");
}
return(0);
}
11-14 неправильные ответы.=)
УдалитьЗадание № 5
ОтветитьУдалить#include
#include
int main(void)
{
int n;
float x;
printf("Vvedite chislo do 100\n");
scanf("%d", &n);
if (n<100)
{
if ((x=n%10)>=0 && (x=n%10)!=1)
{
if ((x=n%10)>=2 && (x=n%10)<5)
{
printf("Na lugu pasetsya %.0d korovy\n", n);
}
else
{
printf("Na lugu pasetsya %.0d korov\n", n);
}
}
else
{
printf("Na lugu pasetsya %0.d korova\n", n);
}
}
else
{
printf("ne vernoe vvedenie dannih\n");
}
return(0);
}
11-14 коров, неверные результаты. =)
УдалитьВот мои решения заданий 1, 3 и 5. Задание 2-е и 4-е мне сложно решить, так как есть пробелы по алгебре. Скажите, пожалуйста, обязательно ли знать хорошо алгебру (квадратные уравнения, целые корни…), что бы стать хорошим программистом? Или можно не уходить далеко в математику, а ограничиться базовыми арифметическими знаниями?
ОтветитьУдалить//Урок 5 Задание 1
/*#include
int main ()
{
float a,b;
scanf("%f",&a);
if (a<0)
{
b=-a+-0;
// это я сам придумал, а можно еше так b=a*(-1);
printf("%.0f eto modul chisla |%.0f|\n",b,a);
}
else
{
printf("%.0f eto modul chisla |%.0f|\n",a,a);
}
return (0);
}*/
//Урок 5 Задание 3 (CHESS)
/*#include
int main ()
{
int a1,a2,b1,b2;
printf("Vvedite 4 cifry cherez probel ot 1 do 8\n");
scanf("%d %d %d %d",&a1,&a2,&b1,&b2);
if ((a1==b1)||(a2==b2))
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return (0);
}*/
//Урок 5 Задание 5 (KOROVY)
#include
int main ()
{
int n;
scanf("%d",&n);
if (!(n==1))
{
if ((n==2)||(n==3)||(n==4))
{
printf("Na lugu pasutsya %d korovy\n",n);
}
else
{
printf("Na lugu pasutsya %d korov\n",n);
}
}
else
{
printf("Na lugu pasetsya %d korova\n",n);
}
return (0);
}
Погуглите про квадратные уравнения с двумя ... корнями.
УдалитьПока я не поискал в интернете и потом не написал разные варианты на бумажке мне тоже было непонятно.
Виктор, это же тоже основы математики.
ОтветитьУдалитьНе могу ответить на ваш вопрос.Во-первых, надо определиться с понятием "хороший программист", и во-вторых, я сам не являюсь профессионалом, поэтому не могу сказать ничего конкретного. Но думаю, все зависит от задач, которые вы собираетесь решать, с помощью программирования. Математический пакет с такими знаниями, вы явно не напишете. Многие задачи моделирования, тоже требуют математической подготовки.
Добрый вечер, я очень рад что нашел ваш блог,уже с его помощью немного начинаю разбираться в Си, написал первую свою программу которая по-настоящему мне нравится спасибо огромное!
ОтветитьУдалитьвот зацените
ОтветитьУдалить//программа решающая квадратные уравнения типа X(кв)+bx+c=0
#include
#include
#include
int main(void)
{
setlocale(LC_ALL, "");
printf("% Программа решающая квадратные уравнения типа X2+bx+c=0 \n для начала введите ваши значения (a b c) с запятой пример: 1,2 \n");
float a, b, c, D;
printf("число а ");
scanf("%f",&a);
printf("\n");
printf("число b ");
scanf("%f", &b);
printf("\n");
printf("число c ");
scanf("%f",&c);
printf("\n");
printf("a: %f b: %f c: %f \n", a, b ,c);
D=pow(b,2)-4*a*c;
printf("D= %f \n",D);
if (D<0)
{
printf("Уравнение не имеет корней \n");
}
else
{
float x1, x2, x;
if((D>0)&&(D!=0))
{x1=(-b+sqrt(D))/2*a;
printf("x1: %f \n",x1);
x2=(-b-sqrt(D))/2*a;
printf("x2 : %f \n", x2);}
else
{x=-b/(2*a);
printf("x: %f \n",x);}
}
return (0);
}
для того кто изучает Си 4-й день думаю неплохо
Владимир.
ОтветитьУдалитьРешение задачи 2.
#include
int main()
{
double a, b, x;
printf("Vvedite dva chisla\n");
scanf("%lf %lf",&a, &b);
if(a==0)
printf("no solution\n");
else if(b==0)
printf("mani solution\n");
else
{x=b/a;
printf("x=%.lf\n",b/a);
}
return 0;
}
решение задачи 3
#include
int main()
{
int a,a1,b,b1;
printf("vvedite coordinati pervoy kletki\n");
scanf("%d %d",&a,&b);
printf("vvedite coordinati vtoroy kletki\n");
scanf("%d %d",&a1,&b1);
if(a==a1 && b==b1)
printf("nekorrektniy vvod\n");
else if(a==a1||b==b1)
printf("YES\n");
else
printf("NO\n");
return 0;
}
Решение задачи 4
#include
#include
int main()
{
double a,b,c,x,x1,x2;
printf("Vvedite a b c\n");
scanf("%lf %lf %lf",&a,&b,&c);
if(a==0||(b*b-4*a*c)<0)
printf("no solutions\n");
else if ((b*b-4*a*c)==0)
{ x=-b/2*a;
printf("x=%.lf\n",x);
}
else
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("x1=%lf\nx2=%lf\n",x1,x2);
}
return 0;
}
решение задачи 5.
#include
int main()
{
int n;
printf("Vvedite chislo\n");
scanf("%d",&n);
if(n==1||n%10==1)
printf("%d korova\n",n);
else if((n>=2&&n<=4)||(n%10>=2&&n%10<=4))
printf("%d korovy\n",n);
else
printf("%d korov\n",n);
return 0;
}
include
ОтветитьУдалить#include
int main(void)
{
float a,b,c,x1,x2,d;
printf("Vvesti znachenie argumentov(a!=0) a b c\n");
scanf("%f %f %f",&a,&b,&c);
d=(b*b)-(4*a*c);
if (d<0)
printf("D = %f < 0\n no solutions\n",d);
else
if (d=0)
{
x1=-b/(2*a);
printf("D = %f = 0\n odin koren\n x = %f\n",d,x1);
}
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("D = %f > 0\n dva kornya\n x1 = %f x2 = %f\n",d,x1,x2);
}
return(0);
}
не могу найти ошибку, нуждаюсь в помощи
Вот ошибка if (d=0)
УдалитьСпасибо, что помогаете мне. =))) Хотя этому сообщению уже год, и вряд ли автор прочтет ответ, но все равно, такая практика очень полезна.
Удалить//про коров
ОтветитьУдалить#include;
int main(void)
{
int a,b,d;
printf("Vvedite kolichestvo korov:\n");
scanf("%d",&a);
b=a%10;
if((a==1)||((b==1)&&(a!=11)))
{
printf("Na lugu pasetsya %d korova\n",a);
}
else
{
if((4<a)&&(a<21))
{
printf("Na lugu pasetsya %d korov\n",a);
}
else
{
if(((4<b)&&(b<10))||(b==0))
{
printf("Na lugu pasetsya %d korov\n",a);
}
else
{
printf("Na lugu pasetsya %d korovy\n",a);
}
}
}
return(0);
}
Задание №1
ОтветитьУдалить#include
int main()
{
float x;
printf("Vvedite chislo\n");
scanf("%f", &x);
if(x>=0)
{
printf("%f\n", x);
}
else
{
x=-x;
printf("%f\n", x);
}
}
Задание №5
ОтветитьУдалить#include
int main()
{
int n;
printf("Vvedite zheloe chislo 0=11&&n<=14)
{
printf("Na lugu pasetsya %d korov\n", n);
}
else
{
if((n%10)==1)
{
printf("Na lugu pasetsya %d korova\n", n);
}
if((n%10)>=2&&(n%10)<=4)
{
printf("Na lugu pasutsya %d korovy\n", n);
}
if(((n%10)>=5&&(n%10)<=9)||(n%10)==0)
{
printf("Na lugu pasetsya %d korov\n", n);
}
}
}
Задание №4
ОтветитьУдалить#include
#include
int main()
{
float a, b, c, d;
printf("ax^2+bx+c=0\nVvedite cherez probel 3 chisla, a, b, c\n");
scanf("%f%f%f", &a,&b,&c);
if(a==0)
{
if(b!=0)
printf("%f\n", ((-c)/b));
else
{
if(c==0)
printf("Many solutions\n");
else
printf("No solutions\n");
}
}
else
{
d=pow(b,2)-4*a*c;
if(d>0)
printf("%f %f\n", (((-b)+sqrt(d))/(2*a)), (((-b)-sqrt(d))/(2*a)));
if(d==0)
printf("%f\n", ((-b)/(2*a)));
if(d<0)
printf("No solutions\n");
}
}
1-ое задание.
ОтветитьУдалить#include
int main(void)
{
int a;
scanf("%d",&a);
if (a>=0)
{
printf("%d",a);
}
else
{
a=a*(-1);
printf("%d",a);
}
return(0);
}
Работает, но можно чуточку упростить. Попробуйте обойтись одним вызовом printf. )
Удалить#include
ОтветитьУдалить#include
int main(void)
{
int n,x;
printf("vvecti chislo :");
scanf("%d",&n);
if(n<100)
{
if((x=n%10)==1&&n!=11)
{
printf("%d korova",n);
}
if((x=n%10)>=2&&(x=n%10)<5&&n!=12&&n!=13&&n!=14)
{
printf("%d korovy",n);
}
if((x=n%10)>=5&&(x=n%10)<=9||n==11||n==12||n==13||n==14)
{
printf("%d korov",n);
}
}
return 0;
}
А как же числа 20, 30, 40, 50, 60 и т.д.? Для них ничего не выводится вообще)
Удалить#include
ОтветитьУдалитьint main(void)
{
int n;
scanf("%d",&n);
printf("Na lugu pasetsya %d korov",n);
if ((n<10 || n>20) && (n%10==1)) putchar(97);
if ((n<10 || n>20) && (n%10>1 && n%10<5)) putchar(121);
printf("\n");
}
Оригинально?)
Неплохо.=))
УдалитьДобавлю в образцовые решения.
//Задание 4
ОтветитьУдалить#include
#include
int main()
{
float D, a, b, c, x1, x2;
double x;
printf("Vvedite 3 veshchestvenych chisla cherez probel dlja urovnenija\nax^2+bx+c=0\n");
scanf_s("%f %f %f", &a, &b, &c);
printf("vy vveli a=%.0f b=%.0f c=%.0f\n", a, b, c);
D = b*b - 4*a*c;
if ((a==0) || (D<0))
printf("no solution\n");
else
{
if (D>0)
{
x1 = (-b + sqrt(D)) / 2*a;
x2 = (-b - sqrt(D)) / 2*a;
printf("x1 = %.0f\nx2 = %.0f\n", x1, x2);
}
else
{
x = -b / (2*a);
printf("%.0f", x);
}
}
return(0);
}
прошу прощения...
Удалить#include "stdio.h"
#include "math.h"
Общий ход решения верный. Думаю Вы компилировали и проверяли самостоятельно.
УдалитьЕсть вопрос. Чем обусловлен выбор типа double для переменной x?
Здравствуйте, KaDeaT!
ОтветитьУдалитьБольшое Вам спасибо за ваши уроки, полезные и понятные)
Вот мой пример решения 4й задачи:
#include "stdio.h"
#include "math.h"
int main()
{
float a,b,c,d,x;
printf("ax2+bx+c=0, enter a b c\n");
scanf("%f %f %f",&a,&b,&c);
d=b*b-4*a*c;
if (a==0&&b==0&&c==0)
printf("too many solutions\n");
else
{
if (d<0||(b==0&&a==0))
printf("no solutions\n",d);
else
{
if(a==0)
{
x=-c/b;
printf("x=%.2f\n",x);
}
else
{
if (d==0)
{
x=fabs(-b/(2*a));
printf("d=%f, x=%f\n",d,x);
}
else
{
if(d>0)
{
x=fabs((-b+sqrt(d))/(2*a));
printf("d=%f, x1=%f, x2=%f\n",d,x,-x);
}
}
}
}
}
return(0);
}
...и 5й задачи)
ОтветитьУдалить#include "stdio.h"
int main()
{
int a,b;
printf("enter number of your cows\n");
scanf("%d",&a);
if(a<9)
{
if(a==1)
printf("Na lugu pasetsya %d korova\n",a);
else
{
if(a>1&&a<5)
printf("Na lugu pasetsya %d korovy\n",a);
else
printf("Na lugu pasetsya %d korov\n",a);
}
}
else
{
b=a%10;
if(b==1)
printf("Na lugu pasetsya %d korova\n",a);
else
{
if(b>1&&b<5)
printf("Na lugu pasetsya %d korovy\n",a);
else
printf("Na lugu pasetsya %d korov\n",a);
}
}
return(0);
}
Задание 1
ОтветитьУдалить#include
int main(void)
{float x;
scanf("Vvedite chiclo %f",&x);
if x<0;{
x*=-1;}
printf("Modul chisla x raven %f",x);
return (0);
}
#include
ОтветитьУдалитьint main(void)
{int a,b;
a<30000;
b<30000;
scanf("Vvedite dva zelich chisla menshe 30000 %d,%d",&a,&b);
if a==0;
printf("no solotion");
if ((sqrt(%d/%d))>0),a,b;
printf ("many solutions");
return(0);
}
задание 3
ОтветитьУдалить#include
int main(void){
int a,b,al,bl;
scanf("%d,%d,%d,%d",&a,&b,&al,&bl);
if (a==al)||(b==bl);
{printf("Yes");}
else {
printf("No");}
return(0);
}
в чем может быть ошибка? сверилась с ответами, разницы не вижу)
выдает
: warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(306): см. объявление 'scanf'
-error C2143: синтаксическая ошибка: отсутствие ";" перед "||"
- ";": обнаружен пустой контролируемый оператор; это правильно?
- error C2181: недопустимый else без парного if
даже когда ставлю перед "||" ";"б все равно пишет ошибка, отсутствие ";" перед "||"
Удалитьвсе, исправила)
Удалить#include
int main(void){
int a,b,al,bl;
scanf("%d,%d,%d,%d",&a,&b,&al,&bl);
if ((a==al)||(b==bl))
{printf("Yes");}
else {
printf("No");}
return(0);
}
Поздравляю. Вы молодец! Самостоятельно справились. =))
Удалить//программа про коров
Удалить#include
#include
int main(void)
{
int n, n2;
float n1;
printf("Vvedite kol-vo korov\n");
scanf("%i", &n);
n1=n/10;
n2=n-(int)n1*10;
if (((n1>=0.5)&&(n1<=1.9))||((n2>=5)&&(n2<=9))||(n2==0)||(n2==1))
{
if (((n2==1)||(n==1))&&(n!=11))
{
printf("Na lygy pasetc9 %i korova\n", n);
}
else
{
printf("Na lygy pasetc9 %i korov\n", n);
}
}
else
{
printf("Na lugy pasytc9 %i korovi\n", n);
}
return(0);
}
Хорошо. ))
УдалитьЗадание 3
ОтветитьУдалить#include
#include
int main ()
{
int a1,b1,a2,b2;/*a-nomer stolbca, b- nomer strok*/
int c,f;
printf("Vvedite a1:");
scanf("%d",&a1);
printf("Vvedite b1:");
scanf("%d",&b1);
printf("Vvedite a2:");
scanf("%d",&a2);
printf("Vvedite b2:");
scanf("%d",&b2);
if((a1>0 && a1<9)&&(b1>0 && b1<9)&&(a2>0 && a2<9)&&(b2>0 && b2<9))
{
c=a1+b1;
printf("c=%d\n",c);
f=a2+b2;
printf("f=%d\n",f);
}
else
{
printf(" Chitai zadanie\n");
}
if((f==c+1)||(c==f+1))
{
printf("YES!");
}
else
{
printf("NO!");
}
return 0;
}
Не правильно. (1,1) (1,4) отвечает NO, хотя должно быть YES!)))
УдалитьЗадание 1.
ОтветитьУдалить#include
int main(void)
{
float x,y;
printf("Vvedite chislo \n");
scanf("%f",&x);
if(x<0)
{
x*=-1;
}
printf("Modul chisla=%-9.0f\n",x);
return (0);
}
Да.=)) Но можно обойтись и без умножения. Просто присвоить -x. ))
Удалить#include "stdio.h"
ОтветитьУдалить#include "math.h"
int main (){
int a,b;
printf("Enter a and b\n");
scanf("%d %d",&a,&b);
if((a==0)&&(b==0))
printf("equation has many solutions\n");
else{
if(((a==0)&&(b!=0))||((a!=0)&&(b==0)))
printf("equation has no sollutions\n");
else
printf("%d",b/a);
}
return(0);
}
Нет, не правильно.
Удалить#include "stdio.h"
ОтветитьУдалить#include "math.h"
int main(void){
int a,b,a1,b1;
printf("Please,enter 4 numbers in range [1;8]:\n");
scanf("%d %d %d %d", &a,&b,&a1,&b1);
if( ((1<=a)&&(a<=8)) && ((1<=b)&&(b<=8)) && ((1<=a1)&&(a1<=8)) && ((1<=b1)&&(b1<=8)))
{
if((a==a1)||(b==b1))
{
if((a==a1)&&(b==b1))
{
printf("Please, vvedite chislovue paru kotorie budut otlichatcya");
}
else
{
printf("YES");
}
}
else
{
printf("NO");
}
}
else
{
printf("V vvedennih vami cifrah est' chislo ili chisla ne vhodyashee/shie v promejutok [1;8], Please, try again");
}
return(0);
}
А зачем вы подключили библиотеку math.h?
УдалитьМного всего лишнего, но работать должно правильно. )) Хорошо.
Скажите, почему у меня при компиляции листингов 5.3 и 5.9 выходит сообщение об ошибке: Ошибка 1 error C3861: scаnf: идентификатор не найден
ОтветитьУдалитьСотри и заново напиши scanf
УдалитьМне помогло
Быть может потому, что вы копировали его отсюда, а не все символы скопировались удачно. Такое бывает. )))
УдалитьЗадание 3
ОтветитьУдалить#include
int main()
{
int a,b,c,d;
printf("Danno shahmatnoe pole 8x8\n");
printf("Vvedite raznie nachalnie koordinati ladii i konechbie:\n");
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("Nachalnie koordinati [%d,%d]\n",a,b);
printf("Konechnie koordinati [%d,%d]\n",c,d);
if(a>=1 && a<=8 && b>=1 && b<=8 && c>=1 && c<=8 && d>=1 && d<=8 )
{
if((a==c)&&(b==d))
{
printf("Ya prosil vvesti raznie\n");
}
else
{
if((a==c)||(b==d))
printf("YES\n");
else
printf("No\n");
}
}
else
printf("Error\n");
return 0;
}
Правильно, но как обычно в своем стиле, много всякого лишнего кода. )))
УдалитьА что именно лишнего)Я же только учился писать)Вместе исправим мои недочеты)
УдалитьЗадаине 1
ОтветитьУдалить#include
int main(void)
{
float a;
printf("Vvedite chislo :");
scanf("%f",&a);
printf("Ishodnoe chislo: a=%.2f\n",a);
if(a<0)
{
printf("module chisla: |a|=%.2f\n",a*(-1));
}
else
{
printf("module chisla: |a|=%.2f\n",a);
}
return 0;
}
Задание 2
#include
int main(void)
{
float a,b;
printf("Vvedite celie a i b dly resheniy uravneniy ax=b\n");
scanf("%f%f",&a,&b);
if((a==0)&&(b!=0))
printf("no solution\n");
else
{
if((a==0)&&(b==0))
printf("many solutions\n");
else
{
if(b/a!=0)
printf("x=%.2f",b/a);
else
printf("x=0");
}
}
return 0;
}
Задание 5
Удалить#include
int main()
{
int n,b;
printf("Vvedite chislo korov do 100: \n");
scanf("%d",&n);
b=n%10;
if(b==1 && n!=11)
{
printf("%d korova\n",n);
}
else
if(b>=5 && b<=9 || b==0 || n>=11 || n<=14 )
printf("%d korov\n",n);
if(b>=2 && b<=4 && n!=12 && n!=14 && n!=13)
printf("%d korovy\n",n);
return 0;
}
Задание 4
Удалить#include
#include
int main()
{
float a,b,c,x1,x2,D;
printf("Vvedite a,b,c\n");
scanf("%f%f%f",&a,&b,&c);
D=(b*b)-(4*a*c);
if( D>0 )
{
x1=(-b-sqrt(D))/(2*a);
x2=(-b+sqrt(D))/(2*a);
printf("x1=%.2f\tx2=%.2f\n",x1,x2);
}
if (D==0) // если записать if(D=0) не хочет работать ))
{
x1=(-b)/(2*a);
printf("x1=%.2f\n",x1);
}
else
printf("no solution\n");
return 0;
}
1. Слишком много всего.
Удалить2. Нет, не все правильно.Нужны решения в целых числах. ))
5. Не правильно.Например, 94 выведет не правильно. должно быть 94 коровы.
Удалить4. хорошо.
УдалитьЕстественно не хочет работать. Вам разве не понятно, почему так? ))
5 задание
Удалить#include
int main()
{
int n,b;
printf("Vvedite chislo korov do 100: \n");
scanf("%d",&n);
b=n%10;
if(b==1 && n!=11)
printf("%d korova\n",n);
else
{
if(b>=5 && b<=9 || b==0 || n>=11 && n<=14 )
printf("%d korov\n",n);
if(b>=2 && b<=4 && n!=12 && n!=14 && n!=13)
printf("%d korovy\n",n);
}
return 0;
}
У меня вопрос я ща позже напишу!!!!!!!!!!111
ОтветитьУдалитьЗадание 1
ОтветитьУдалить#include
int main()
{
float a;
printf("vvedite chislo \n");
scanf("%f", &a);
if(a<0)
{
a=-a;
}
printf("%f\n", a);
return(0);
}
Подскажите пожалуйста, почему у меня выводит число очень близкое к введённому, но не его?
Например вводим 78,76 выводит 78,7599999…
Во всем виновато машинное представление чисел с плавающей точкой. Компьютер оперирует только нулями и единицами. Работать с вещественными числами это для него проблема. Поэтому, в серьезных вычислениях на компьютере могут нужно очень серьезно за этим следить. )) Ну и уменьшите количество выводимых после запятой символов, округление даст вам ваше число. ))
УдалитьСама программа хорошо.
Задание 2
ОтветитьУдалить#include
int main()
{
int a,b;
printf("vvedite chisla a i b cherez probel \n");
scanf("%d %d", &a,&b);
if(a==0)
{
if (b!=0)
{
printf("no solution\n");
}
else
printf("many solutions\n");
}
else
{
b/=a;
printf("%d\n", b);
}
return(0);
}
Задание 3
#include
int main()
{
int a,b,c,d;
printf("vvedite koordinati dlya pervoi kletki cherez probel \n");
scanf("%d %d", &a,&b);
printf("vvedite koordinati dlya vtoroi kletki cherez probel \n");
scanf("%d %d", &c,&d);
if((a<1)||(a>8)||(b<1)||(b>8)||(c<1)||(c>8)||(d<1)||(d>8)||((a==c)&&(b==d)))
printf("NE NADO SHUTIT'!!!\n");
else
{ if ((a!=c)&&(b!=d))
printf("NO\n");
else
printf("Yes\n");
}
return(0);
}
эти , вроде работают...
Сразу вспоминается: "НЕ НАДО ШУТИТЬ С ВОЙНОЙ, БЛЯ!! ЗДЕСЬ ДРУГИЕ РЕБЯТА! ЭТО НЕ ГЕРМАНИЯ! ЭТО НЕ АФГАНИСТАН!"
Удалить=DDD
2. неправильно. Нужны решения в целых числах. Ну т.е. если у вас a=3 и b=4 то решений нет, так как решение не целое число.
3. Проверка введенных данных не особо нужна. Гарантируется что введенные данные будут "хорошими". В остальном хорошо.
задание 2
Удалить#include <>
int main()
{
int a,b,c;
printf("vvedite chisla a i b cherez probel \n");
scanf("%d %d", &a,&b);
if(a==0)
{
if (b!=0)
{
printf("no solution\n");
}
else
printf("many solutions\n");
}
else
{ c=b%a;
if (c!=0)
{
printf("no solution\n");
}
else
{
b/=a;
printf("%d\n", b);
}
}
return(0);
}
Ок. )
Удалить#include
ОтветитьУдалить#include
int main()
{
float a,b,c,d;
printf("vvedite tri chisla a , b , c cherez probel \n");
scanf("%f %f %f", &a,&b,&c);
if(a==0)
printf("NE NADO SHUTIT'!!!\n");
else
{
d=(b*b)-(4*a*c);
if (d<0)
printf("no solution\n");
else
{if (d==0)
{
c=-b/(2*a);// в с корень
printf("%f\n", c);
}
else
{
c=(-b+sqrt(d))/(2*a);
a=(-b-sqrt(d))/(2*a);
printf("%f \t%f \n", c,a);
}
}
}
return(0);
}
Не компилирую, думаю вы это и сами сделали. Вроде все верно. ))
УдалитьЗадание 5
ОтветитьУдалить#include
int main()
{
int a,b;
printf("vvedite chislo korov \n");
scanf("%d", &a);
b=a%10;
if(((a>4)&&(a<21))||((b>4)&&(b<10))||(b==0))
printf("Na lugu pasetsya %d korov\n", a);
else
{
if (b==1)
printf("Na lugu pasetsya %d korova\n", a);
else
printf("Na lugu pasetsya %d korovy\n", a);
}
return(0);
}
работат.
почему то опять не отображаются stdio.h и math.h...
УдалитьХорошо. )))
Удалить#include "stdio.h"
ОтветитьУдалить#include "iostream"
int main()
{
setlocale(LC_ALL, "Russian");
int a,b,c,d; //a,b - Начальная позиция. b,c - конечная позиция
printf("Введите данные начальной позиции:\nНомер столбца:");
scanf("%d",&a);
printf("Номер строки:");
scanf("%d",&b);
printf("Введите данные конечной позиции:\nНомер столбца:");
scanf("%d",&c);
printf("Номер строки:");
scanf("%d",&d);
if ((a>8||b>8||c>8||d>8)||(a==0||b==0||c==0||d==0))
if(a==0||b==0||c==0||d==0)
{
printf("Значение не должно равнятся нулю\n");
system("pause");
return(0);
}
else
if(a>8||b>8||c>8||d>8)
{
printf("Превышено значение\n");
system("pause");
return(0);
}
if ((a==c)||(b==d))
{
printf("Ход возможен\n");
}
else
{
printf("Ход невозможен\n");
}
system("pause");
return 0;
}
При значении "0" или больше "8" программа сообщает об ошибке и прекращает работу (ибо до цикла я ещё не дошёл, но уверен что там можно сделать повторное введение неверных данных).
Если работает, то все верно. Правильно думаете на счет цикла.
ОтветитьУдалить#include "stdio.h"
ОтветитьУдалить#include "math.h"
int main(void)
{
float a, b, c;
float x1, x2, D;
printf("vvedite znacheniya a, b, c cherez probel:");
scanf_s("%d %d %d", &a, &b, &c);
D = pow(b, 2) - 4 * a*c;
if (D >= 0) //если d>=0 тогда выполняются следующие 2 условия
{
if (D == 0) // первое условие d=0, тогда тогда один корень и считается по этой формуле
{
x1 = -b / (2 * a);
printf("imeet odin koren'\n x=%f\n", x1);
}
else // если d>0, тогда два корня и считается по следующим формулам
{
x1 = (-b + (sqrt(D)) / (2 * a));
x2 = (-b - (sqrt(D)) / (2 * a));
printf("imeet 2 kornya x1=%f, x2=%f\n", x1, x2);
}
else // если d<0 тогда вещественных корней нет
{
printf("no solution\n");
}
}
return(0);
}
Что не так сделал.
Пишет недопустимый else без парного if.
Уже устал переписывать. До этого работала, но при разных данных считала только один корень.
в скобках запутались. У вас второе else находится внутри первого if. )
Удалить#include
ОтветитьУдалить#include
int main()
{
float x;
printf("x=");
scanf("%f", &x);
x=x*(x!=0)*(-1+2*(x>0));
printf("|x|=%f\n", x);
getch();
return 0;
}
#include
#include
int main(void)
{
float a, x, b;
printf("a=");
scanf("%f", &a);
printf("b=");
scanf("%f", &b);
if(a==0, b!=0) printf("no solution");
else if(a==0, b==0) printf("many solutions");
else
{
x=b/a;
printf("x=%f\n", x);
}
getch();
return 0;
}
#include
#include
#include
int main()
{
float a, b, c, x, x1, x2, D;
printf("a=");
scanf("%f", &a);
printf("b=");
scanf("%f", &b);
printf("c=");
scanf("%f", &c);
D=b*b-4*a*c;
if(a==0)
{
x=-c/b;
printf("x=%f", x);
}
else if(D<0) printf("no answer\n");
else if(D==0)
{
x=-b/(2*a);
printf("x=%f", x);
}
else
{
x1=(-b+sqrt(D))/(2*a);
x2=(-b-sqrt(D))/(2*a);
printf("x1=%f\nx2=%f", x1, x2);
}
getch();
return 0;
}
#include
#include
#include
int main()
{
//Поле шахматной доски определяется парой чисел (a, b),//
//каждое от 1 до 8, первое число задает номер столбца, //
//второе – номер строки. Заданы две клетки. Определите,//
//может ли шахматная ладья попасть с первой клетки на //
//вторую за один ход. Входные данные: 4 целых числа от//
//1 до 8 каждое, первые два задают начальную клетку, //
//вторые два задают конечную клетку. Начальные и //
//конечные клетки не совпадают. Программа должна вывести//
//YES, если из первой клетки ходом ладьи можно попасть//
//во вторую или NO в противном случае//
int a1, b1, a2, b2;
printf("(a1,b1):");
scanf("%d %d", &a1, &b1);
printf("(a2,b2):");
scanf("%d %d", &a2, &b2);
if((a1>8)||(a1<1)||(a2>8)||(a2<1)||(b1>8)||(b1<1)||(b2>8)||(b2<1)) printf("ERROR\n");
else if((a1==a2)||(b1==b2)) printf("YES\n");
else printf("NO\n");
getch();
return 0;
}
#include
#include
int main()
{
int n;
printf("n=");
scanf("%d", &n);
if((n<1)||(n>100)) printf("ERROR\n");
else if((n==11)||(n==12)||(n==13)||(n==14)) printf("na lugu pasetsya %d korov\n", n);
else if(n%10==1) printf("na lugu pasetsya %d korova\n", n);
else if((n%10==2)||(n%10==3)||(n%10==4)) printf("na lugu pasetsya %d korovy\n", n);
else printf("na lugu pasetsya %d korov\n", n);
getch();
return 0;
}
1. Оригинально. Я использую этот код, в качестве небольшой головоломки. =))
УдалитьДумаю, что остальные программы тоже работаю, и дальше я могу не проверять.
#include
ОтветитьУдалить#include
int main(void)
{
int n, a;
printf("vvedite chislo ot 1 do 100:\n");
scanf("%d",&n);
if((n>=1)&&(n<100))
if((n>=11)&&(n<=14))
{
printf("Na lugu pasetsiy %d korov\n",n);
}
else
{
a=n%10;
if(a==1)
{
printf("Na lugu pasetsiy %d korova\n", n);
}
else
{
if((a>=2)&&(a<=4))
{
printf("Na lugu pasetsiy %d korovy\n",n);
}
else
{
printf("Na lugu pasetsiy %d korov\n",n);
}
}
}
else
{
printf("nevernoe chislo\n");
}
return(0);
}
Хорошо. =)
Удалить#include
ОтветитьУдалитьint main (void)
{
float x;
printf("Vvod chisla\n");8
scanf("%f", &x);
if(x>0)
{
printf("%f\n", x);
}
else
{
printf("%f\n", -x);
}
return(0);
}
Хотелось бы услышать комментарий по поводу кода моего. Это задание 1е. Спасибо.
У меня код работал. И там 8ка лишняя, сорри)
УдалитьМожно обойтись и без else. Попробуйте изменить программу так, как я говорю. )
Удалитьзадача №2 прием
ОтветитьУдалитьint main()
{
float a, b, x;
printf("give me \"a\" and \"b\" and I will tell you \"x\":\n");
scanf_s("%f%f", &a, &b);
if( a == 0 && b == 0){
printf("so many solutions!");
if(a == 0 && b != 0)
printf("no solution!");
}
else{
x = b/a;
printf("%f koren urovneniya", x);
}
}
Не вижу заключительного return, даже проверять не буду. )
Удалитьзадание 1
ОтветитьУдалить#include
#include
int main(void)
{
double z;
double y=z*(-1);
printf ("vedite chislo x:\n");
scanf ("%f",&z);
if (z>=0);
printf ("|x|=",z);
else
printf("|x|=",y);
return (0);
error C2181: недопустимый else без парного if
не могу понять в чем ошибка.
при удалении else, компиляция завершается без ошибок, но при запуске выдает ошибку, что пременная z используется без инициализации.
Код переписал думал может затесалась какая то буква из кирилицы. Ошибка остралась
не пойму.
часть задания №2
ОтветитьУдалить#include
int main(void)
{
double a,b;
printf ("Vvedite peremennie 'a' : \n");
scanf ("%f",&a);
printf ("Vvedite peremennie 'b': \n");
scanf ("%f",&b);
if (a==0)
{
printf("no solutions.\n");
}
else
{
double x=b/a;
printf("x=%d \n",x);
}
return (0);
}
не понимаю в чем проблема. При введении любых данных работает неправильно. Уже глаза сломал в поисках ошибки.
Пытаетесь вывести вещественную переменную использую спецификатор %d, который предназначен для целочисленных переменных.
Удалитьзадание 3
ОтветитьУдалить#include
int main(void)
{
//Sahmatnaea doska
int a,b,c,d;
printf ("VVedite koordinata nachalnoi tochki .\n nomer stroki a= \n");
scanf ("%d",&a);//nomer stroki
printf ("nomer stolbtsa b=\n");
scanf ("%d",&b);//nomer stolbtsa
//konechnaea tochka
printf ("VVedite koordinata konechnoi tochki .\n nomer stroki c= \n");
scanf ("%d",&c);//nomer stroki
printf ("nomer stolbtsa d=\n");
scanf ("%d",&d);//nomer stolbtsa
//logicheskii blok
if ((a==c)||(d==b))
printf ("YES\n");
else
printf ("NO\n");
return (0);
}
вроде все работает.
Ну вот и хорошо. Пробежался глазами, вроде все хорошо. Единственное не соблюдаете формат ввода и вывода. Не нужно всяких дополнительных слов, типа "Vvedite koordinata nachalnoi tochki .\n nomer stroki a= ".
УдалитьЕсли будете заниматься олимпиадным программированием будут ошибки из-за этого.)
И много комментариев. И без них понятно, ведь вы уже предупреждали что необходимо ввести. )
#include
ОтветитьУдалить#include
int main(void){
int a;
float b, c;
printf("Vvedite A \n");
scanf("%d", &a);
b=(int)a%10;
c=(int)a%10;
if (a<5 || a>20 || a==1)
{ if (b>1 || c==0)
{ if (b<5 && b>0)
printf("%d korovy\n", a);
else printf("%d korov\n", a);
}
else printf("%d korova\n", a);
}else
printf("%d korov\n", a);
return(0);}
Хорошо.)
Удалитья копирую листинг 5.2 мне пишет error C2065: а: необъявленный идентификатор
ОтветитьУдалитьНе хорошо копировать, желательно самому набирать. )) Может быть там она записана русским символом просто?
УдалитьРешение квадратных уравнений.
ОтветитьУдалитьТак получается?
#include
#include
int main(void)
{
float a,b,c,d;
float x,x1,x2;
printf("Vvedite chisla a b c \n");
scanf("%f %f %f", &a, &b, &c);
if (a!=0)
{
d=pow(b,2)-(4*a*c);
if (d>=0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%-4.2f\nx2=%-4.2f\n", x1, x2);
}
else
{
printf("no solution \n");
}
}
else
{
x=-c/b;
printf("x %-4.2f \n",x);
}
return (0);
}
Когда дискриминант равен нулю выводится два одинаковых корня, хотя по условию требуется вывести лишь один раз.
УдалитьПросто программа с использованием"if-else":
ОтветитьУдалить#include
int main(void)
{
int q,w,e;
printf("Vvedite tri chisla ot 1 do 3:");
scanf("%d %d %d",&q,&w,&e);
if ((q==2)&&(w==3)&&(e==1))
{
printf("Safe has hacked! You recived one billion dollars!\n");
}
else
{
printf("Safe hasn't hacked! You recived air!Ha!Ha!Ha!\n");
}
return 0;
}
Задачу придумал сам.=)
Григорий, 12 лет.
=)
Поздравляю. Творчество это всегда хорошо! )
УдалитьЗадание 3.
ОтветитьУдалить#include
#include
int main (void)
{
int a, b, c, d;
printf("vvedite nachalnyje i konecnyje koordinaty ladji (4 cifry)\n");
scanf_s("%d %d %d %d", &a, &b, &c, &d);
if ((a<1)||(b<1)||(c<1)||(d<1)||(a>8)||(b>8)||(c>8)||(d>8))
printf("koordinaty naxodiatsiai za predelami shaxmatnoj doski\n");
else
{
if (a==c, b==d)
printf("\nvy ostavili ladju na meste\n");
else {
if ((a==c)||(b==d))
printf("YES\n");
else printf("NO\n");
}
}
return (0);
}
Все правильно, но много лишнего. Проверяете то, что и так будет правильным.)) Иногда это хорошо, кто знает, что введет пользователь, но здесь такого не будет, я проверяю работу программы и как вы усвоили урок, а не пытаюсь выискать в ней лазейки, чтобы она не сработала. )))
Удалитьint main()
ОтветитьУдалить{
float a, b, c, x, x1, d;
printf("Vvedite tri chisla:\n");
scanf("%f %f %f", &a, &b, &c);
d = (b*b) - (4 * a * c);
if (d >= 0)
{
x = (-b + sqrt(d)) / (2 * a);
x1 = (-b - sqrt(d)) / (2 * a);
if (x != x1)
printf("Pervii koren:%f, vtoroi koren:%f\n", x, x1);
else
{
printf("Uravnenie imeet odin koren: %f\n", x);
}
}
else
printf("No solutions\n");
system("pause");
return(0);
}
Неправильно писать, что уравнение имеет один корень. Их два, просто они совпадают. )) Но это так математическая грамотность. В остальном все хорошо. )
УдалитьЧто то мне показалось с ладьей слишком просто, решил сделать для коня (если честно изначально прочитал не правильно), прошу оценить старания. Из-за дополнительных скобок в условиях if ((a+3==c)&&(b+1==d))||((a+3==c)&&(b-1==d)) очень долго не хотел компилировать.
ОтветитьУдалить#include
int main(void)
{
int a, b, c, d;
printf("Vvedite 2 nachalnie koordinaty i 2 konechnie ot 1 do 8\n");
scanf("%d %d %d %d", &a, &b, &c, &d);
if (a-1==c&&b+3==d||a+1==c&&b+3==d)
{
printf("YES\n");
}
else
{
if (a-1==c&&b-3==d||a+1==c&&b-3==d)
{
printf("YES\n");
}
else
{
if (a-3==c&&b+1==d||a-3==c&&b-1==d)
{
printf("YES\n");
}
else
{
if (a+3==c&&b+1==d||a+3==c&&b-1==d)
{
printf("YES\n");
}
else
{
printf("NOPE\n");
}
}
}
}
return (0);
}
Во, получилось у компоновать =) Первоначально так и задумывалось, но возникли проблемы с лишними скобками (СКОБКИ ЗЛО)
Удалить#include
int main(void)
{
int a, b, c, d;
printf("Vvedite 2 nachalnie koordinaty i 2 konechnie ot 1 do 8\n");
scanf("%d %d %d %d", &a, &b, &c, &d);
if (a-1==c&&b+3==d||a+1==c&&b+3==d||a-3==c&&b+1==d||a-3==c&&b-1==d||a+3==c&&b+1==d||a+3==c&&b-1==d||a-1==c&&b-3==d||a+1==c&&b-3==d)
printf("YES\n");
else
printf("NOPE\n");
return (0);
}
Решалка квадратных уравнений с точностью до десятых
ОтветитьУдалить#include
#include
int main(void)
{
float x, y, a, b, c, D;
printf("Vvedite a, b, c\n");
scanf("%f %f %f", &a, &b, &c);
D=(b*b)-(4*a*c);
if (D>=0)
{
x=(-b+sqrt(D))/(2*a);
y=(-b-sqrt(D))/(2*a);
printf("x1=%0.1f, x2=%0.1f\n", x, y);
}
else
printf("no solution\n");
return (0);
}
Этот комментарий был удален автором.
ОтветитьУдалитьКоровы
ОтветитьУдалить#include
int main(void)
{
int a;
printf("Vvedite chislo n<100\n");
scanf("%d", &a);
if (a<0)
printf("Na lugu ne moghet pactic' otricatelnoe kolichestvo korov\n");
else
{
if (a%10==1&&a!=11)
printf("Na lugu pacetcya %d korova\n", a);
else
{
if (a%10<2||a%10>4||a==12||a==13||a==14)
printf("Na lugu pacetcya %d korov\n", a);
else
printf("Na lugu pacetcya %d korovy\n", a);
}
}
return (0);
}
Задание 2:
ОтветитьУдалить#include
int main (){
int a, b, n ,x;
n=30000;
printf ("a=");
scanf ("%d", &a);
printf ("b=");
scanf ("%d", &b);
if (a==0 && b!=0){
printf("no solution\n");
return 0;}
if (a==0 && b==0){
printf("many solootions\n");
return 0;}
if (a>n || b>n ||-a>n ||-b>n){
printf("Ошибка:|a| или |b| больше 30000\n");
return 0;}
x=b/a;
printf("При a=%d и b=%d \n\tx=%d\n",a ,b ,x);
return 0;}
Задание 3:
ОтветитьУдалить#include
int main (){
int a, b ,A ,B;
printf ("Начальные координаты:\na=");
scanf ("%d", &a);
printf ("b=");
scanf ("%d", &b);
printf ("Конечные координаты:\nA=");
scanf ("%d", &A);
printf ("B=");
scanf ("%d", &B);
if (a==A && b==B){
printf ("Ошибка:совпадение координат\n");
return 0;}
if (a<1 || A<1 || b<1 || B<1 || a>8 || A>8 || b>8 || B>8){
printf ("Ошибка:вне координат.От 1 до 8\n");
return 0;}
if (a==A || b==B){
printf ("Лодь может сходить в один ход\n");
return 0;}
printf ("Лодь не может сходить в один ход\n");
return 0;}
Этот комментарий был удален автором.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьЗадание 4:
ОтветитьУдалить#include
#include
int main (){
float a, b , c, A, d, D, X[2];
printf("Квадратное уравнение:\na=");
scanf ("%f", &a);
printf("b=");
scanf ("%f", &b);
printf("c=");
scanf ("%f", &c);
d=pow(b,2)-4*c*a;
if (d<0){
printf ("Ошибка:Дескременант меньше 0\n");
return 0;}
A=a*2;
if (d==0){
printf("Корень равен:\n%.0f",-b/A);}
else{
D=sqrt(d);
printf ("Корни равены:\n%.0f\n%.0f\n",(-b+D)/A,(-b-D)/A);}
return 0;}
Задание 5:
ОтветитьУдалить#include
int main (){
int n, N;
printf("N<100\nN=");
scanf("%d",&n);
if(n>=100){
printf("Ошибка:N больше 100");
return 0;}
if (n==1) {
printf("1 korova\n");}
else{
N= n % 10;
if (N!=0){
printf("%d korov\n", n);}
else {
printf("%d korovy\n", n);}}
return 0;}
Неправильно.
УдалитьНапример, 2 korov
а должно быть 2 korovy. Ну и, например, на всех числах кратных 10 ошибка.
Подскажите пожалуйста в чем проблема пишу число 7 а мне высвечивается 11205140
ОтветитьУдалитьЯ хотел бы увидеть код, где это происходит. Скорее всего что-то с типами данных или спецификаторами вывода. Например, число вещественное, а вы пытаетесь вывести его как целое.
УдалитьКод из вашего урока я даже пыталась копировать
УдалитьА конкретнее?
УдалитьЗадание 5.4. Решение квадратного уравнения.
ОтветитьУдалить#include
#include
#include "math.h"
int main(void) {
float a = 0, b, c;
float x1, x2;
printf("Equation: ax^2 + bx + c = 0, type coefficients a,b,c through ','...\n");
scanf("%f,%f,%f", &a, &b, &c);
if(a != 0){
float discriminant = b*b - 4*a*c;
printf("Coefficients was input: \n a = %f\n b = %f\n c = %f\n\nDiscriminant = %f\n", a, b, c, discriminant);
if(discriminant>0){
x1 = (-b + sqrt(discriminant))/2*a;
x2 = (-b - sqrt(discriminant))/2*a;
printf("Roots of equations: \n x1 = %f \n x2 = %f \n", x1, x2);
}
if(discriminant == 0){
x1 = -b/2*a;
printf("D = 0. Root of equation: \n x1 = %f \n", x1);
}
if(discriminant < 0){
printf("No real roots\n");
}
} else{
printf("Member 'a' must be not zero!\n");
}
return EXIT_SUCCESS;
}
Подскажите, пожалуйста, почему каким бы ни был результат выводит "No solution"?
ОтветитьУдалить#include
#include
int main(void)
{
int n=2;
double a, b, c, x1, x2, d;
printf("Vvedite a, b i c\n");
scanf("%f %f %f", &a, &b, &c);
double pow(double b, double n);
double sqrt(double d);
d=pow(b,n)-4*a*c;
if (d<0)
{
printf("\nNo solution\n");
}
if (d==0)
{
x1=(-b)/2*a;
printf("\n%f\n", x1);
}
if (d>0)
{
x1=(-b+sqrt(d))/2*a;
x2=(-b-sqrt(d))/2*a;
printf("\nx1=%f; x2=%f\n", x1, x2);
}
return(0);
}
Добрый вечер.
УдалитьТак происходит, потому что считывается не правильно. Когда мы пишем спецификатор %f, то при этом программа пытается сохранить введенное значение в переменную типа float. А так как у вас переменные типа double получается ерунда. Можете попробовать вывести их сразу после считывания, посмотреть что в них сохраняется.
Как это исправить. 1. либо использовать переменные типа float.
2. Использовать спецификатор %lf при считывании.
А теперь вот еще что. Зачем вы добавили в программу вот эти две строчки?
double pow(double b, double n);
double sqrt(double d);
Они здесь совершенно не нужны. Когда вы подключаете заголовочный файл math.h то там уже присутствуют все нужные объявления. Вам остается лишь использовать функции из него. Дополнительно ничего писать не нужно.
#include
ОтветитьУдалитьint main(void)
{
int a,b,x;
printf("Uravnenie ax=b\n");
printf("Vedite chisla a i b:");
scanf_s("%d %d",&a,&b);
printf("Polucili %dx=%d\n",a,b);
if ((a<=30000)&&(b<=30000)&&(x=b/a))
{
printf("many solutions %d",x);
}
else
{
printf("no solutions");
}
return(0);
}
Правильно или нет?
Это второе задание
УдалитьНет, неправильно. Нужно рассмотреть 3 случая.
Удалить1. когда уравнение имеет одно решение самый частый.
2. когда уравнение не имеет целочисленных решений.
3. когда уравнение имеет бесконечно много решение. (единственный случай)
Задание 5
ОтветитьУдалить#include
int main ( void ) {
int n;
printf("Na lugu pasetsya \n");
scanf("%d", &n);
if ((n%10==1)&&(n!=11))
{
printf("%d korova \n", n);}
if (((n%10>4)&&(n%10<=9))||(n%10==0)||(n>4)&&(n<21))
{
printf("%d korov \n", n);}
if ((n>1)&&(n<5)||((n>20)&&((n%10>1)&&(n%10<5))))
{
printf("%d korovy \n", n);}
return (0);
}
P.s. кажется все работает, надеюсь что это проверят)
Задание 5
ОтветитьУдалить#include "stdio.h"
int main (void)
{
int x;
printf("Vvedite chislo ot 1 do 100: \n");
scanf("%i",&x);
if ((x%10==1) && (x!=11))
{
{
printf("\n%i korova \n",x);
}
if (((x>4) && (x<21)) || ((x%10>4)&&(x%10<=9)) || (x%10==0))
{
printf("\n%i korov \n",x);
}
}
else
{
printf("\n%i korovy \n",x);
}
return (0);
}
Не могу понять почему не срабатывает внутренняя конструкция if.
if - (если)
Удалитьelse -(иначе)
Пример:
инклюды библиотек
Тело функции или по нашему заголовок int main(void)
{
если b=2
печатаю ("число 2 это чётное число);
иначе ("хаха... иначе будет иначе);
return(0);
}
Проще объяснить тебе сможет только немой
Задание первое
ОтветитьУдалить#include
#include
int main()
{
float a;
printf("Programma chislo = modul chisla \n\n\nvvedite luboe chislo i poluchitite modul etogo chisla \n\n");
scanf("%f",&a);
if (a>0)
{
printf("Modul chisla= %f\n",a);
}
else
{
printf("Error vy vveli %f\n",a);
}
system("pause");
return(0);
}
Задание 4
ОтветитьУдалить#include
#include
#include
int main()
{
double D;
int a,b,c;
int x=1;
int x1,x2;
printf("Programma resheniya kvadratnogo uravneniya ax2+bx+c\n\Vvedite chislo a, potom b, zatem c\n");
scanf("%d %d %d",&a,&b,&c);
D=b*b-4*a*c;
printf("Deskreminant=%f\n\n",D);
if(D>=0)
{
x1=(-b+sqrt(D))/2*a;
x2=(-b-sqrt(D))/2*a;
printf("x1=%d\nx2=%d\n",x1,x2);
}
else
{
printf("Korney net\n");
}
system("pause");
return(0);
}
3 задание, все решают не то что от них хотят...там нужен анализ доски, как ходит ладья, и сможет ли она по прямой туда добраться...это очень сложно и я думаю автор ошибся когда придумывал задание...задачу нужно бы переписать!)
ОтветитьУдалитьЗадачу решают именно ту, что нужно.
УдалитьПодскажите, что значит вот эта запись во втором задании b%a!=0
ОтветитьУдалитьникак не могу дойти.
% означает остаток от деления.
Удалитьбуквально здесь записано условие
остаток от деления b на a не равняется нулю.
В задаче три выдает ошибку, не могу понят почему
ОтветитьУдалить#include
int main()
{
int a,b,c,d;
scanf("%d %d %d %d" &a &b &c &d);
if ((a==c)) ||((b==d))
{
printf("Yes\n")
}
else
{
printf("no\n");
}
return(0);
}
scanf("%d %d %d %d" &a &b &c &d); - пропущена запятая после формат-строки.
УдалитьДумаю компилятор указал вам тоже самое. Не ленитесь читать то, что он выводит. )
При компиляции исходников в уроках и в решении их у людей, почему то С++ именно в 5 уроке пишет что не верный идентификатор scanf, хотя в нем все написано верно, и раньше не было с этим проблем 1>c:\users\chrome\desktop\проекты с++\55\55\55.cpp(7) : error C3861: scаnf: идентификатор не найден
ОтветитьУдалитьРешение у людей работают, как и ваши правильные ответы, не работают только ваши листинги в уроке, с ошибками.
УдалитьСкорее всего, при копировании я специально заменял символ c на с, чтобы приучить писать программы самостоятельно. Думаю скорее всего проблема в этом. Сейчас я отказался от этой методики.
УдалитьТакже можно менять а на а))))
УдалитьЗадача №1
ОтветитьУдалить#include
#include
int main (void)
{
float a,b;
printf ("vvedite chislo:\n");
scanf ("%f", &a);
if (a>=0)
printf ("%f\n",a);
else
b=a*(-1);
printf ("%f\n",b);
return (0);
}
подпись "рз". Все ли правильно?)
задача 4
ОтветитьУдалить#include
#include
int main()
{ float a,b,c,d,x1,x2;
int x3;
printf ("axx+bx+c=0\nEnter a,b,c:\n");
scanf("%f %f %f",&a,&b,&c);
d=b*b-4*a*c;
if (d<0)
{
printf ("%\nno solutions\n");
}
if (d==0)
{
x3=((-b+sqrt(d))/(2*a));
printf ("\n%d\n",x3);
}
if (d>0)
{
x1=((-b+sqrt(d))/(2*a));
x2=((-b-sqrt(d))/(2*a));
printf ("\nx1=%0.2f x2=%0.2f\n",x1,x2);
}
return 0;
}
идеально работает
Конструкцию
Удалитьif () ...
if () ...
if () ...
лучше заменить на
if () ...
else if () ...
else ...
Ну и для идеальности не хватает корректного вывода, при наличии двух корней.
Кроме того, если d=0, то зачем оно записано тут?
x3=((-b+sqrt(d))/(2*a));
Ну и наконец, почему вы решили, что в этом случае всегда получается целое число?
Давайте, Nic! Я в вас верю!
1>e:\с++\урок5\урок5\lesson5.cpp(6) : error C3861: scаnf: идентификатор не найден
ОтветитьУдалитьЧто означает эта ошибка?
программа не может найти функцию scanf. Вероятно вы не подключили заголовочный файл stdio.h
Удалитьвот мое решение задание 2, подходит правилам задания?
ОтветитьУдалить#include
int main(void)
{
int a,b;
float f;
printf("wwedite dwa chisla A i B w predelach ot -do+30000\n");
scanf("%d%d", &a, &b);
if (a==0)
{
if ((a==0)&&(b==0))
printf("more solutions\n");
else
printf("no solutions\n");
return(0);
}
else
f=(float)b/a;
printf("Snachenije odno X= %f\n",f);
return(0);
}
Вижу у вас два return из одной программы. Это не то чтобы конец света, но и злоупотреблять этим не стоит. Уж эту-то программу, можно без потери читабельности написать без таких выкрутасов.)
УдалитьЗдравствуйте,подскажите как исправить эту ошибку пожалуйста
ОтветитьУдалитьerror C3861: 'scаnf': identifier not found
Добрый день, Алмаз.
УдалитьОшибка: идентификатор scanf не найден. Это может быть в двух случаях:
1. Вы забыли подключить библиотеку stdio.h, в которой объявлена функция scanf
2. В написании scanf присутствуют, например, русские буквы. Вот здесь sсanf буква с написана на русском языке.
Задание 2.
ОтветитьУдалить# include ;
# include ;
int main (void) {
int a, b, x;
float kor;
printf ("Vvedite a, b \n");
scanf ("%d %d", &a, &b);
if
(a<=30000 && b<=30000)
a=fabs(a); b=fabs (b);
printf ("Yes RESH \n");
{
if (a!=0 && b>=0)
{x=b/a;
kor=sqrt(x);
printf ("X=%d \nkvadratnyi koren KOR= %f \n", x, kor);}
else
{
if (a==0 && b==0)
{printf ("Many solution \n");}
else
{
if ((a==0 && b!=0))
{ printf ("No solution \n");}
}}}
return (0); }
Не знаю обязательно ли здесь было применять функцию fabs(), но как то подумал, что нужно.
не то чтобы необязательно, а вообще не нужно. Числа a и b могут быть отрицательными и ответ будет неправильный.
УдалитьА вот с третьим заданием проблемы у меня. Просмотрел выше комментарии ребят, т.к. в своих размышлениях пришел в тупик, ну и после просмотра возникли вопросы. А непонятно мне следующие:
ОтветитьУдалитьif ((a==a1)||(b==b1))
{
printf("yes\n");
}
else
{
printf("no\n");
}
return(0)
Зачем сравнивать А и А1, Б и Б1? И получается надо вводить А и А1(как пример) одинаковыми? Тем более по условию числа идут от 1 до 8?
Ну давайте сначала. Как у нас определяется положение фигуры на доске? Двумя координатами a и b. Номер строки и номер столбца. А при каком условии одна ладья бьёт другую? Как это проверить?
УдалитьИли что тоже самое, при каком условии ладья может совершить ход в некоторую клетку? Или если можете нарисовать в произвольном месте ладью, отметить все клетки куда она может пойти и посмотреть, что у общего у этих клеток.
УдалитьЗадание 4.
ОтветитьУдалить# include ;
# include ;
int main (void) {
int a, b, c, D;
float x1, x2, x12;
printf ("ax2+bx+c=0\n");
printf ("Vvedite A, B, C \n");
scanf ("%d %d %d", &a, &b, &c);
D=(b*b)-4*(a*c);
printf ("Diskrimenant uravneniya D= %d \n", D);
if (D<0)
{printf ("NO SOLUTION");}
else {
if (D>0)
{x1=(-b+sqrt(D))/(2*a);
x2=(-b-sqrt(D))/(2*a);
printf ("X1= %f \n X2= %f \n", x1, x2);}
else
{if (D==0)
{x12=(-b)/(2*a); printf ("Koren' X12= %f \n", x12);}
} }
return (0); }
Задание 5
ОтветитьУдалить# include ;
int main (void) {
int n;
printf ("Dla prodolgenia vrazi 'Na lugu posut'sa...' vvedite N \n");
scanf ("%d", &n);
if (n<100)
{
if (n==1)
{printf ("%d KOROVA\n", n);}
else
{
if ((n>1) && (n<=4))
{printf ("%d KOROVY\n", n);}
else
{
if ((n>4) && (n<=100))
{printf ("%d KOROV\n", n);}
}
}
}
else {printf ("Korov bol'she 100\n");}
return (0); }
Вот тут мне непонятно зачем некоторые из пользователей используют такое выражение:
if(((n%10>4)&&(n%10<=9))||(n%10==0))?
Зачем здесь остаток от деления на десять? И правильно ли в таком случае мое решение?
ну попробуйте число 22 например, сработает ваша программа или нет?
УдалитьДа этот момент я не учел))) исправил все работает. Еще добавил ИЛИ n==0 и вообще все прекрасно стало. Благодарен за подсказку.
УдалитьЗадание 2
ОтветитьУдалить#include "stdio.h"
int main ( void ){
int a, b;
scanf ("%d %d", &b,&a);
if ((a==0) && (b==0))
printf ("many solution");
if (a!=0)
{
if (b%a==0)
printf("%d", b/a);
else
printf("no solution");
}
void(0); }
Добрый день.
УдалитьА что такое void(0)?
Ошибочка вышла)
Удалить#include "stdio.h"
int main ( void ){
int a, b;
scanf ("%d %d", &b,&a);
if ((a==0) && (b==0))
printf ("many solution");
if (a!=0)
{
if (b%a==0)
printf("%d", b/a);
else
printf("no solution");
}
return (0); }
Задание 1
ОтветитьУдалить#include
#include
int main(void) {
float a;
scanf_s("%f", &a);
if (a >= 0){
printf("Modul' a raven |%.1f|\n", a);
}
if (a < 0) {
a = -1 * a;
printf("Modul' a raven |%.1f|\n", a);
}
return(0);
}
Добрый день!
УдалитьМного лишнего в выводе. Достаточно лишь числа.
А можете написать так, чтобы использовался только один if и один printf.
И еще, интересно, какие два заголовочных файла вы подключаете?
УдалитьОдного достаточно тут.
Задание 3
ОтветитьУдалить#include
#include
int main(void) {
printf("Mesto lad'i, vvedite dva chisla, pervoe jeto stolbec (1-8), vtoroe nomer stroki (1-8)\n");
int a, b;
scanf_s("%d %d", &a, &b);
if (a <= 8 && a >= 1 && b >= 1 && b <= 8) {
printf("Ukazhite kuda Vy hotite peremestit' lad'ju za odin hod\n");
int c, d;
scanf_s("%d %d", &c, &d);
if (b == d || a == c) {
printf("Vy smogli peremestit' lad'ju\n");
}
else {
printf("Takoj hod nevozmozhen\n");
}
}
else {
printf("Nado bylo vvesti chisla ot 1 do 8\n");
}
system("pause");
return(0);
}
Добрый день, Александр.
УдалитьАлгоритм правильный и программа работает верно. Но формат входных и выходных данных не соблюдаете.
Отличные уроки, но зачем так писать? "Takoj hod nevozmozhen" и др., проще на русском написать или на англ.
ОтветитьУдалитьа ты попробуй напиши, у меня он отказался воспринимать кирилицу
Удалить