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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
Нотка
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 18
#1

Одномерный массив, статическое выделение памяти, ошибка в объявлении - C++

04.11.2010, 00:12. Просмотров 2470. Ответов 8
Метки нет (Все метки)

Здравствуйте. Снова надеюсь на вашу помощь.

В двух массивах записаны результаты 20 игр двух футбольных команд (если игра окончилась выигрышем данной команды, то записано число 2, проигрышем— 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
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
 
int *mas1,*mas2,i,sum1=0,sum2=0,p1=0,p2=0;
const int n=20;
int mas1 [n];
int mas2 [n];
if(((mas1[n])==NULL)||((mas2[n])==NULL))
{
    cout<<"Out of memory!"<<'\n';
    return 1;
}
cout<<"Vvedite ochki 1 comandu"<<'\n';
for (i=0;i<n;i++)
cin>>mas1[i];
cout<<"Vvedite ochki 2 comandu"<<'\n';
for (i=0;i<n;i++)
cin>>mas2[i];
for (i=0;i<n;i++)
{
    if (((mas1[i]==0)||(mas1[i]==1)||(mas1[i]==2))&&((mas2[i]==0)||(mas2[i]==1)||(mas2[i]==2)))
    {
        sum1+=mas1[i];
        sum2+=mas2[i];
        if (mas1[i]==2)
            p1++;
        if (mas2[i]==2)
            p2++;
        if (((mas1[i]==0)&&(mas2[i]==2))||((mas1[i]==1))&&((mas2[i]==1))||((mas1[i]==2)||((mas2[i]==0))))
        cout<<"Mogli igrat' vmeste"<<i<<'\n';
    }
}
return 0;
}
Код
1>e:\студенчество\информатика\4 лаба\3\3\3.cpp(9) : error C2372: mas1: переопределение; различные типы косвенного обращения
1>        e:\студенчество\информатика\4 лаба\3\3\3.cpp(7): см. объявление 'mas1'
1>e:\студенчество\информатика\4 лаба\3\3\3.cpp(10) : error C2372: mas2: переопределение; различные типы косвенного обращения
1>        e:\студенчество\информатика\4 лаба\3\3\3.cpp(7): см. объявление 'mas2'
Сначала объявляю указатели на массивы, хотя вот сейчас думаю, зачем они? Я ведь пользуюсь везде индексами.
Если не объявляю указатели, пишет, что mas1 используется до инициализации.
Чувствую, что знаю, что нужно исправить, но пока не знаю, как именно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2010, 00:12     Одномерный массив, статическое выделение памяти, ошибка в объявлении
Посмотрите здесь:
Динамическое и статическое выделение памяти C++
В какой момент вызывается конструктор для глобального объекта, использующего статическое выделение памяти? C++
Двумерный Массив,динамическое выделение памяти-ошибка C++
C++ Выделение памяти. Ошибка
Выделение памяти под массив C++
C++ Массив строк, выделение памяти
C++ Выделение памяти под массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
04.11.2010, 00:17     Одномерный массив, статическое выделение памяти, ошибка в объявлении #2
Нотка, Во первых убрать указатели.
Во вторых убрать
C++
1
2
3
4
5
if(((mas1[n])==NULL)||((mas2[n])==NULL))
{
        cout<<"Out of memory!"<<'\n';
        return 1;
}
И в третьих в футболе за победу 3, за проигрыш 0, за ничью 1
Нотка
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 18
04.11.2010, 00:32  [ТС]     Одномерный массив, статическое выделение памяти, ошибка в объявлении #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Нотка, Во первых убрать указатели.
Во вторых убрать
C++
1
2
3
4
5
if(((mas1[n])==NULL)||((mas2[n])==NULL))
{
        cout<<"Out of memory!"<<'\n';
        return 1;
}
И в третьих в футболе за победу 3, за проигрыш 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
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
 
int i,sum1=0,sum2=0,p1=0,p2=0;
const int n=20;
int mas1 [n];
int mas2 [n];
cout<<"Vvedite ochki 1 comandu"<<'\n';
for (i=0;i<n;i++)
cin>>mas1[i];
cout<<"Vvedite ochki 2 comandu"<<'\n';
for (i=0;i<n;i++)
cin>>mas2[i];
for (i=0;i<n;i++)
{
    if (((mas1[i]==0)||(mas1[i]==1)||(mas1[i]==2))&&((mas2[i]==0)||(mas2[i]==1)||(mas2[i]==2)))
    {
        sum1+=mas1[i];
        sum2+=mas2[i];
        cout<<"Summa1="<<sum1<<'\t'<<"Summa2="<<sum2<<'\n';
        if (mas1[i]==2)
            p1++;
        if (mas2[i]==2)
            p2++;
        if (((mas1[i]==0)&&(mas2[i]==2))||((mas1[i]==1))&&((mas2[i]==1))||((mas1[i]==2)||((mas2[i]==0))))
        cout<<"Mogli igrat' vmeste"<<i<<'\n';
    }
    cout<<"Pobed11="<<p1<<'\t'<<"Pobed2="<<p2<<'\n';
    else
        cout<<"Error!"<<'\n';
 
}
return 0;
}
На консоль выводит, но итерации, когда могли играть вместе, выводит не всегда верно. Выводит и когда 1:2
Что тут не так?

