Программирование
|
|
MADMAX | Дата: Среда, 2008-09-17, 11:19 AM | Сообщение # 1 |
 Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
| Вот решил сделать ещё одну тему Обсуждаем здесь кто чем занимается в области высоких компьютерных технологий 
Смотрю на мир...
|
|
| |
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
| Тоесть вобще компьютером не пользуешся?
Смотрю на мир...
|
|
| |
ElfDragon | Дата: Пятница, 2008-09-19, 0:02 AM | Сообщение # 4 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| Ага!! Макс, я тебе новое сообщение отправил Я третьи сутки над циклом бьюсь, а он не работает 
...А потом он пыхнул и ушел...
Сообщение отредактировал ElfDragon - Пятница, 2008-09-19, 0:06 AM |
|
| |
MADMAX | Дата: Суббота, 2008-09-20, 2:50 AM | Сообщение # 5 |
 Генерал-майор
Группа: Модераторы
Сообщений: 320
Статус: Offline
| Мне в личных сообщениях не удобно писать Каким образом ты циклиш 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 и цикл начинается снова. Если ввод прошёл успешно, то цикл у тебя снова идёт на ввод А про scanf я не знаю что тебе ещё сказать Видимо его так сделали чтобы он 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 а не из цикла. P.S. Если мои советы не помогли покажи мне свой код без ошибок и без описания функций типа MainEquation() 
Смотрю на мир...
Сообщение отредактировал 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
|
Смотрю на мир...
|
|
| |
ElfDragon | Дата: Понедельник, 2008-09-22, 9:48 PM | Сообщение # 15 |
 Генерал-лейтенант
Группа: Модераторы
Сообщений: 577
Статус: Offline
| А там еще проблемки вылезли =)))
...А потом он пыхнул и ушел...
|
|
| |