Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] вычисление функций 
:(
    Опции темы
Zhenyoker
Дата 8.12.2011, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 27.11.2011

Репутация: нет
Всего: нет



Здравствуйте! Возникла небольшая проблема с расчётом функций.
После вычисления одной функции вылезает моё меню с предложением рассчитать другую функцию с теми же переменными -> я рассчитываю например 2ую функцию -> опять вылезает моё меню-> и когда я выбираю там рассчитать предыдущую функцию мне вычисляет совсем другие значения, хотя должны появляться те же значения что и в первый раз. (всё перепробовал, переприсвоение тоже).
Код
Код

#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <iomanip.h>

const float h1 = 1;
const float h2 = 4.33;
const float h3 = 3.11;

void main()
{
clrscr();
menu:
cout << "vipolnil:\n\n";
cout << "F1=x + sin(a*a + b)\n";
cout << "F2=(x + sin(a*a + b)/sqrt(a*x*x) + atan(b))\n";
cout << "F3=x + sin(a*a+b)/atan(a*b/x)\n\n";

float a,b,x,f;
cout << "‚ўҐ¤ЁвҐ ЇҐаҐ¬Ґ­­лҐ\n\na: ";
cin >> a;
cout << "b: ";
cin >> b;
cout << "x: ";
cin >> x;
cout << "\n";

men:
cout << "‚лЎЁаЁвҐ дг­ЄжЁо\n";
cout << "1) F1=x + sin(a*a + b)\n";
cout << "2) F2=(x + sin(a*a + b)/sqrt(a*x*x) + atan(b))\n";
cout << "3) F3=x + sin(a*a+b)/atan(a*b/x)\n";
cout << "4) ‚л室\n\n";

char otv,otv2;
do
{
otv = getch();
switch(otv)
{
case '1':
{
a = -3;
cout << setw(20) << "A" << setw(20) << "F1(x)\n\n";
while (a <= 6)
{f=x + sin(a*a + b);
cout << setw(20) << setprecision(4) << a << setw(20) <<setprecision(4)<< f << "\n";
a+=h1;
}
cout << "\n‚лЎЁаЁвҐ Їг­Єв ¬Ґ­о:\n";
cout << "1) ђ ббзЁв вм дг­ЄжЁо б ­®ўл¬Ё §­ зҐ­Ёп¬Ё\n";
cout << "2) ђ ббзЁв вм ¤агЈго дг­ЄжЁо б ⥬Ё ¦Ґ §­ зҐ­Ёп¬Ё\n";
cout << "3) ‚л室\n\n";

otv2=getch();
switch(otv2)
{
case '1':
{
clrscr();goto menu;break;
}
case '2':
{
clrscr();goto men;break;
}
case '3':
{
goto ex;break;
}}
getch();
clrscr();
goto menu;
break;
}
case '2':
{
if (a <= 0)
{
cout << "' ' ­Ґ ¬®¦Ґв Ўлвм ¬Ґ­миҐ 0, в.Є. Ї®¤ Є®а­Ґ¬ Ўг¤Ґв ®ваЁж вҐ«м­®Ґ зЁб«®\n\n\nЌ ¦¬ЁвҐ «оЎго Є« ўЁиг ¤«п ўў®¤  ¤агЈЁе ¤ ­­ле...\n\n";
getch();
clrscr();
goto menu;
}
else
{
b = -5;
cout << setw(20) << "B" << setw(20) << "F2(x)\n\n";
while (b <= 34)
{f=x + sin(a*a + b)/sqrt(a*x*x) + atan(b);
cout << setw(20) << setprecision(4)<< b << setw(20) << setprecision(4) << f << "\n";
b+=h2;
}
cout << "\n‚лЎЁаЁвҐ Їг­Єв ¬Ґ­о:\n";
cout << "1) ђ ббзЁв вм дг­ЄжЁо б ­®ўл¬Ё §­ зҐ­Ёп¬Ё\n";
cout << "2) ђ ббзЁв вм ¤агЈго дг­ЄжЁо б ⥬Ё ¦Ґ §­ зҐ­Ёп¬Ё\n";
cout << "3) ‚л室\n\n";

otv2=getch();
switch(otv2)
{
case '1':
{
clrscr();goto menu;break;
}
case '2':
{
clrscr();goto men;break;
}
case '3':
{
goto ex;break;
}
}
getch();
clrscr();
goto menu;
break;
} }
case '3':
{
if (a==0||b==0||x==0)
{
cout << "ЋиЁЎЄ ! arctg0=0,   ­  0 ¤Ґ«Ёвм ­Ґ«м§п!\n\n\nЌ ¦¬ЁвҐ «оЎго Є« ўЁиг ¤«п ўў®¤  ¤агЈЁе ¤ ­­ле...\n\n";
getch();
clrscr();
goto menu;
}
else

x = 6;
cout << setw(20) << "X" << setw(20) << "F3(x)\n\n";
while (x <= 34)
{f=x + sin(a*a+b)/atan(a*b/x);
cout << setw(20) << setprecision(4) << x << setw(20) << setprecision(4) << f << "\n";
x+=h3;
}
cout << "\n‚лЎЁаЁвҐ Їг­Єв ¬Ґ­о:\n" ;
cout << "1) ђ ббзЁв вм дг­ЄжЁо б ­®ўл¬Ё §­ зҐ­Ёп¬Ё\n";
cout << "2) ђ ббзЁв вм ¤агЈго дг­ЄжЁо б ⥬Ё ¦Ґ §­ зҐ­Ёп¬Ё\n";
cout << "3) ‚л室\n\n";

otv2=getch();
switch(otv2)
{
case '1':
{
clrscr();goto menu;break;
}
case '2':
{
clrscr();goto men;break;
}
case '3':
{
goto ex;break;
}}
getch();
clrscr();
goto menu;
break;
}}}
while (otv!='4');
ex:
}

PM MAIL   Вверх
volatile
Дата 9.12.2011, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 8
Всего: 85



Цитата(Zhenyoker @  8.12.2011,  20:47 Найти цитируемый пост)
cout << "\n‚лЎЁаЁвҐ ЇгЄв ¬Ґо:\n" ;
cout << "1) ђ ббзЁв вм дгЄжЁо б ®ўл¬Ё § 票ﬨ\n";
cout << "2) ђ ббзЁв вм ¤агЈго дгЄжЁо б ⥬Ё ¦Ґ § 票ﬨ\n";
cout << "3) ‚л室\n\n";

Вот меня интересует, как вы так вставляете?
Я даже при желании так сделать, наверное не смогу... (по крайней мере без посторонних криптующих программ  smile )

PM MAIL   Вверх
t_gran
Дата 9.12.2011, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: 33
Всего: 37



Zhenyoker, на будущее:
  • ваш не отформатированный код никто смотреть не будет;
  • не мешайте ввод/вывод C и C++;
  • цитирую Страуструпа: "Функции наводят порядок в хаосе алгоритмов". Используйте функции реализуя декомпозицию;
  • копи/паст в программе - это зло!
  • метки перехода (а-ля goto) - это зло! (Как бы на холиварщиков не наткнуться smile )
  • выкиньте этот хлам под названием Turbo C Builder. Вполне возможно что вы уже сидите на 64-х разрядной архитектуре, а всё используете 16-ти разрядный компилятор. Плюс этот хлам не считается со стандартами, а тот кто не с нами, тот против нас.

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

#include <iostream>
#include <cmath>
#include <conio.h>
#include <cstdio>
#include <iomanip>
#include <cstdlib>

using namespace std;

const float h1 = 1;
const float h2 = 4.33;
const float h3 = 3.11;

int main()
{
   system("cls");
menu:
   cout << "vipolnil:\n\n";
   cout << "F1=x + sin(a*a + b)\n";
   cout << "F2=(x + sin(a*a + b)/sqrt(a*x*x) + atan(b))\n";
   cout << "F3=x + sin(a*a+b)/atan(a*b/x)\n\n";
   float a, b, x, f, buff;
   cout << "Введите переменные\n\na: ";
   cin >> a;
   cout << "b: ";
   cin >> b;
   cout << "x: ";
   cin >> x;
   cout << "\n";
men:
   cout << "Выбирите функцию\n";
   cout << "1) F1=x + sin(a*a + b)\n";
   cout << "2) F2=(x + sin(a*a + b)/sqrt(a*x*x) + atan(b))\n";
   cout << "3) F3=x + sin(a*a+b)/atan(a*b/x)\n";
   cout << "4) Выход\n\n";
   char otv, otv2;
   do
   {
      otv = getch();
      switch (otv)
      {
         case '1':
         {
            buff = a;
            a = -3;
            cout << setw(20) << "A" << setw(20) << "F1(x)\n\n";
            while (a <= 6)
            {
               f = x + sin(a * a + b);
               cout << setw(20) << setprecision(4) << a << setw(20) << setprecision(4) << f << "\n";
               a += h1;
            }
            a = buff;
            cout << "\nВыбирите пункт меню:\n";
            cout << "1) Рассчитать функцию с новыми значениями\n";
            cout << "2) Рассчитать другую функцию с теми же значениями\n";
            cout << "3) Выход\n\n";
            otv2 = getch();
            switch (otv2)
            {
               case '1':
                  goto menu;

               case '2':
                  goto men;

               case '3':
                  goto ex;
            }
            getch();
            system("cls");
            goto menu;
         }
         case '2':
         {
            if (a <= 0)
            {
               cout << "' ' не может быть меньше 0, т.к. под корнем будет отриц тельное число\n\n\nН жмите любую клавишу для ввода других данных...\n\n";
               getch();
               system("cls");
               goto menu;
            }
            else
            {
               buff = b;
               b = -5;
               cout << setw(20) << "B" << setw(20) << "F2(x)\n\n";
               while (b <= 34)
               {
                  f = x + sin(a * a + b) / sqrt(a * x * x) + atan(b);
                  cout << setw(20) << setprecision(4) << b << setw(20) << setprecision(4) << f << "\n";
                  b += h2;
               }
               b = buff;
               cout << "\nВыбирите пункт меню:\n";
               cout << "1) Рассчитать функцию с новыми значениями\n";
               cout << "2) Рассчитать другую функцию с теми же значениями\n";
               cout << "3) Выход\n\n";
               otv2 = getch();
               switch (otv2)
               {
                  case '1':
                     system("cls");
                     goto menu;

                  case '2':
                     system("cls");
                     goto men;

                  case '3':
                     goto ex;
               }
               getch();
               system("cls");
               goto menu;
            }
         }
         case '3':
         {
            buff = x;
            if (a == 0 || b == 0 || x == 0)
            {
               cout << "Ошибка! arctg0=0, а на 0 делить нельзя!\n\n\nНажмите любую клавишу для ввод  других данных...\n\n";
               getch();
               system("cls");
               goto menu;
            }
            else
            {
               x = 6;
            }
            cout << setw(20) << "X" << setw(20) << "F3(x)\n\n";
            while (x <= 34)
            {
               f = x + sin(a * a + b) / atan(a * b / x);
               cout << setw(20) << setprecision(4) << x << setw(20) << setprecision(4) << f << "\n";
               x += h3;
            }
            x = buff;
            cout << "\nВыбирите пункт меню:\n" ;
            cout << "1) Рассчитать функцию с новыми зн чениями\n";
            cout << "2) Рассчитать другую функцию с теми же значениями\n";
            cout << "3) Выход\n\n";
            otv2 = getch();
            switch (otv2)
            {
               case '1':
                  system("cls");
                  goto menu;

               case '2':
                  system("cls");
                  goto men;

               case '3':
                  goto ex;
            }
            getch();
            system("cls");
            goto menu;
         }
      }
   }
   while (otv != '4');
ex:
   return 0;
}


Теперь по части ошибки  smile: Вы почему меняете значение базовых переменных x, a, b? Ну даже если и меняете, то не забывайте восстанавливать.

Бинарник с исходником ниже.

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  archive.7z 141,14 Kb


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
Zhenyoker
Дата 9.12.2011, 04:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 27.11.2011

Репутация: нет
Всего: нет



t_gran - огромное Вам спасибо. Учту все ваши замечания на будующее.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0976 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.