Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
1

выводит неверный ответ

09.12.2010, 20:40. Показов 1119. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream.h>
#include <stdio.h>
const int n = 100;
 
int main (int argc, char * const argv[]) {
    int x;
    cout << "введите размер массива ";
    cin >> x;
    int mas[n];
    
    for (int i=0; i<x; i++) {
        cout << "введите "<<i+1<<" число";
        cin >>mas[i];
    }
    int y;
    for (int i=0; i<x; i++) {
        y=y+mas[i]-mas[i+1];
    }
    
    cout << y;
    return 0;
}
алгорит программы следующий 1-2+3-4+5-6+7-8+9-10, в ответе должно получиться -5, а выходит -1341930030
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2010, 20:40
Ответы с готовыми решениями:

Программа выводит неверный ответ (дан массив структур, содержащий сведения об успеваемости студентов - вывести список неуспевающих студентов)
Задача: Дан массив структур, содержащий сведения об успеваемости по информатике группы из 25...

Написать программу, которая выводит пример на вычитание, запрашивает ответ пользователя, проверяет его и выводит сообщение о правильности
Написать программу, которая выводит пример на вычитание (в пределах 100), запрашивает ответ...

Почему выводит неверный результат?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;locale.h&gt; #include...

Выводит неверный результат ln2=1-1/2+1/3-1/4
Здравствуйте, необходимо написать последовательный и параллельный код для подсчета...

14
246 / 178 / 47
Регистрация: 14.06.2010
Сообщений: 422
09.12.2010, 20:51 2
Ты игреку какое-нибудь значение присвой для начала
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
09.12.2010, 20:57 3
Во-первых, y у тебя не статическая, а автоматическая переменная, нулем она автоматом не инициализируется, надо делать это явно.

Во-вторых, смену знака надо отслеживать как-то так:
C++
1
2
3
4
5
6
7
8
        int y = 0; int plus = 1;
        for (int i=0; i<x; i++) {
                if (plus)
                  y+=mas[i];
                else
                  y-=mas[i];
                plus=!plus;
        }
0
21 / 21 / 7
Регистрация: 21.09.2010
Сообщений: 65
09.12.2010, 21:05 4
Вот что я придумал
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
#include <iostream>
using namespace std;
const int n=100;
 
int main()
{
    int x=0,y=0;
 
    cout << "введите размер массива ";
    cin >> x;
    int mas[n];
        
    for (int i=0; i<x; i++) 
    {
        cout << "введите "<<i+1<<" число";
        cin >>mas[i];
    }
    for(int i=1; i<x; i++)
        if(i%2==0)
            y+=mas[i-1];
        else 
            y-=mas[i-1];
    cout<<y;
}
1
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
09.12.2010, 21:36  [ТС] 5
я просто на паскале такое делал, там таких заморочек не было
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
09.12.2010, 22:51 6
Цитата Сообщение от Reee Посмотреть сообщение
Вот что я придумал
Ну тогда уж:
C++
1
2
3
4
                if (!(i&1))
                        y+=mas[i-1];
                else 
                        y-=mas[i-1];


Добавлено через 5 минут
Цитата Сообщение от nonamez123 Посмотреть сообщение
я просто на паскале такое делал, там таких заморочек не было
Паскали бывают разные. То, что Турбо-Паскаль зачищает часть статических переменных нулями, это недокументированная возможность, и пользоваться ей не стоит.

А с учетом перемены знака полюбас та же заморочка должна быть на любом языке, так что не надо катить.
0
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
09.12.2010, 22:59  [ТС] 7
Pascal
1
2
3
4
for i:= 1 to n do
begin
y:=y+x[i]-x[i+1];
end;
прекрастно работает

Добавлено через 5 минут
опять фигня, чёт бесить меня си начинает...
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
#include <iostream.h>
#include <stdio.h>
const int n=100;
 
int main (int argc, char * const argv[]) {
    // insert code here...
    int x;
cout << "введите размер массива ";
    cin >> x;
    int mas[n];
        
    for (int i=0; i<x; i++) 
        {
        cout << "введите "<<i+1<<" число";
        cin >>mas[i];
        }
    
    int y=0,j=0;
    for (int i=0; i<x; i++) {
        j++;
        y=y+(mas[i]*mas[x]);
        x=x-j;
    }
    cout << y;
    return 0;
}
вот такой алгоритм 1*10+2*9+3*8+4*7+5*6
0
21 / 21 / 7
Регистрация: 21.09.2010
Сообщений: 65
09.12.2010, 23:31 8
Будет работать если х четное.
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
#include <iostream>
using namespace std;
const int n=100;
 
