Среда, 2025-07-23, 2:49 AM
 
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Программирование
MADMAXДата: Среда, 2008-09-17, 11:19 AM | Сообщение # 1
Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
Вот решил сделать ещё одну тему smile

Обсуждаем здесь кто чем занимается в области высоких компьютерных технологий wink


Смотрю на мир...
 
chertenokДата: Среда, 2008-09-17, 3:17 PM | Сообщение # 2
Генерал-майор
Группа: Проверенные
Сообщений: 341
Статус: Offline
я ничем^^

Вы временно заблокированы. Дата и время разблокирования — Jul 28 2009, 05:00 PM.



Сообщение отредактировал chertenok - Среда, 2008-09-17, 3:17 PM
 
MADMAXДата: Четверг, 2008-09-18, 11:32 PM | Сообщение # 3
Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
Тоесть вобще компьютером не пользуешся? surprised

Смотрю на мир...
 
ElfDragonДата: Пятница, 2008-09-19, 0:02 AM | Сообщение # 4
Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
Ага!! Макс, я тебе новое сообщение отправил happy

Я третьи сутки над циклом бьюсь, а он не работает happy


...А потом он пыхнул и ушел...

Сообщение отредактировал ElfDragon - Пятница, 2008-09-19, 0:06 AM
 
MADMAXДата: Суббота, 2008-09-20, 2:50 AM | Сообщение # 5
Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
Мне в личных сообщениях не удобно писать sad

Каким образом ты циклиш try? Приведи если можно весь код.
Я бы так сделал:

bool flag = true;
while(flag)
{
try
{
// код ввода переменной
flag = false;
}
catch()
{
// обработка исключения
}
}

А со scanf вобще не понимаю что ты имел ввиду... Исключения ловятся в блоке catch или исключением ты считаеш правильное выполнение условия?
Функция scanf возвращает количество переменных, которым она успешно присвоила значения. Если при чтении произошла ошибка, функция scanf возвращает константу EOF. Соответсвенно, если ты ввёл не тот тип данных, который ты ожидаеш на входе, у тебя будет на выходе либо 0 либо EOF.


Смотрю на мир...

Сообщение отредактировал MADMAX - Суббота, 2008-09-20, 2:56 AM
 
ElfDragonДата: Суббота, 2008-09-20, 10:38 PM | Сообщение # 6
Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
Code
int main()
{
   
  int chType;
  bool flag = true;
   
  printf("Choose the task:\n");
  printf("Press 1 for the equation decision\n");
  printf("Press 2 for calculation the sum of numbers\n");
  printf("Press 3 for factorial calculation (rec)\n");
  printf("Press 4 for factorial calculation (cyc)\n");
  printf("Press 5 for exit\n");
  while(flag)
  {
  try {
       
      if (scanf ("%d", &chType)==0) throw chType;
      }
      catch (...)
   {
           printf ("Warning! Wrong number!\n");
   }
  }
    
   switch(chType)
   {
   case 1:
    {
     MainEquation();
     break;
    }
   case 2:
    {
     MainSum();
     break;
    }
   case 3:
    {
     MainFactorialRec();
     break;
    }
   case 4:
    {
     MainFactorialCyc();
     break;
    }
   case 5:
    {
     break;
    }
   }
  getch();
  return 0;
}

цикл бесконечный.. а со сканф да, я имел в виду, почему он возращает 0 при ошибке ввода..


...А потом он пыхнул и ушел...
 
MADMAXДата: Воскресенье, 2008-09-21, 3:10 PM | Сообщение # 7
Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
Правильно он у тебя и будет бесконечный. Надо запихнунть switch в блок try после инструкции if. Когда ты делаеш throw у тебя исполняется блок catch и цикл начинается снова. Если ввод прошёл успешно, то цикл у тебя снова идёт на ввод biggrin

А про scanf я не знаю что тебе ещё сказать tongue Видимо его так сделали чтобы он 0 возвращал в некоторых случаях, если ввод завершился неудачей.

P.S. Надеюсь в программе у тебя скобки "{ }" поровнее стоят.


Смотрю на мир...

Сообщение отредактировал MADMAX - Воскресенье, 2008-09-21, 3:11 PM
 
ElfDragonДата: Воскресенье, 2008-09-21, 7:05 PM | Сообщение # 8
Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
Аха... это я просто когда уикл восстанавливал, их криво поставил))

Он бесконечный!!)) Снова

Если белиберду ввести, он снова выводит сообщение об ошибке бесконечно(

Он похоже на второй итерации вообще не видит сканф((

Ииии Маааакс!))

p.s эту лабу я должен был "написать" две недели наазад)


