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

Не могу найти недочет ( массивы ) - C++

Восстановить пароль Регистрация
 
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
10.01.2013, 18:54     Не могу найти недочет ( массивы ) #1
Есть программа,в которой решается 3 подзадачи.
Возникает такой "косяк"...вывод инф-ии целиком зависит от введенных данных, то есть он то выводит ответы на все 3 подзадачи, то только на первую и останавливается. Сами подзадачи решены вроде верно, но проблему с выводом я не могу решить. Ткните носом в ошибку, если найдете.
Сам код

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
#include <iostream>
using namespace std;
#include <windows.h>
#include <math.h>
#include <conio.h>
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP (1251);
    const int n=5;
    int mas[n],i;
    cout<<"Введите эл-ты массива:\n";
    for(i=0;i<n;i++)
    {
        cin>>mas[i];
    }
    int count=0;
 
    for ( i=0; i<n;i++)
    {
        if(mas[i]<0)
            count++;
    }
    cout<<"Кол-во отрицательных эл-в массива: \n "<<count;
    int imin=0;
 
    for(i=1;i<n;i++)
    {
        if (abs(mas[i])<abs(mas[imin]))
            i=imin;
    }
    
    int Sum=0;
    for (i=imin+1;i<n;i++)
        Sum+=abs(mas[i]);
 
    cout<<"Сумма модулей эл-тов массива, расположенных после минимального по модулю эл-та: \n"<<Sum;
 
    for ( i=0;i<n;i++)
    {   
        if(mas[i]<0)
            mas[i]*=mas[i];
    }
    int j,t;
    for( i=n-1;i>0;i--)
    {
        for(j=0;j<i;j++)
            if(mas[j]>mas[j+1])
            {
                t=mas[j+1];
                mas[j+1]=mas[j];
                mas[j]=t;
            }
    }
    cout<<"Измененный массив принимает вид:\n";
    for(i=0;i<n;i++)
        cout<<mas[i];
    _getch();
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2013, 18:54     Не могу найти недочет ( массивы )
Посмотрите здесь:

C++ Указатели, массивы. Не могу разобраться
массивы в С++ не могу создать прогу C++
массивы.не могу разобраться C++
Не могу решить циклы и массивы C++
Не могу найти ошибку. Массивы. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
10.01.2013, 18:57     Не могу найти недочет ( массивы ) #2
26 стр.:
Цитата Сообщение от Lotus34 Посмотреть сообщение
int imin=0;
может так правильно?:
C++
1
int imin = abs(mas[0]);
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
10.01.2013, 19:01     Не могу найти недочет ( массивы ) #3
Может 31 строка надо imin = i;
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
10.01.2013, 19:10  [ТС]     Не могу найти недочет ( массивы ) #4
Цитата Сообщение от David Sylva Посмотреть сообщение
Может 31 строка надо imin = i;
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
26 стр.:

может так правильно?:
C++
1
int imin = abs(mas[0]);
Спасибо огромное, так и вышло, в мелочах все ошибки)


А можно попросить глянуть ещё 1 код.У меня постоянная проблема с реализацией математических функций, никак не могу понять их полностью,вот и тут все ошибки в этих фун-ях.

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
#include <iostream>
using namespace std;
#include <windows.h>
#include <math.h>
#include <conio.h>
double U,W,V,Z;
int x;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP (1251);
 
cout<<"x=";
cin>>x;
cout<<'\n';
switch(x)
{
case 1:
    U=4.2*tan(x^2);
    cout<<"U="<<U;
break;
case 2:
    V=3.14*sin^2(x)-2*x;
    cout<<"V="<<V;
break;
case 3:
    W=7.11*log(x)+5*x;
    cout<<"W="<<W;
break;
case 4:
    Z=cos(2*x)-9.15*x;
    cout<<"Z="<<Z;
break;
default: cout<<"x не подходит ни ко одной формуле";
break;
} 
 
getch();
}
Ошибки:
error C2668: tan: неоднозначный вызов перегруженной функции
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(583): может быть 'long double tan(long double)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(535): или 'float tan(float)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(126): или 'double tan(double)'
1> при попытке сопоставить список аргументов '(int)'
1>m:\учеба\осн.программирования\семестровая\сема\1\2.cpp(23) : error C2563: несоответствие в списке формальных параметров
1>m:\учеба\осн.программирования\семестровая\сема\1\2.cpp(23) : error C2568: *: не удается разрешить перегрузку функции
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(577): может быть 'long double sin(long double)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(529): или 'float sin(float)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(124): или 'double sin(double)'
1>m:\учеба\осн.программирования\семестровая\сема\1\2.cpp(23) : error C2064: результатом вычисления фрагмента не является функция, принимающая 1 аргументов
1>m:\учеба\осн.программирования\семестровая\сема\1\2.cpp(27) : error C2668: log: неоднозначный вызов перегруженной функции
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(567): может быть 'long double log(long double)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(519): или 'float log(float)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(121): или 'double log(double)'
1> при попытке сопоставить список аргументов '(int)'
1>m:\учеба\осн.программирования\семестровая\сема\1\2.cpp(31) : error C2668: cos: неоднозначный вызов перегруженной функции
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(551): может быть 'long double cos(long double)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(503): или 'float cos(float)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(116): или 'double cos(double)'
1> при попытке сопоставить список аргументов '(int)'
1>Журнал построения был сохранен в "file://m:\Учеба\Осн.Программирования\Семестровая\Сема\1\Debug\BuildLog.htm"
1>1 - ошибок 6, предупреждений 0
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
10.01.2013, 19:16     Не могу найти недочет ( массивы ) #5
Lotus34 У вас в математических функциях везде аргумент типа int.Это неправильно переделайте на double.
FlaYnoSt
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 18
10.01.2013, 19:16     Не могу найти недочет ( массивы ) #6
31 строка

