Последние новости

YoungCoder теперь и на Stepikе. Записывайтесь: https://vk.cc/75rISy

Чтобы записаться на курс, необходимо зарегистрироваться на Степике: https://vk.cc/75rIC4

Это моя личная ссылка-приглашение на Stepik для вас. Регистрируясь по этой ссылке, записываясь на курсы и решая задачи, Вы помогаете автору данного сайта принять участие в конкурсе платформы Stepik! Подробности конкурса здесь: https://vk.cc/75rKuS

воскресенье, 30 октября 2011 г.

Занятие 5.Управляющая конструкция if-else. Логические операторы и выражения.Уроки программирования для чайников.Язык Си.

Для этого урока готова новая версия: "Операции отношения и логические операции" и "Условный оператор 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);
}

Как видите, запись программы стала более компактна и легче для понимания.
Приоритет логических операций.
Как и арифметические операции логические операции имеют тоже различный приоритет.
  1. Операции в скобках
  2. Логическая операция НЕ
  3. Логические отношения
  4. Логическая операция И
  5. Логическая операция ИЛИ

Так же как и для арифметических операций, скобками можно изменить порядок выполненияю
Как видите, приоритет операций логических соотношений выше, чем приоритет логических операций И и ИЛИ. Поэтому, в принципе, в программе Листинг 5.11 можно было бы условие записать (x>-10 && x<=10). Но опять же, чтобы не запутаться в более сложных условиях, я советую вам всегда явно указывать приоритет с помощью скобок, дабы избежать досадных ошибок.
Ну вот на этом и закончим сегодняшнее занятие.

Резюме урока:
  • Узнали и научились использовать составной оператор
  • Разобрались с логическими операциями соотношений и логическими выражениями
  • Ознакомились с управляющей конструкцией if-else и научились её пользоваться
  • Узнали про логические операторы НЕ, И, ИЛИ
  • Выяснили приоритет логических операторов
Задание для практической работы:


  1. Напишите программу которая по вводимому числу выводит его модуль, не используя функцию fabs(). Программа должна считать вещественное число с клавиатуры, и вывести на экран модуль этого числа.
  2. Напишите программу для решения уравнения ax = b относительно х в целых числах. Учтите, что a может принимать любые значения, в том числе и 0. 
  3. На вход программе подаются целые числа a, b, по модулю не превосходящие 30000. Требуется вывести целый корень уравнения, если он существует и единственный. Если уравнение не имеет корней, то вывести no solution. Если уравнение имеет больше одного целого корня, то вывести many solutions.
  4. Поле шахматной доски определяется парой чисел (a, b), каждое от 1 до 8, первое число задает номер столбца, второе – номер строки. Заданы две клетки. Определите, может ли шахматная ладья попасть с первой клетки на вторую за один ход. Входные данные: 4 целых числа от 1 до 8 каждое, первые два задают начальную клетку, вторые два задают конечную клетку. Начальные и конечные клетки не совпадают. Программа должна вывести YES, если из первой клетки ходом ладьи можно попасть во вторую или NO в противном случае.
  5. Даны вещественные числа a, b, c. Найдите все решения квадратного уравнения ax2+bx+c=0. Формат входных данных: три вещественных числа. Формат выходных данных: два вещественных числа, если уравнение имеет два корня, одно действительное число – при наличии одного корня. При отсутствии действительных корней программа выводит no solution.
  6. По данному числу n<100 закончите фразу "На лугу пасется..." одним из возможных продолжений: "n коров", "n корова", "n коровы", правильно склоняя слово "корова". Программа должна вывести введенное число n и одно из слов (на латинице): korov, korova или korovy, например, 1 korova, 2 korovy, 5 korov. Между числом и пробелом должен стоять ровно один пробел.
Если Вам понравился этот урок, расскажите о нем вашим друзьям. В этом  Вам могут помочь кнопки основных социальных сетей, расположенные ниже. Вам остается всего лишь кликнуть по любой из них. 