...А потом он пыхнул и ушел...

Сообщение отредактировал ElfDragon - Воскресенье, 2008-09-21, 9:23 PM
 
MADMAXДата: Воскресенье, 2008-09-21, 11:00 PM | Сообщение # 9
Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
Функцию scanf использовать обязательно? Может быть действительно проблема в ней...
Могу посоветовать вместо неё попробовать getchar() или getch().
Code
char ch;     
ch = getchar();

switch(ch)
{
    case '1':
       ...
       break;
    case '2':
       ...
       break;
}

Эта функция возвращает код символа соответствующего нажатой клавише. Если при вводе произошла ошибка, то возвращается константа EOF. Для использования функции getch() не требуется нажимать Enter.

Так же тебе требуется точно понять где происходит ошибка, для этого надо ввести поэтапный вывод отладочной информации, можно использовать функцию printf на каждом шаге твоей программы.

Но помоему я понял где у тебя ошибка, тебе надо перед каждым break, ставить flag = false;
Потому что "брэйком" ты выходиш из switch а не из цикла. cool

P.S. Если мои советы не помогли покажи мне свой код без ошибок и без описания функций типа MainEquation() smile


Смотрю на мир...

Сообщение отредактировал MADMAX - Воскресенье, 2008-09-21, 11:34 PM
 
ElfDragonДата: Воскресенье, 2008-09-21, 11:41 PM | Сообщение # 10
Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
В сканфе ошипка, я уверен.. ибо если прописать в case flag = false, цикл нормально завершается

Макс, а у тебя аська есть?)


...А потом он пыхнул и ушел...

Сообщение отредактировал ElfDragon - Воскресенье, 2008-09-21, 11:42 PM
 
ElfDragonДата: Воскресенье, 2008-09-21, 11:56 PM | Сообщение # 11
Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
Code
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>

int factorial (int n);
void MainEquation();
void MainSum();
void MainEquation();
void MainFactorialCyc();

float ask (char *ParameterName) //Запрос параметров дял квадратного уравнения
{
  float fResult;
  printf("Input %s value:\n", ParameterName);
  if (scanf("%f", &fResult)<=0)  
  {
   printf ("Warning! Wrong number!");  
   return 0;
  }
  else  
  return fResult;
}

void Calculate (float a, float b, float c) //Вычисление его корней

{
  float discrim, fRadical, sRadical;
  discrim=(b*b)-(4*a*c);
    
   if (discrim<0)
   {
    printf("Radicals are not present\n");
   }
   else
   {
    if (discrim==0)
    {
     fRadical=(-1*b)/(2*a);
     printf("Unicue radical = %f\n", fRadical);  
    }
    else
    {
     fRadical=((-1*b)-sqrt(discrim))/(2*a);
     sRadical=((-1*b)+sqrt(discrim))/(2*a);
     printf("1st radical = %f\n", fRadical);
     printf("2nd radical = %f\n", sRadical);
      
    }
   }
}
void MainEquation() //Квадратное уравнение с 2 функциями
{
  float a,b,c;
  int change;

  do
  {
   a=ask("first");
   if (a==0){break;}
   b=ask("second");
   if (b==0){break;}
   c=ask("third");
   if (c==0){break;}
   Calculate(a,b,c);  
   printf ("The decision is ended, you wish to solve one more equation?\n");
   printf("1 - for continue, 2 - for exit\n");
   if (scanf("%d", &change)<=0)  
   {
    printf ("Warning! Wrong number!");  
    break;
   }
   else  
    {
     while(change!=1 && change!=2)
     {
      printf("Not distinguished command\n");
      printf("Try once again\n");
      if (scanf("%d", &change)<=0)  
      {
       printf ("Warning! Wrong number!");  
       break;
      }  
     }
    }
   if (scanf("%d", &change)<=0)  
   {
    break;
   }  
  }while (change!=2);
}

void MainSum() //подсчет суммы чисел
{
  int i,n, Sum=0,change;
  do
  {
   printf("Input your number\n");
   if (scanf("%d", &n)<=0)  
   {
    printf ("Warning! Wrong number!\n");  
    break;
   }
   if(n<0)
   {
    printf("Try once again\n");
   }
   else
   {
    for (i=0; i<=n; i++)
    {
     Sum+=i;
    }
   }
   printf("The sum of all numbers = %d\n", Sum);
   printf ("The decision is ended, you wish to solve one more equation?\n");
   printf("1 - for continue, 2 - for exit\n");
   if (scanf("%d", &change)<=0)  
   {
    printf ("Warning! Wrong number!");  
    break;
   }
   else  
    {
     while(change!=1 && change!=2)
     {
      printf("Not distinguished command\n");
      printf("Try once again\n");
      if (scanf("%d", &change)<=0)  
      {
       printf ("Warning! Wrong number!");  
       break;
      }  
     }
    }
   if (scanf("%d", &change)<=0)  
   {
    break;
   }  
  }while (change!=2);
}


...А потом он пыхнул и ушел...
 
ElfDragonДата: Воскресенье, 2008-09-21, 11:56 PM | Сообщение # 12
Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
Code
int factorial(int n)
{
   if (n<0)  
   {
    printf("Kill yourself, stupid user!\n");
    return -1;
   }
    return (n>1) ? (n*factorial(n-1)) : 1; //сравнивается с 0
}

void MainFactorialRec()//Рекурсивный факториал
{
  int n, Factorial,change;
  do
  {
   do
   {
    printf("Input your number\n");
    if (scanf("%d", &n)<=0)  
    {
     printf ("Warning! Wrong number!\n");  
     break;
    }
    Factorial = factorial (n);
    if (Factorial == -1)
    {
     printf("Try once again\n");
    }
   }while(Factorial==-1);
   if (scanf("%d", &n)<=0)  
   {  
    break;
   }
   printf("Calculation is ended\n");
   printf("Factorial = %d\n", Factorial);
   printf ("The decision is ended, you wish to solve one more equation?\n");
   printf("1 - for continue, 2 - for exit\n");
   if (scanf("%d", &change)<=0)  
   {
    printf ("Warning! Wrong number!");  
    break;
   }
   else  
    {
     while(change!=1 && change!=2)
     {
      printf("Not distinguished command\n");
      printf("Try once again\n");
      if (scanf("%d", &change)<=0)  
      {
       printf ("Warning! Wrong number!");  
       break;
      }  
     }
    }
   if (scanf("%d", &change)<=0)  
   {
    break;
   }  
  }while (change!=2);

}

void MainFactorialCyc()
{
  int i,n, Factorial=1,change;
  do
  {
   printf("Input your number\n");
   scanf("%d", &n);
   for (i=1; i<=n; i++)
   {
    Factorial=Factorial*i;
   }
   printf("Calculation is ended\n");
   printf("Factorial = %d\n", Factorial);
   printf ("The decision is ended, you wish to solve one more equation?\n");
   printf("1 - for continue, 2 - for exit\n");
   if (scanf("%d", &change)<=0)  
   {
    printf ("Warning! Wrong number!");  
    break;
   }
   else  
    {
     while(change!=1 && change!=2)
     {
      printf("Not distinguished command\n");
      printf("Try once again\n");
      if (scanf("%d", &change)<=0)  
      {
       printf ("Warning! Wrong number!");  
       break;
      }  
     }
    }
   if (scanf("%d", &change)<=0)  
   {
    break;
   }  
  }while (change!=2);
}


...А потом он пыхнул и ушел...
 
ElfDragonДата: Воскресенье, 2008-09-21, 11:56 PM | Сообщение # 13
Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
Code
int main()
{
   
  char chType;
  bool flag = true;
   
  printf("Choose the task:\n");
  printf("Press 1 for the equation decision\n");
  printf("Press 2 for calculation the sum of numbers\n");
  printf("Press 3 for factorial calculation (rec)\n");
  printf("Press 4 for factorial calculation (cyc)\n");
  printf("Press 5 for exit\n");
  while(flag)
  {
   try  
   {
    chType=getch();
    if (chType>1) throw chType;
    switch(chType)
    {
    case '1':
     {
      MainEquation();
      break;
     }
    case '2':
     {
      MainSum();
      break;
     }
    case '3':
     {
      MainFactorialRec();
      break;
     }
    case '4':
     {
      MainFactorialCyc();
      break;
     }
    case '5':
     {
       
      break;
     }
    }
   }
   catch (...)
   {
    printf ("Warning! Wrong number!\n");
   }
  }
  getch();
  return 0;
}


...А потом он пыхнул и ушел...
 
MADMAXДата: Понедельник, 2008-09-22, 0:39 AM | Сообщение # 14
Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
wacko smile

Смотрю на мир...
 
ElfDragonДата: Понедельник, 2008-09-22, 9:48 PM | Сообщение # 15
Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
А там еще проблемки вылезли =)))

...А потом он пыхнул и ушел...
 
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Сайт создан в системе uCoz