C++
1
imin = i
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
10.01.2013, 19:28  [ТС]     Не могу найти недочет ( массивы ) #7
Цитата Сообщение от David Sylva Посмотреть сообщение
Lotus34 У вас в математических функциях везде аргумент типа int.Это неправильно переделайте на double.
Я изменил на double x и теперь он мне пишет следующее
Все теже ошибки, только теперь
недопустимое выражение типа 'double' в операторе switch
1> Требуется выражение целого типа

Что я опять не так сделал?
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
10.01.2013, 19:30     Не могу найти недочет ( массивы ) #8
Lotus34 Как звучит условие задачи?
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
10.01.2013, 19:32  [ТС]     Не могу найти недочет ( массивы ) #9
Цитата Сообщение от David Sylva Посмотреть сообщение
Lotus34 Как звучит условие задачи?
. Составить программу расчёта и печати одной из четырёх функций в зависимости от сле-дующих условий:
u = 4,2 tg x2, при х = 1;
v = 3,14 sin2x –2x, при х = 2;
w = 7,11 ln x + 5x, при х = 3;
z = cos 2x – 9,15x, при х = 4.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
10.01.2013, 19:46     Не могу найти недочет ( массивы ) #10
Lotus34 Типа такого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream> 
#include <cmath> 
 
int main() 
{ 
    int x;  
    double U, V, W, Z;
    std::cout << "Inter x " << std::endl;
    std::cin >> x; 
 
    switch(x) 
    {  
    case 1: U = 4.2 * tan((double)x*2);  
        std::cout << "U  " << U << std::endl; break; 
    case 2: V = 3.14 * sin((double)x*2) - 2*x; 
        std::cout << "V  " << V << std::endl;break; 
    case 3: W = 7.11 * log((double) x) + 5 * x; 
        std::cout << "W  " << W << std::endl; break; 
    case 4: Z = cos((double) x * 2) - 9.15 * x; 
        std::cout << "Z  " << Z << std::endl;break; 
    default : std::cout << "Error " << std::endl;break;
    } 
}
Добавлено через 18 секунд
Посмотри внимательно, может где ошибся.
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
10.01.2013, 19:53  [ТС]     Не могу найти недочет ( массивы ) #11
Цитата Сообщение от David Sylva Посмотреть сообщение
Lotus34 Типа такого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream> 
#include <cmath> 
 
int main() 
{ 
    int x;  
    double U, V, W, Z;
    std::cout << "Inter x " << std::endl;
    std::cin >> x; 
 
    switch(x) 
    {  
    case 1: U = 4.2 * tan((double)x*2);  
        std::cout << "U  " << U << std::endl; break; 
    case 2: V = 3.14 * sin((double)x*2) - 2*x; 
        std::cout << "V  " << V << std::endl;break; 
    case 3: W = 7.11 * log((double) x) + 5 * x; 
        std::cout << "W  " << W << std::endl; break; 
    case 4: Z = cos((double) x * 2) - 9.15 * x; 
        std::cout << "Z  " << Z << std::endl;break; 
    default : std::cout << "Error " << std::endl;break;
    } 
}
Добавлено через 18 секунд
Посмотри внимательно, может где ошибся.
Все отлично заработало,то есть моя ошибка была в том, что я не ставил double в функциях, хотя ф-я double, а аргумент int?
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
10.01.2013, 19:56     Не могу найти недочет ( массивы ) #12
Цитата Сообщение от Lotus34 Посмотреть сообщение
Все отлично заработало,то есть моя ошибка была в том, что я не ставил double в функциях, хотя ф-я double, а аргумент int?
Надо было x преобразовывать в математических функциях в double.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2013, 20:22     Не могу найти недочет ( массивы )
Еще ссылки по теме:

C++ Массивы( я не до конца могу разобраться)
C++ Готовая прога исправить один недочет
C++ Не могу найти ошибку в коде, двумерные и одномерные массивы

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

Или воспользуйтесь поиском по форуму:
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
10.01.2013, 20:22  [ТС]     Не могу найти недочет ( массивы ) #13
Цитата Сообщение от David Sylva Посмотреть сообщение
Надо было x преобразовывать в математических функциях в double.
Да,я понял,спасибо огромное.
Yandex
Объявления
10.01.2013, 20:22     Не могу найти недочет ( массивы )
Ответ Создать тему
Опции темы

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