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

выводит неверный ответ - C++

Войти
Регистрация
Восстановить пароль
 
nonamez123
 Аватар для nonamez123
185 / 181 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
09.12.2010, 20:40     выводит неверный ответ #1
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2010, 20:40     выводит неверный ответ
Посмотрите здесь:

C++ Не правильно выводит ответ на экран
Испраить ошибку - не считает(не выводит ответ) C++
Калькулятор выводит неверный результат C++
C++ Выводит неверный результат ln2=1-1/2+1/3-1/4
C++ Нахождение наибольшего общего делителя - почему выводит неверный итог?
При значении больше 10 выводит неверный результат C++
C++ Почему выводит неверный результат при вычислении произведения?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
09.12.2010, 20:51     выводит неверный ответ #2
Ты игреку какое-нибудь значение присвой для начала
Напильнег
480 / 120 / 10
Регистрация: 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;
        }
Reee
 Аватар для Reee
21 / 21 / 1
Регистрация: 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;
}
nonamez123
 Аватар для nonamez123
185 / 181 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
09.12.2010, 21:36  [ТС]     выводит неверный ответ #5
я просто на паскале такое делал, там таких заморочек не было
Напильнег
480 / 120 / 10
Регистрация: 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 Посмотреть сообщение
я просто на паскале такое делал, там таких заморочек не было
Паскали бывают разные. То, что Турбо-Паскаль зачищает часть статических переменных нулями, это недокументированная возможность, и пользоваться ей не стоит.

А с учетом перемены знака полюбас та же заморочка должна быть на любом языке, так что не надо катить.
nonamez123
 Аватар для nonamez123
185 / 181 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
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
Reee
 Аватар для Reee
21 / 21 / 1
Регистрация: 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;
}
Напильнег
480 / 120 / 10
Регистрация: 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 Посмотреть сообщение
чёт бесить меня си начинает...
nonamez123
 Аватар для nonamez123
185 / 181 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
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 плюс равно умножить ?
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
09.12.2010, 23:45     выводит неверный ответ #11
Цитата Сообщение от nonamez123 Посмотреть сообщение
нет, оно работает нормально, там при вводе используется for i:= 1 to 2*n, что бы тут не выходило
Все равно не будет - проверь на калькуляторе.
nonamez123
 Аватар для nonamez123
185 / 181 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
09.12.2010, 23:49  [ТС]     выводит неверный ответ #12
Цитата Сообщение от Напильнег Посмотреть сообщение
Все равно не будет - проверь на калькуляторе.
ну значит ты круче моего препода.
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
10.12.2010, 11:01     выводит неверный ответ #13
Это несомненно!
Reee
 Аватар для Reee
21 / 21 / 1
Регистрация: 21.09.2010
Сообщений: 65
10.12.2010, 19:03     выводит неверный ответ #14
Цитата Сообщение от nonamez123 Посмотреть сообщение
как понять вот эту строчку y+=*(s)**(S);
y плюс равно умножить ?
Вот так.
y=y+*(s) * *(S)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2010, 19:14     выводит неверный ответ
Еще ссылки по теме:

C++ Машина Тьюринга. Выводит неправильный ответ
C++ Не могу понять ошибку .Не выводит ответ задачи
C++ Неправильно выводит ответ
Почему выводит неверный результат? C++
C++ Code::Blocks выводит не правильный ответ

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

Или воспользуйтесь поиском по форуму:
illuminati
20 / 20 / 4
Регистрация: 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 уже равно х, что собственно и приводит к данной проблеме...
Yandex
Объявления
10.12.2010, 19:14     выводит неверный ответ
Ответ Создать тему
Опции темы

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