213 комментариев :

  1. Самостоятельная практическая работа.
    Решение квадратных уравнений.
    #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. Добрый день Камиль. Программа по вычислению корней квадратного уравнения - показательная, вероятнее всего она будет и в домашнем задании.

      Начнем разбор.
      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 то в области вещественных чисел корней
      нет.
      Если первое условие выполнится, то понадобится еще один выбор, чтобы определить сколько корней будет, значит добавится еще одно условие вложенное.

      Теперь попробуйте написать программу, с учетом этих замечаний.

      Удалить
    2. возьму на себя смелость добавлю еще одно замечание:
      выражение x1=(-b+sqrt(D))/2*a; считается не корректно так как деление производится не на весь знаменатель целиком, а по порядку сначала на два, а за тем на а.
      чтоб все считалось правильно надо писать так x1=(-b+sqrt(D))/ (2*a);

      Удалить
  2. Задание 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;
    }

    Возможно сделано не так как надо, но она работает :)

    ОтветитьУдалить
  3. Добрый вечер Dispose. Всё хорошо.

    ОтветитьУдалить
  4. #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);
    }

    ОтветитьУдалить
  5. Задание 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);
    }

    ОтветитьУдалить
  6. Задание 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. Написана с ошибками
      Если мы возьмем отрицательное числа,либо числа отличные от условия 1<=x<=8 ,не соблюдая условие,то задача будет решаться,что не логически при (-2,4) (-2,100)...

      Удалить
  7. Задание 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;
    }

    ОтветитьУдалить
  8. Добрый день Камиль.
    1) Предполагалось не такое решение, а с помощью конструкции if-else. Но будем считать что всё верно. Хотя это не оптимально. Ибо даже если число положительное все операции всё равно выполняются. При том, операции очень ресурсоемкие. Если есть желание перепишите эту программу, не использую вообще библиотеку math.h
    3) Хорошо.
    4) Хорошо.

    ОтветитьУдалить
  9. Добрый вечер Dispose.
    5) Намудрили. Ввели непонятную переменную а, в которой абсолютно нет толку. Ввели лишнюю проверку для 100. Программа работает, но на некоторых данных после вывода строки на экран слетает (17 например). Переменная а не инициализирована, а с ней происходит сравнение. Перепишите, убрав указанные недостатки. =)

    ОтветитьУдалить
  10. Задание 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);
    }

    ОтветитьУдалить
  11. #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);
    }

    ОтветитьУдалить
  12. if(((n%10>4)&&(n%10<=9))||(n%10==0))
    {
    printf("%d korov\n",n);
    }
    Исправленная строка кода.

    ОтветитьУдалить
  13. Добрый день Камиль.
    1)Да, хорошо. Хотя можно обойтись и неполной конструкцией if.
    2) Хорошо. Но я не понимаю, что за необходимость проверять входные данные
    if (((a>30000)||(b>30000))||((a<-30000)||(b<-30000)))
    В условии написано, что входные данные не превышают эти значения, вы только усложняете себе задачу этими проверками. Не надо проверять данные, если они заданны условием.
    5)Хорошо, только опять ненужная проверка
    if(n>=100)
    Ну и напоминаю, соблюдайте формат вывода. Не korovbI, а korovy.

    ОтветитьУдалить
  14. Задание 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.

    ОтветитьУдалить
  15. 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);
    }

    ОтветитьУдалить
    Ответы
    1. Сойдет. Хотя можно и лучше. Без ветки элс, и одним printf.

      Удалить
  16. задание 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);
    }

    ОтветитьУдалить
    Ответы
    1. Неправильно. Не учтены несколько случаев. Например если b=0, то для любого а != 0, ответ есть. Это х=0.

      Удалить
  17. //третье зажание
    #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;
    }

    ОтветитьУдалить
  18. //четвертое задание
    #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;
    }

    ОтветитьУдалить
    Ответы
    1. А использовать в одной программе cout и scanf вообще очень-очень плохо. =)

      Удалить
  19. //пятое задание
    #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. что-то оно код программы перемешало ((

      Удалить
    2. Решения надо писать на чистом Си.=)

      Удалить
  20. Задание № 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);
    }

    ОтветитьУдалить
    Ответы
    1. А как же все числа из промежутка (0;-1] ? Для них модуль тоже определен. =)

      Удалить
  21. Задание № 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);
    }

    ОтветитьУдалить
    Ответы
    1. Сразу же неправильно. Лишняя проверка
      if (!((a>30000)||(a<-30000)||(b>30000)||(b<-30000)))

      Уже в условии задано, что числа находятся в этих пределах.

      А еще, у тебя вычисляется х сразу, а это неправильно.
      Во-первых, а может быть равно нулю, а во вторых, даже если ответ не целое число будет, ты его все равно уже посчитал. Нерационально. Переделай. =)

      Удалить
  22. Задание № 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);
    }

    ОтветитьУдалить
    Ответы
    1. Опять лишняя проверка if (((a>=1)&&(b>=1))&&((a<=8)&&(b<=8)))

      Не надо ничего добавлять. =)

      Удалить
  23. Задание № 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);
    }

    ОтветитьУдалить
  24. Задание № 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);
    }

    ОтветитьУдалить
  25. Задание № 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);
    }

    ОтветитьУдалить
  26. Вот мои решения заданий 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);
    }

    ОтветитьУдалить
    Ответы
    1. Погуглите про квадратные уравнения с двумя ... корнями.
      Пока я не поискал в интернете и потом не написал разные варианты на бумажке мне тоже было непонятно.

      Удалить
  27. Виктор, это же тоже основы математики.
    Не могу ответить на ваш вопрос.Во-первых, надо определиться с понятием "хороший программист", и во-вторых, я сам не являюсь профессионалом, поэтому не могу сказать ничего конкретного. Но думаю, все зависит от задач, которые вы собираетесь решать, с помощью программирования. Математический пакет с такими знаниями, вы явно не напишете. Многие задачи моделирования, тоже требуют математической подготовки.

    ОтветитьУдалить
  28. Добрый вечер, я очень рад что нашел ваш блог,уже с его помощью немного начинаю разбираться в Си, написал первую свою программу которая по-настоящему мне нравится спасибо огромное!

    ОтветитьУдалить
  29. вот зацените
    //программа решающая квадратные уравнения типа 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-й день думаю неплохо

    ОтветитьУдалить
  30. Владимир.
    Решение задачи 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;
    }

    ОтветитьУдалить
  31. 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);
    }


    не могу найти ошибку, нуждаюсь в помощи

    ОтветитьУдалить
    Ответы
    1. Вот ошибка if (d=0)

      Удалить
    2. Спасибо, что помогаете мне. =))) Хотя этому сообщению уже год, и вряд ли автор прочтет ответ, но все равно, такая практика очень полезна.

      Удалить
  32. //про коров
    #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);
    }

    ОтветитьУдалить
  33. Задание №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);
    }
    }

    ОтветитьУдалить
  34. Задание №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);
    }
    }
    }

    ОтветитьУдалить
  35. Задание №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");
    }
    }

    ОтветитьУдалить
  36. 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);
    }

    ОтветитьУдалить
    Ответы
    1. Работает, но можно чуточку упростить. Попробуйте обойтись одним вызовом printf. )

      Удалить
  37. #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;
    }

    ОтветитьУдалить
    Ответы
    1. А как же числа 20, 30, 40, 50, 60 и т.д.? Для них ничего не выводится вообще)

      Удалить
  38. #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");
    }
    Оригинально?)

    ОтветитьУдалить
    Ответы
    1. Неплохо.=))
      Добавлю в образцовые решения.

      Удалить
  39. //Задание 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);
    }

    ОтветитьУдалить
    Ответы
    1. прошу прощения...
      #include "stdio.h"
      #include "math.h"

      Удалить
    2. Общий ход решения верный. Думаю Вы компилировали и проверяли самостоятельно.
      Есть вопрос. Чем обусловлен выбор типа double для переменной x?

      Удалить
  40. Здравствуйте, 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);
    }

    ОтветитьУдалить
  41. ...и 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);
    }

    ОтветитьУдалить
  42. Задание 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);
    }

    ОтветитьУдалить
  43. #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);
    }

    ОтветитьУдалить
  44. задание 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

    ОтветитьУдалить
    Ответы
    1. даже когда ставлю перед "||" ";"б все равно пишет ошибка, отсутствие ";" перед "||"

      Удалить
    2. все, исправила)
      #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);

      }

      Удалить
    3. Поздравляю. Вы молодец! Самостоятельно справились. =))

      Удалить
    4. //программа про коров
      #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);
      }

      Удалить
  45. Задание 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) (1,4) отвечает NO, хотя должно быть YES!)))

      Удалить
  46. Задание 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);
    }

    ОтветитьУдалить
    Ответы
    1. Да.=)) Но можно обойтись и без умножения. Просто присвоить -x. ))

      Удалить
  47. #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);
    }

    ОтветитьУдалить
  48. #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);
    }

    ОтветитьУдалить
    Ответы
    1. А зачем вы подключили библиотеку math.h?

      Много всего лишнего, но работать должно правильно. )) Хорошо.

      Удалить
  49. Скажите, почему у меня при компиляции листингов 5.3 и 5.9 выходит сообщение об ошибке: Ошибка 1 error C3861: scаnf: идентификатор не найден

    ОтветитьУдалить
    Ответы
    1. Сотри и заново напиши scanf
      Мне помогло

      Удалить
    2. Быть может потому, что вы копировали его отсюда, а не все символы скопировались удачно. Такое бывает. )))

      Удалить
  50. Задание 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. Правильно, но как обычно в своем стиле, много всякого лишнего кода. )))

      Удалить
    2. А что именно лишнего)Я же только учился писать)Вместе исправим мои недочеты)

      Удалить
  51. Задаине 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;
    }

    ОтветитьУдалить
    Ответы
    1. Задание 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;
      }

      Удалить
    2. Задание 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;
      }

      Удалить
    3. 1. Слишком много всего.
      2. Нет, не все правильно.Нужны решения в целых числах. ))

      Удалить
    4. 5. Не правильно.Например, 94 выведет не правильно. должно быть 94 коровы.

      Удалить
    5. 4. хорошо.

      Естественно не хочет работать. Вам разве не понятно, почему так? ))

      Удалить
    6. 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;
      }

      Удалить
  52. У меня вопрос я ща позже напишу!!!!!!!!!!111

    ОтветитьУдалить
  53. Задание 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…

    ОтветитьУдалить
    Ответы
    1. Во всем виновато машинное представление чисел с плавающей точкой. Компьютер оперирует только нулями и единицами. Работать с вещественными числами это для него проблема. Поэтому, в серьезных вычислениях на компьютере могут нужно очень серьезно за этим следить. )) Ну и уменьшите количество выводимых после запятой символов, округление даст вам ваше число. ))

      Сама программа хорошо.

      Удалить
  54. Задание 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);
    }


    эти , вроде работают...

    ОтветитьУдалить
    Ответы
    1. Сразу вспоминается: "НЕ НАДО ШУТИТЬ С ВОЙНОЙ, БЛЯ!! ЗДЕСЬ ДРУГИЕ РЕБЯТА! ЭТО НЕ ГЕРМАНИЯ! ЭТО НЕ АФГАНИСТАН!"
      =DDD

      2. неправильно. Нужны решения в целых числах. Ну т.е. если у вас a=3 и b=4 то решений нет, так как решение не целое число.

      3. Проверка введенных данных не особо нужна. Гарантируется что введенные данные будут "хорошими". В остальном хорошо.

      Удалить
    2. задание 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);
      }

      Удалить
  55. #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);
    }

    ОтветитьУдалить
    Ответы
    1. Не компилирую, думаю вы это и сами сделали. Вроде все верно. ))

      Удалить
  56. Задание 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);
    }
    работат.

    ОтветитьУдалить
  57. #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" программа сообщает об ошибке и прекращает работу (ибо до цикла я ещё не дошёл, но уверен что там можно сделать повторное введение неверных данных).

    ОтветитьУдалить
  58. Если работает, то все верно. Правильно думаете на счет цикла.

    ОтветитьУдалить
  59. #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.
    Уже устал переписывать. До этого работала, но при разных данных считала только один корень.

    ОтветитьУдалить
    Ответы
    1. в скобках запутались. У вас второе else находится внутри первого if. )

      Удалить
  60. #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. 1. Оригинально. Я использую этот код, в качестве небольшой головоломки. =))

      Думаю, что остальные программы тоже работаю, и дальше я могу не проверять.

      Удалить
  61. #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);
    }

    ОтветитьУдалить
  62. #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е. Спасибо.

    ОтветитьУдалить
    Ответы
    1. У меня код работал. И там 8ка лишняя, сорри)

      Удалить
    2. Можно обойтись и без else. Попробуйте изменить программу так, как я говорю. )

      Удалить
  63. задача №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);
    }
    }

    ОтветитьУдалить
    Ответы
    1. Не вижу заключительного return, даже проверять не буду. )

      Удалить
  64. задание 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 используется без инициализации.
    Код переписал думал может затесалась какая то буква из кирилицы. Ошибка остралась
    не пойму.

    ОтветитьУдалить
  65. часть задания №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);
    }
    не понимаю в чем проблема. При введении любых данных работает неправильно. Уже глаза сломал в поисках ошибки.

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

      Удалить
  66. задание 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);
    }

    вроде все работает.

    ОтветитьУдалить
    Ответы
    1. Ну вот и хорошо. Пробежался глазами, вроде все хорошо. Единственное не соблюдаете формат ввода и вывода. Не нужно всяких дополнительных слов, типа "Vvedite koordinata nachalnoi tochki .\n nomer stroki a= ".
      Если будете заниматься олимпиадным программированием будут ошибки из-за этого.)

      И много комментариев. И без них понятно, ведь вы уже предупреждали что необходимо ввести. )

      Удалить
  67. #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);}

    ОтветитьУдалить
  68. я копирую листинг 5.2 мне пишет error C2065: а: необъявленный идентификатор

    ОтветитьУдалить
    Ответы
    1. Не хорошо копировать, желательно самому набирать. )) Может быть там она записана русским символом просто?

      Удалить
  69. Решение квадратных уравнений.
    Так получается?
    #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);
    }

    ОтветитьУдалить
    Ответы
    1. Когда дискриминант равен нулю выводится два одинаковых корня, хотя по условию требуется вывести лишь один раз.

      Удалить
  70. Просто программа с использованием"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 лет.
    =)

    ОтветитьУдалить
    Ответы
    1. Поздравляю. Творчество это всегда хорошо! )

      Удалить
  71. Задание 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);
    }

    ОтветитьУдалить
    Ответы
    1. Все правильно, но много лишнего. Проверяете то, что и так будет правильным.)) Иногда это хорошо, кто знает, что введет пользователь, но здесь такого не будет, я проверяю работу программы и как вы усвоили урок, а не пытаюсь выискать в ней лазейки, чтобы она не сработала. )))

      Удалить
  72. 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);
    }

    ОтветитьУдалить
    Ответы
    1. Неправильно писать, что уравнение имеет один корень. Их два, просто они совпадают. )) Но это так математическая грамотность. В остальном все хорошо. )

      Удалить
  73. Что то мне показалось с ладьей слишком просто, решил сделать для коня (если честно изначально прочитал не правильно), прошу оценить старания. Из-за дополнительных скобок в условиях 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);
    }

    ОтветитьУдалить
    Ответы
    1. Во, получилось у компоновать =) Первоначально так и задумывалось, но возникли проблемы с лишними скобками (СКОБКИ ЗЛО)
      #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);
      }

      Удалить
  74. Решалка квадратных уравнений с точностью до десятых
    #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);
    }

    ОтветитьУдалить
  75. Этот комментарий был удален автором.

    ОтветитьУдалить
  76. Коровы
    #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);
    }

    ОтветитьУдалить
  77. Задание 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;}

    ОтветитьУдалить
  78. Задание 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;}

    ОтветитьУдалить
  79. Этот комментарий был удален автором.

    ОтветитьУдалить
  80. Этот комментарий был удален автором.

    ОтветитьУдалить
  81. Задание 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;}

    ОтветитьУдалить
  82. Задание 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;}

    ОтветитьУдалить
    Ответы
    1. Неправильно.
      Например, 2 korov
      а должно быть 2 korovy. Ну и, например, на всех числах кратных 10 ошибка.

      Удалить
  83. Подскажите пожалуйста в чем проблема пишу число 7 а мне высвечивается 11205140

    ОтветитьУдалить
    Ответы
    1. Я хотел бы увидеть код, где это происходит. Скорее всего что-то с типами данных или спецификаторами вывода. Например, число вещественное, а вы пытаетесь вывести его как целое.

      Удалить
    2. Код из вашего урока я даже пыталась копировать

      Удалить
  84. Задание 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;
    }

    ОтветитьУдалить
  85. Подскажите, пожалуйста, почему каким бы ни был результат выводит "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);
    }

    ОтветитьУдалить
    Ответы
    1. Добрый вечер.
      Так происходит, потому что считывается не правильно. Когда мы пишем спецификатор %f, то при этом программа пытается сохранить введенное значение в переменную типа float. А так как у вас переменные типа double получается ерунда. Можете попробовать вывести их сразу после считывания, посмотреть что в них сохраняется.
      Как это исправить. 1. либо использовать переменные типа float.
      2. Использовать спецификатор %lf при считывании.

      А теперь вот еще что. Зачем вы добавили в программу вот эти две строчки?
      double pow(double b, double n);
      double sqrt(double d);

      Они здесь совершенно не нужны. Когда вы подключаете заголовочный файл math.h то там уже присутствуют все нужные объявления. Вам остается лишь использовать функции из него. Дополнительно ничего писать не нужно.

      Удалить
  86. #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);

    }


    Правильно или нет?

    ОтветитьУдалить
    Ответы
    1. Это второе задание

      Удалить
    2. Нет, неправильно. Нужно рассмотреть 3 случая.
      1. когда уравнение имеет одно решение самый частый.
      2. когда уравнение не имеет целочисленных решений.
      3. когда уравнение имеет бесконечно много решение. (единственный случай)

      Удалить
  87. Задание 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. кажется все работает, надеюсь что это проверят)

    ОтветитьУдалить
  88. Задание 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.

    ОтветитьУдалить
    Ответы
    1. if - (если)
      else -(иначе)

      Пример:
      инклюды библиотек
      Тело функции или по нашему заголовок int main(void)
      {
      если b=2
      печатаю ("число 2 это чётное число);
      иначе ("хаха... иначе будет иначе);
      return(0);
      }
      Проще объяснить тебе сможет только немой

      Удалить
  89. Задание первое
    #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);
    }

    ОтветитьУдалить
  90. Задание 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);
    }

    ОтветитьУдалить
  91. 3 задание, все решают не то что от них хотят...там нужен анализ доски, как ходит ладья, и сможет ли она по прямой туда добраться...это очень сложно и я думаю автор ошибся когда придумывал задание...задачу нужно бы переписать!)

    ОтветитьУдалить
  92. Подскажите, что значит вот эта запись во втором задании b%a!=0
    никак не могу дойти.

    ОтветитьУдалить
    Ответы
    1. % означает остаток от деления.
      буквально здесь записано условие
      остаток от деления b на a не равняется нулю.

      Удалить
  93. В задаче три выдает ошибку, не могу понят почему
    #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);
    }

    ОтветитьУдалить
    Ответы
    1. scanf("%d %d %d %d" &a &b &c &d); - пропущена запятая после формат-строки.
      Думаю компилятор указал вам тоже самое. Не ленитесь читать то, что он выводит. )

      Удалить
  94. При компиляции исходников в уроках и в решении их у людей, почему то С++ именно в 5 уроке пишет что не верный идентификатор scanf, хотя в нем все написано верно, и раньше не было с этим проблем 1>c:\users\chrome\desktop\проекты с++\55\55\55.cpp(7) : error C3861: scаnf: идентификатор не найден

    ОтветитьУдалить
    Ответы
    1. Решение у людей работают, как и ваши правильные ответы, не работают только ваши листинги в уроке, с ошибками.

      Удалить
    2. Скорее всего, при копировании я специально заменял символ c на с, чтобы приучить писать программы самостоятельно. Думаю скорее всего проблема в этом. Сейчас я отказался от этой методики.

      Удалить
    3. Также можно менять а на а))))

      Удалить
  95. Задача №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);
    }
    подпись "рз". Все ли правильно?)

    ОтветитьУдалить
  96. задача 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;
    }


    идеально работает

    ОтветитьУдалить
    Ответы
    1. Конструкцию
      if () ...
      if () ...
      if () ...

      лучше заменить на
      if () ...
      else if () ...
      else ...

      Ну и для идеальности не хватает корректного вывода, при наличии двух корней.

      Кроме того, если d=0, то зачем оно записано тут?
      x3=((-b+sqrt(d))/(2*a));
      Ну и наконец, почему вы решили, что в этом случае всегда получается целое число?

      Давайте, Nic! Я в вас верю!

      Удалить
  97. 1>e:\с++\урок5\урок5\lesson5.cpp(6) : error C3861: scаnf: идентификатор не найден

    Что означает эта ошибка?

    ОтветитьУдалить
    Ответы
    1. программа не может найти функцию scanf. Вероятно вы не подключили заголовочный файл stdio.h

      Удалить
  98. вот мое решение задание 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);
    }

    ОтветитьУдалить
    Ответы
    1. Вижу у вас два return из одной программы. Это не то чтобы конец света, но и злоупотреблять этим не стоит. Уж эту-то программу, можно без потери читабельности написать без таких выкрутасов.)

      Удалить
  99. Здравствуйте,подскажите как исправить эту ошибку пожалуйста
    error C3861: 'scаnf': identifier not found

    ОтветитьУдалить
    Ответы
    1. Добрый день, Алмаз.
      Ошибка: идентификатор scanf не найден. Это может быть в двух случаях:
      1. Вы забыли подключить библиотеку stdio.h, в которой объявлена функция scanf
      2. В написании scanf присутствуют, например, русские буквы. Вот здесь sсanf буква с написана на русском языке.

      Удалить
  100. Задание 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(), но как то подумал, что нужно.

    ОтветитьУдалить
    Ответы
    1. не то чтобы необязательно, а вообще не нужно. Числа a и b могут быть отрицательными и ответ будет неправильный.

      Удалить
  101. А вот с третьим заданием проблемы у меня. Просмотрел выше комментарии ребят, т.к. в своих размышлениях пришел в тупик, ну и после просмотра возникли вопросы. А непонятно мне следующие:
    if ((a==a1)||(b==b1))
    {
    printf("yes\n");
    }
    else
    {
    printf("no\n");
    }
    return(0)
    Зачем сравнивать А и А1, Б и Б1? И получается надо вводить А и А1(как пример) одинаковыми? Тем более по условию числа идут от 1 до 8?

    ОтветитьУдалить
    Ответы
    1. Ну давайте сначала. Как у нас определяется положение фигуры на доске? Двумя координатами a и b. Номер строки и номер столбца. А при каком условии одна ладья бьёт другую? Как это проверить?

      Удалить
    2. Или что тоже самое, при каком условии ладья может совершить ход в некоторую клетку? Или если можете нарисовать в произвольном месте ладью, отметить все клетки куда она может пойти и посмотреть, что у общего у этих клеток.

      Удалить
  102. Задание 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); }

    ОтветитьУдалить
  103. Задание 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))?
    Зачем здесь остаток от деления на десять? И правильно ли в таком случае мое решение?

    ОтветитьУдалить
    Ответы
    1. ну попробуйте число 22 например, сработает ваша программа или нет?

      Удалить
    2. Да этот момент я не учел))) исправил все работает. Еще добавил ИЛИ n==0 и вообще все прекрасно стало. Благодарен за подсказку.

      Удалить
  104. Задание 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); }

    ОтветитьУдалить
    Ответы
    1. Добрый день.

      А что такое void(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");
      }
      return (0); }

      Удалить
  105. Задание 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);
    }

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Много лишнего в выводе. Достаточно лишь числа.
      А можете написать так, чтобы использовался только один if и один printf.

      Удалить
    2. И еще, интересно, какие два заголовочных файла вы подключаете?
      Одного достаточно тут.

      Удалить
  106. Задание 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);
    }

    ОтветитьУдалить
    Ответы
    1. Добрый день, Александр.
      Алгоритм правильный и программа работает верно. Но формат входных и выходных данных не соблюдаете.

      Удалить
  107. Отличные уроки, но зачем так писать? "Takoj hod nevozmozhen" и др., проще на русском написать или на англ.

    ОтветитьУдалить
    Ответы
    1. а ты попробуй напиши, у меня он отказался воспринимать кирилицу

      Удалить

Примечание. Отправлять комментарии могут только участники этого блога.