int main()
{
    int x=0,y=0;
    int* s, *S;
 
    cout << "введите размер массива ";
    cin >> x;
    int mas[n];
        
    for (int i=0; i<x; i++) 
    {
        cout << "введите "<<i+1<<" число";
        cin >>mas[i];
    }
 
    s=&mas[0];
    S=&mas[x-1];
 
    for(int i=0; i<x/2; i++)
    {
     y+=*(s)**(S);
    s++;
    S--;
    }
    cout<<y;
}
1
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
09.12.2010, 23:37 9
Цитата Сообщение от nonamez123 Посмотреть сообщение
Pascal
1
2
3
4
for i:= 1 to n do
  begin
    y:=y+x[i]-x[i+1];
  end;
прекрастно работает
Оно не только не работает, а еще и за пределы отведенной памяти обращается...

Цитата Сообщение от nonamez123 Посмотреть сообщение
чёт бесить меня си начинает...
0
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
09.12.2010, 23:43  [ТС] 10
нет, оно работает нормально, там при вводе используется for i:= 1 to 2*n, что бы тут не выходило

Добавлено через 3 минуты
Цитата Сообщение от Reee Посмотреть сообщение
Будет работать если х четное.
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
#include <iostream>
using namespace std;
const int n=100;
 
int main()
{
    int x=0,y=0;
    int* s, *S;
 
    cout << "введите размер массива ";
    cin >> x;
    int mas[n];
        
    for (int i=0; i<x; i++) 
    {
        cout << "введите "<<i+1<<" число";
        cin >>mas[i];
    }
 
    s=&mas[0];
    S=&mas[x-1];
 
    for(int i=0; i<x/2; i++)
    {
     y+=*(s)**(S);
    s++;
    S--;
    }
    cout<<y;
}
как понять вот эту строчку y+=*(s)**(S);
y плюс равно умножить ?
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
09.12.2010, 23:45 11
Цитата Сообщение от nonamez123 Посмотреть сообщение
нет, оно работает нормально, там при вводе используется for i:= 1 to 2*n, что бы тут не выходило
Все равно не будет - проверь на калькуляторе.
0
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
09.12.2010, 23:49  [ТС] 12
Цитата Сообщение от Напильнег Посмотреть сообщение
Все равно не будет - проверь на калькуляторе.
ну значит ты круче моего препода.
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
10.12.2010, 11:01 13
Это несомненно!
0
21 / 21 / 7
Регистрация: 21.09.2010
Сообщений: 65
10.12.2010, 19:03 14
Цитата Сообщение от nonamez123 Посмотреть сообщение
как понять вот эту строчку y+=*(s)**(S);
y плюс равно умножить ?
Вот так.
y=y+*(s) * *(S)
0
21 / 21 / 5
Регистрация: 14.06.2010
Сообщений: 108
10.12.2010, 19:14 15
В этой строке ошибка
C
1
 for (int i=0; i<x; i++) {
нужно
C
1
 for (int i=0; (i+1)<x; i++) {
т.к. при обращении к последнему элементу условие i < x в пределах, а вот i+1 уже равно х, что собственно и приводит к данной проблеме...
0
10.12.2010, 19:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2010, 19:14
Помогаю со студенческими работами здесь

Калькулятор выводит неверный результат
Изучаю С++ по Страуструпу. Дошел до следующей задачи(калькулятор) и &quot;буксую&quot;, не пойму в чем...

При значении больше 10 выводит неверный результат
При вводе чисел до 10, например 4 выводится результат 4 = 4.02725. Начина с 10 результат такой...

Почему выводит неверный результат при вычислении произведения?
Еще 1 вопрос из разряда нубских: #include&lt;iostream&gt; #include&lt;cmath&gt; using namespace std; int...

Нахождение наибольшего общего делителя - почему выводит неверный итог?
Всем привет, что-то не могу понять:( Очень прошу помочь! int a, b; cin &gt;&gt; a &gt;&gt; b; while (b !=...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru