Найти массу для смешивания при заданной концентрации - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Имеется два раствора, вводим в программу вес и концентрацию первого, затем вес и концентрацию второго. Затем вводим вес и концентрацию желаемой смеси из двух. И программа выводит необходимое количество грамм двух веществ для смешивания. Пример работы программы: Вес и концентрация первого раствора #1: 4 0.3 Вес и концентрация первого раствора #2: 2 0.6 Необходимый вес и концентрация смеси: 1 0.5 Вывод: 0.333333 x #1 + 0.666667 x #2
#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;
}}}}
Когда ввожу "a 1" То программа правильно выводит Непр ввод. НО! когда ввожу "1 a" (букву на втором месте) То программа выводит кол и конц #2: Непр ввод. как убрать лишнюю строку "кол и конц #2:"? Необходим вывод как в первом случаи т.е. Кол1 конц1 #1: 1 abc Непр ввод.

Решение задачи: «Найти массу для смешивания при заданной концентрации»

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;
    }}}}

Объяснение кода листинга программы

  1. Объявлены переменные: double x,ki, k2, k1, koli, kol1, kol2;
  2. Вывод сообщения Кол1 конц1 #1:: и запрос ввода для kol1 и k1;
  3. Проверка корректности ввода для kol1 и k1. Если ввод некорректен, выводится сообщение Непр ввод. и программа переходит к выводу сообщения Итог:;
  4. Вывод сообщения Кол2 конц2 #2: и запрос ввода для kol2 и k2;
  5. Проверка корректности ввода для kol2 и k2. Если ввод некорректен, выводится сообщение Непр ввод. и программа переходит к выводу сообщения Итог:;
  6. Вывод сообщения Итог: и запрос ввода для koli и ki;
  7. Проверка корректности ввода для koli и ki. Если ввод некорректен, выводится сообщение Непр ввод. и программа завершается;
  8. Проверка равенства k1 и k2. Если они равны, вычисление x как (ki-k2)/(k2); иначе вычисление x как (ki-k2)/(k1-k2);
  9. Проверка условия (kolix<=kol1) && (koli(1-x)<=kol2);
  10. Если условие выполняется, выводится сообщение с результатом вычисления (kolix) и (koli(1-x)); иначе выводится сообщение Невозможнл..
  11. Возврат 0, означающий успешный завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы