Форум программистов, компьютерный форум CyberForum.ru

Процедура в С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.83
Electrosoul
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 9
24.05.2012, 15:57     Процедура в С++ #1
Здравствуйте , госопода.
Дано условие задачи : 3. Даны действительные числа a, b, c. Получить:
С = max(a,a+b)+min(a,b+c)/1+max(a+bc , b+ac ,c+ab)
В программе обязательно использовать одну процедуру.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
bool error;
float calc_h (float a, float b, float c)
{
  float znam;
  znam = 1 + __max( a + b * c, __max( b + a * c, c + a * b));
  if (znam != 0)
  return ( __max (a, a + b) + __min (a, b + c)) / znam;  
  else 
    {
      error = true;
      return 1.0; 
     }
}
 
void main()
{
      float a, b, c, x;
      error = false;
      printf ("Vvedite chisla: ");
      scanf ("%f %f %f", &a, &b, &c ); 
      x = calc_h (a, b, c);
      if (!error)
      printf ("\n x = %f ", x);
      else
      printf ("Оshibka");
      getch ();
}
Использовал такой код , но нужно высчитать максимумы и минимумы самостоятельно , как это переделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2012, 15:57     Процедура в С++
Посмотрите здесь:

C++ Матрица и процедура
процедура C++
C++ Процедура
Процедура. C++
Процедура - не функция! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avg93
61 / 61 / 10
Регистрация: 11.12.2009
Сообщений: 247
Завершенные тесты: 3
24.05.2012, 16:18     Процедура в С++ #2
Напиши 2 функции:

C++
1
2
3
4
5
6
7
8
9
float Max(float a, float b)
{
if (a>b) return a; else return b;
}
 
float Min(float a, float b)
{
if (a<b) return a; else return b;
}
Electrosoul
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 9
24.05.2012, 16:51  [ТС]     Процедура в С++ #3
1. У нас даны 3 переменные , т.е придется писать float Max(float a, float b , float c)?
2. Нам каждый раз нужно высчитывать максимум из разных значений , т.е max(a,a+b);min(a,b+c);max(a+bc , b+ac ,c+ab) нужно для каждой написать процедуру так?

Добавлено через 20 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
float Max1(float a, float b,float c)
{
  if (a>a+b) 
  {
      return a;
  }
  else 
  {
       return (a+b);
  }
}
float Max2(float a, float b,float c) 
{
    if (a+b*c>b+a*c)
    {
        if (a+b*c>c+a*b)
        {
            return (a+b*c);
        }
        else
        {
            return (c+a*b);
        }
    }
    else
    {
        if (b+a*c>c+a*b)
        {
            return (b+a*c);
        }
        else
        {
            return (c+a*b);
        }
    }
}
float Min(float a, float b,float c)
{
     if (a>b+c) 
        {
            return a; 
        }
     else
        {
            return (b+c);
        }
}
float caclc_h (float a, float b, float c)
{
  float znam;
  znam = 1 + Max2;
  if (znam != 0)
  {
     return (Max1 + Min / znam);  
  }
  else 
    {
     printf("oshibka");
    }
}
 
void main()
{
      float a, b, c, x;
      printf ("Vvedite chisla: ");
      scanf ("%f %f %f", &a, &b, &c ); 
      x = calc_h (a, b, c);
      if (znam != 0)
      printf ("\n x = %f ", x);
      else
      printf ("Оshibka");
      getch ();
}
Перестроил , но выдает 4 ошибки в Void Main и в Caclc_h
avg93
61 / 61 / 10
Регистрация: 11.12.2009
Сообщений: 247
Завершенные тесты: 3
24.05.2012, 16:58     Процедура в С++ #4
Цитата Сообщение от Electrosoul Посмотреть сообщение
У нас даны 3 переменные , т.е придется писать float Max(float a, float b , float c)?
Зачем?
max(a,max(b,c));

