Найти массу для смешивания при заданной концентрации - C (СИ)
Формулировка задачи:
Имеется два раствора, вводим в программу вес и концентрацию первого, затем вес и концентрацию второго. Затем вводим вес и концентрацию желаемой смеси из двух. И программа выводит необходимое количество грамм двух веществ для смешивания.
Пример работы программы:
Вес и концентрация первого раствора #1:
4 0.3
Вес и концентрация первого раствора #2:
2 0.6
Необходимый вес и концентрация смеси:
1 0.5
Вывод:
0.333333 x #1 + 0.666667 x #2
Когда ввожу "a 1"
То программа правильно выводит
Непр ввод.
НО! когда ввожу "1 a" (букву на втором месте)
То программа выводит
кол и конц #2:
Непр ввод.
как убрать лишнюю строку "кол и конц #2:"?
Необходим вывод как в первом случаи т.е.
Кол1 конц1 #1:
1 abc
Непр ввод.
#include #include int main() { double x,ki, k2, k1, koli, kol1, kol2; printf ("Кол1 конц1 #1:\n"); //scanf("%lf %lf", &kol1, &k1); if ((!scanf("%lf %lf", &kol1, &k1) || (k1>1.0))) printf ("Непр ввод. \n"); else{ printf ("кол и конц #2:\n"); //scanf("%lf %lf", &kol2, &k2); if ((!scanf("%lf %lf", &kol2, &k2)) || (k2>1.0) ) printf ("Непр ввод. \n"); else { printf ("итог 1 и 2:\n"); //scanf("%lf %lf",&koli, &ki); if ((!scanf("%lf %lf",&koli, &ki)) || (ki>1.0)) printf ("Непр ввод. \n"); else {if (k1==k2) x=(ki-k2)/(k2); else x=(ki-k2)/(k1-k2); if (koli*x<=kol1 && koli*(1-x)<=kol2) printf("%f x #1 + %f x #2", fabs(koli*x), fabs(koli*(1-x))); else printf("Невозм. \n"); #ifndef #endif return 0; }}}}
Решение задачи: «Найти массу для смешивания при заданной концентрации»
textual
Листинг программы
#include <stdio.h> int main() { double x,ki, k2, k1, koli, kol1, kol2; printf ("Кол1 конц1 #1::\n"); fflush(stdin); if ((scanf("%lf %lf", &kol1, &k1)< 2 || (k1>1.0) || (k1<0) || (kol1<0))) printf ("Непр ввод.\n"); else{ printf ("Кол2 конц2 #2:\n"); fflush(stdin); if ((scanf("%lf %lf", &kol2, &k2)< 2 || (k2>1.0) || (k2<0) || (kol2<0))) printf ("Непр ввод.\n"); else { printf ("Итог:\n"); fflush(stdin); if ((scanf("%lf %lf",&koli, &ki)< 2 || (ki>1.0) || (ki<0) || (koli<0))) printf ("Непр ввод.\n"); else {if (k1==k2) x=(ki-k2)/(k2); else x=(ki-k2)/(k1-k2); if ((koli*x<=kol1) && (koli*(1-x)<=kol2)) printf("%lf x #1 + %lf x #2", (koli*x), (koli*(1-x))); else printf("Невозможнл.\n"); return 0; }}}}
Объяснение кода листинга программы
- Объявлены переменные: double x,ki, k2, k1, koli, kol1, kol2;
- Вывод сообщения
Кол1 конц1 #1::
и запрос ввода для kol1 и k1; - Проверка корректности ввода для kol1 и k1. Если ввод некорректен, выводится сообщение
Непр ввод.
и программа переходит к выводу сообщенияИтог:
; - Вывод сообщения
Кол2 конц2 #2:
и запрос ввода для kol2 и k2; - Проверка корректности ввода для kol2 и k2. Если ввод некорректен, выводится сообщение
Непр ввод.
и программа переходит к выводу сообщенияИтог:
; - Вывод сообщения
Итог:
и запрос ввода для koli и ki; - Проверка корректности ввода для koli и ki. Если ввод некорректен, выводится сообщение
Непр ввод.
и программа завершается; - Проверка равенства k1 и k2. Если они равны, вычисление x как (ki-k2)/(k2); иначе вычисление x как (ki-k2)/(k1-k2);
- Проверка условия (kolix<=kol1) && (koli(1-x)<=kol2);
- Если условие выполняется, выводится сообщение с результатом вычисления (kolix) и (koli(1-x)); иначе выводится сообщение
Невозможнл.
. - Возврат 0, означающий успешный завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д