Не по теме:

А условия мне дала преподавательница

ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
04.11.2010, 00:42     Одномерный массив, статическое выделение памяти, ошибка в объявлении #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
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
int main()
{
 
int i,sum1=0,sum2=0,p1=0,p2=0;
const int n=5;
int mas1 [n];
int mas2 [n];
cout<<"Vvedite ochki 1 comandu"<<'\n';
for (i=0;i<n;i++)
cin>>mas1[i];
cout<<"Vvedite ochki 2 comandu"<<'\n';
for (i=0;i<n;i++)
cin>>mas2[i];
for (i=0;i<n;i++)
{
        if (((mas1[i]==0)||(mas1[i]==1)||(mas1[i]==2))&&((mas2[i]==0)||(mas2[i]==1)||(mas2[i]==2)))
        {
                sum1+=mas1[i];
                sum2+=mas2[i];
                if (mas1[i]==2)
                        p1++;
                if (mas2[i]==2)
                        p2++;
                if (((mas1[i]==0)&&(mas2[i]==2))||((mas1[i]==1))&&((mas2[i]==1))||((mas1[i]==2)&&((mas2[i]==0))))
                cout<<"Mogli igrat' vmeste"<<i<<'\n';
        }
}
cout<<"Summa1="<<sum1<<'\t'<<"Summa2="<<sum2<<'\n';
cout<<"Pobed11="<<p1<<'\t'<<"Pobed2="<<p2<<'\n';
return 0;
}
Нотка
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 18
04.11.2010, 01:02  [ТС]     Одномерный массив, статическое выделение памяти, ошибка в объявлении #5
Не выводит количества побед, суммы и всё равно ситуации, когда могли играть вместе выводит неверно.
Миниатюры
Одномерный массив, статическое выделение памяти, ошибка в объявлении  
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
04.11.2010, 01:05     Одномерный массив, статическое выделение памяти, ошибка в объявлении #6
Нотка, Эм. Сумму и победы сто процентов должен выводить...
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
04.11.2010, 01:09     Одномерный массив, статическое выделение памяти, ошибка в объявлении #7
По сприну видно что все работает верно. Данные такие же как вводили вы.
Миниатюры
Одномерный массив, статическое выделение памяти, ошибка в объявлении  
Нотка
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 18
04.11.2010, 01:32  [ТС]     Одномерный массив, статическое выделение памяти, ошибка в объявлении #8
В коде ошибок нет, компилятор не ругается, но выводит у нас по-разному. Как написана программа, я поняла, поняла, почему, что и как меняли в коде. Это хорошо. Но проблема в том, что это отчёт по лабораторной. Поэтому у меня немного наглая просьба. Не могли бы вы ещё раз запустить програмку с любыми результатами, но сделать окошко с былым фоном и чёрными буковками? Свой скрин я то не могу вставить... Буду очень благодарна. Можно через инверсию в фотошопе, но там пропадает резкость, вобщем, придерутся за оформление...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2010, 01:38     Одномерный массив, статическое выделение памяти, ошибка в объявлении
Еще ссылки по теме:
Ошибка 3 (0x3), динамическое выделение памяти C++
C++ Динамическое выделение памяти под массив
Выделение памяти под массив строк C++
Динамическое выделение памяти под массив C++
Выделение памяти под двумерный массив C++

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

Или воспользуйтесь поиском по форуму:
KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
04.11.2010, 01:38     Одномерный массив, статическое выделение памяти, ошибка в объявлении #9
Осмелюсь предложить такой вариант на Си:

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
#include <stdio.h>
#include <math.h>
 
#define N 20
 
int main()
{
    int t, i, score[2][N] = {{0}}, sum[2] = {0}, wins[2] = {0};
 
    for (t = 0; t < 2; ++t)
    {
        i = 0;
 
        while (i < N)
        {
            printf("Enter score of match %u for team %u: ", i + 1, t + 1);
 
            if (scanf("%u", score[t] + i) != 1 || score[t][i] > 2 || score[t][i] < 0)
            {
                fflush(stdin);
                printf("Incorrect score, try again!\n");
 
                continue;
            }
 
            sum[t]  += score[t][i];
            wins[t] += (unsigned)(score[t][i] == 2);
 
            ++i;
        }
    }
 
    for (t = 0; t < 2; ++t)
        printf("Team %d total score %d and wins %d\n", t + 1, sum[t], wins[t]);
 
    for (i = 0; i < N; ++i)
        if (abs(score[0][i] - score[1][i]) == 2 || (score[0][i] == 1 && score[1][i] == 1))
            printf("Possibly teams played together game %d\n", i + 1);
 
    return 0;
}
Yandex
Объявления
04.11.2010, 01:38     Одномерный массив, статическое выделение памяти, ошибка в объявлении
Ответ Создать тему
Опции темы

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