Цитата Сообщение от Electrosoul Посмотреть сообщение
Нам каждый раз нужно высчитывать максимум из разных значений , т.е max(a,a+b);min(a,b+c);max(a+bc , b+ac ,c+ab) нужно для каждой написать процедуру так?
Зачем? Все лишь 2 функции макс и мин.
fidesxfx
9 / 9 / 0
Регистрация: 21.05.2012
Сообщений: 44
24.05.2012, 17:37     Процедура в С++ #5
Ну а насчет ошибок
выдает 4 ошибки в Void Main и в Caclc_h
мб всетаки дело в :
C++
1
2
3
znam = 1 + Max2;
 
return (Max1 + Min / znam)
Передавай параметры функциям чтоли.
Electrosoul
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 9
24.05.2012, 17:37  [ТС]     Процедура в С++ #6
avg93, Разве нельзя описать каждый максимум ? Ведь формула уже задана

Теперь выдает другие ошибки :

Ошибка 1 error C2297: +: недопустимо, правый оператор имеет тип "float (__cdecl *)(float,float,float)"
Ошибка 2 error C2296: /: недопустимо, левый операнд имеет тип "float (__cdecl *)(float,float,float)"


fidesxfx, Вы правы ,что ошибки именно в этих строках , но как передать параметры функциям и как оно работает?
fidesxfx
9 / 9 / 0
Регистрация: 21.05.2012
Сообщений: 44
24.05.2012, 17:52     Процедура в С++ #7
подправте код вообще,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
float caclc_h (float a, float b, float c)
{
  float znam;
  znam = 1 + Max2;
  if (znam != 0)
  {
     return (Max1 + Min / znam);  
  }
  else 
    {
     printf("oshibka");
    }
}
Функция принимает 3 параметра, затем вы не один из них не используете.

Ну а как передавать параметры? Как то так:
C++
1
znam = 1 + Max2(a,b,c);
Но там вам выше обясняли достатоно 2 функций на минимум и на максимум.
Electrosoul
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 9
24.05.2012, 18:17  [ТС]     Процедура в С++ #8
fidesxfx, Спасибо с ошибкой разобрался.
Теперь проблема в подсчетах и по всей видимости ошибка в расписании максимумов и минимумов.
Почему мои записи не подходят ?
И до сих пор не понял , как все можно уместить в 2 функции
fidesxfx
9 / 9 / 0
Регистрация: 21.05.2012
Сообщений: 44
24.05.2012, 18:30     Процедура в С++ #9
Напиши исправлений код, посмотрим что там у тебя
Electrosoul
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 9
24.05.2012, 18:31  [ТС]     Процедура в С++ #10
Нынешний код :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
float Max1(float a, float b,float c)
{
  if (a>a+b) 
  {
      return a;
  }
  else 
  {
       return (a+b);
  }
}
float Max2(float a, float b,float c) 
{
    if (a+b*c>b+a*c)
    {
        if (a+b*c>c+a*b)
        {
            return (a+b*c);
        }
        else
        {
            return (c+a*b);
        }
    }
    else
    {
        if (b+a*c>c+a*b)
        {
            return (b+a*c);
        }
        else
        {
            return (c+a*b);
        }
    }
}
float Min(float a, float b,float c)
{
     if (a>b+c) 
        {
            return a; 
        }
     else
        {
            return (b+c);
        }
}
float calc_h (float a, float b, float c)
{
  float znam;
  znam = 1 + Max2(a,b,c);
  if (znam != 0)
  {
     return (Max1(a,b,c) + Min(a,b,c) / znam);  
  }
  else 
    {
     printf("oshibka");
    }
}
 
void main()
{
      float a, b, c, x;
      printf ("Vvedite chisla: ");
      scanf ("%f %f %f", &a, &b, &c ); 
      x = calc_h (a, b, c);
      printf ("\n x = %f ", x);
      getch ();
}
Ошибок нет , но подсчитывает не верно... Несколько раз перепроверил максимумы и минимумы , но ошибок сам не нашел
fidesxfx
9 / 9 / 0
Регистрация: 21.05.2012
Сообщений: 44
24.05.2012, 18:56     Процедура в С++ #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
//----------------------------------------
float Min (float a, float b ) {
    if (a < b)
        return a;
    else 
        return b;
 
}
float Max (float a, float b ) {
    if (a > b)
        return a;
    else 
        return b;
 
}
//---------------------------------------
float calc_h (float a, float b, float c)
{
  float znam;
  znam = 1 + Max((a+b*c),Max((b+a*c),(c+a*b)));
  if (znam != 0)
  {
     return ((Max(a,(a+b)) + Min(a, (b+c)) ) / znam);  
  }
  else 
    {
     printf("oshibka");
    }
}
 
void main()
{
      float a, b, c, x;
      printf ("Vvedite chisla: ");
      scanf ("%f %f %f", &a, &b, &c ); 
      x = calc_h (a, b, c);
      printf ("\n x = %f ", x);
      getch ();
}
Вот вам рабочий код разбирайтесь, увы но ничего сложного тут нету. и я так понимаю в вашем примере С = max(a,a+b)+min(a,b+c)/ ( 1+max(a+bc , b+ac ,c+ab) ) была опущена скобка.
Electrosoul
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 9
24.05.2012, 19:04  [ТС]     Процедура в С++ #12
Только хотел написать об этой ошибке... Как всегда ошибки из-за невнимательности
Может кому пригодится и такой вариант :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
float Max1(float a, float b,float c)
{
  if (a>a+b) 
  {
      return a;
  }
  else 
  {
       return (a+b);
  }
}
float Max2(float a, float b,float c) 
{
    if (a+b*c>b+a*c)
    {
        if (a+b*c>c+a*b)
        {
            return (a+b*c);
        }
        else
        {
            return (c+a*b);
        }
    }
    else
    {
        if (b+a*c>c+a*b)
        {
            return (b+a*c);
        }
        else
        {
            return (c+a*b);
        }
    }
}
float Min(float a, float b,float c)
{
     if (a<b+c) 
        {
            return a; 
        }
     else
        {
            return (b+c);
        }
}
float calc_h (float a, float b, float c)
{
  float znam;
  znam = 1 + Max2(a,b,c);
  if (znam != 0)
  {
     return ((Max1(a,b,c) + Min(a,b,c)) / znam);  
  }
  else 
    {
     printf("oshibka");
    }
}
 
void main()
{
      float a, b, c, x;
      printf ("Vvedite chisla: ");
      scanf ("%f %f %f", &a, &b, &c ); 
      x = calc_h (a, b, c);
      printf ("\n x = %f ", x);
      getch ();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2012, 19:17     Процедура в С++
Еще ссылки по теме:

Простенькая процедура C++
C++ Внешняя процедура на ассемблере
Матрица и процедура C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
24.05.2012, 19:17     Процедура в С++ #13
Цитата Сообщение от Electrosoul Посмотреть сообщение
С = max(a,a+b)+min(a,b+c)/1+max(a+bc , b+ac ,c+ab)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
inline float max(float x, float y){
   return (x > y) ? x : y;
}
 
inline float min(float x, float y){
   return (x < y) ? x : y;
}
 
int main(){
   float a, b, c, C;
   C = max(a, a+b) + min(a, b+c) / (1 + max(a+bc, b+ac, c+ab));
 
   return 0;
}

Не по теме:

Научись наконец-то пользоваться запятыми. Чего я только не видел, где только запятая не стояла. ПИШИТЕ ПРАВИЛЬНО! Запятая ставится без пробела после последней буквы слова, за которым она следует. Потом ставится пробел, потом начинается другое слово. Если хотите, чтобы Вам кто-нибудь помог, помогите ему прочитать Ваш текст!

Yandex
Объявления
24.05.2012, 19:17     Процедура в С++
Ответ Создать тему
Опции темы

Текущее время: 04:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru