Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2012, 01:21   #1
Aiur
Новичок
Джуниор
 
Регистрация: 23.08.2012
Сообщений: 2
Вопрос Цикл While.Подтолкните на мысль

Доброго времени суток.Вот решил познакомиться с языком Си по книжке Дейтелов.Помогите разобраться с маленькой проблемой.Дошёл до структур while, if/else.Так вот, там есть задачи для самоконтроля.Обе задачи должны быть решены с одним из способов реализации While, с контрольным(сигнальным, фиктивным, флаговым) значением.В обеих у меня одинаковая проблема.

Первая :

Задача состоит в том, чтобы с помощью контрольного значения (-1), т.е. пока его не введут, выполнялся цикл для разных заправок например.Требуется вывести км/литры по каждой конкретной заправке, и среднее кол-во км/литров по 2-3-4(сколько бы не ввёл юзер) заправкам

Код:
#include <stdio.h>
 
main ()
   {
   float total = 0, itogkm = 0, itoglitr = 0;
   int km, litr; 
   
   printf("Введите расход бензина(-1 to end): \n");
   scanf("%d", &litr);
   printf("Введи кол-во проеденных км: \n");
   scanf("%d", &km);
   
   while (litr != -1)  {  
      itoglitr += litr;
      itogkm += km;
      total = (float) km / litr; 
      litr++; /*здесь не очень понятно, в принципе мне не нужно не увеличивать, не уменьшать счётчик, кол-во вводов меня не интересует*/
      printf("Для этой заправки использовано км/литр: %f\n",  total); 
      printf("Введите расход бензина(-1 to end): \n");
      scanf("%d", &litr);
      printf("Введи кол-во проеденных км: \n");
      scanf("%d", &km);
       }
	   
      total = itogkm / itoglitr; 
      printf("Среднее число км/литров: %f\n", total);
      
	   
   return 0;
  }
Как сделать так, чтобы при вводе -1(т.е. этого самого контр.значения)
Код:
printf("Введите расход бензина(-1 to end): \n");
      scanf("%d", &litr);
      printf("Введи кол-во проеденных км: \n");
      scanf("%d", &km);
строка "Введи кол-во проеденных км: \n" не выводилась ? Т.е. если мы останавливаем цикл на вводе расхода бензина, вводить кол-во проеденных км не нужно.

Вторая :

Код:
#include <stdio.h>

main ()
   {
      float a, b, d, e, f, total, counter;
	  
	  printf("Введите номер счёта(-1 to end): \n");
	  scanf("%f", &a);
	  printf("Введите начальный баланс: \n");
	  scanf("%f", &b);
	  printf("Введите общую сумму расходов: \n");
	  scanf("%f", &d);
	  printf("Введите общую сумму кредита: \n");
	  scanf("%f", &e);
	  printf("Введите предельный размер кредита\n");
	  scanf("%f", &f);
	  
	  while (a != -1) {

		 total = (b - d) + e;

	  if (a != 0) 
		 printf("Баланс: %.2f\n", total);
	     
	  if (e < total)
	     printf("предельный размер кредита превышен\n");
		
                  printf("Введите номер счёта(-1 to end): \n");
	     scanf("%f", &a);
	     printf("Введите начальный баланс: \n");
	     scanf("%f", &b);
	     printf("Введите общую сумму расходов: \n");
	     scanf("%f", &d);
	     printf("Введите общую сумму кредита: \n");
	     scanf("%f", &e);
	     printf("Введите предельный размер кредита\n");
	     scanf("%f", &f);
	 }
	 

	 
	  return 0;
   
   }
Как бы всё аналогично.Если вводим номер счёта -1, остальные строки не нужны для вывода.Пробывал реализовать с помощью if/else.Но никак не поддаётся.

Прошу пояснить простыми словами, ибо только начал интересоваться.До этого не изучал ни единого языка.Давайте различные советы по коду.

Заранее благодарен
Aiur вне форума Ответить с цитированием
Старый 23.08.2012, 08:58   #2
Istrafiloff
Пользователь
 
Аватар для Istrafiloff
 
Регистрация: 05.07.2011
Сообщений: 33
По умолчанию

Нужно поставить дополнительную проверку на введенное значение перед выводом запроса на расстояние

Код:
main ()
   {
   float total = 0, itogkm = 0, itoglitr = 0;
   int km, litr; 
   
   printf("Введите расход бензина(-1 to end): \n");
   scanf("%d", &litr);
   printf("Введи кол-во проеденных км: \n");
   scanf("%d", &km);
   
   while (litr != -1)  {  
      itoglitr += litr;
      itogkm += km;
      total = (float) km / litr; 
      litr++; /*здесь не очень понятно, в принципе мне не нужно не увеличивать, не уменьшать счётчик, кол-во вводов меня не интересует*/
      printf("Для этой заправки использовано км/литр: %f\n",  total); 
      printf("Введите расход бензина(-1 to end): \n");
      scanf("%d", &litr);
      // ВОТ ТУТ ПРОВЕРКА (СОРИ ЗА КАПС)
      if (litr != -1) {
         printf("Введи кол-во проеденных км: \n");
         scanf("%d", &km);
        }
       }
	   
      total = itogkm / itoglitr; 
      printf("Среднее число км/литров: %f\n", total);
      
	   
   return 0;
  }
Цитата:
Читайте книги. Некоторые из них специально для этого написаны
Istrafiloff вне форума Ответить с цитированием
Старый 23.08.2012, 08:59   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Код:
while(true) // Povtorqt do opupeniq
{
  litr = chitaem_litr();
  if (litr != -1)
    break; // Vihodim iz cikla
    // Zdes vse ostalnoe
}
waleri вне форума Ответить с цитированием
Старый 23.08.2012, 15:36   #4
Aiur
Новичок
Джуниор
 
Регистрация: 23.08.2012
Сообщений: 2
По умолчанию

всем спасибо, разобрался.Даже и с break, хотя до него ещё не дошёл
Aiur вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дайте мысль) jawa250t Общие вопросы Delphi 4 09.02.2011 18:02
Ребят,помогите пожалуйста!хоть натолкнить на мысль.. katuffka91 Помощь студентам 1 22.05.2009 02:37
Подтолкните к решению Interesno Общие вопросы C/C++ 3 10.04.2009 00:23
Помогите или натолкните на мысль. alex2008ean Паскаль, Turbo Pascal, PascalABC.NET 2 12.12.2008 10:03
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34