Решено: Почему не компилируется код С++?

Модератор: Модераторы разделов

Аватара пользователя
halo
Сообщения: 128
ОС: debian 4

Решено: Почему не компилируется код С++?

Сообщение halo »

1. Почему не компилируется код С++?

2. Если n=100, то какое значение примет sum?





halo@debian:~/Desktop$ cat \!.cpp

#include <iostream>



cin >> n;

for (i = 1; i <= n; i++)

for (x = 1; x <= i; x++)

for (y = 1; y <= n - i + 1; y++)

a[x][y] += 1;



sum = 0;

for (x = 1; x <= n; x++)

for (y = 1; y <= n; y++)

sum += a[x][y];



cout << sum;



halo@debian:~/Desktop$ g++ \!.cpp

!.cpp:3: error: expected constructor, destructor, or type conversion before ‘>>’ token

!.cpp:4: error: expected unqualified-id before ‘for’

!.cpp:4: error: expected constructor, destructor, or type conversion before ‘<=’ token

!.cpp:4: error: expected constructor, destructor, or type conversion before ‘++’ token

!.cpp:5: error: expected constructor, destructor, or type conversion before ‘<=’ token

!.cpp:5: error: expected constructor, destructor, or type conversion before ‘++’ token

!.cpp:6: error: expected constructor, destructor, or type conversion before ‘<=’ token

!.cpp:6: error: expected constructor, destructor, or type conversion before ‘++’ token

!.cpp:9: error: expected constructor, destructor, or type conversion before ‘=’ token

!.cpp:10: error: expected unqualified-id before ‘for’

!.cpp:10: error: expected constructor, destructor, or type conversion before ‘<=’ token

!.cpp:10: error: expected constructor, destructor, or type conversion before ‘++’ token

!.cpp:11: error: expected constructor, destructor, or type conversion before ‘<=’ token

!.cpp:11: error: expected constructor, destructor, or type conversion before ‘++’ token

!.cpp:14: error: expected constructor, destructor, or type conversion before ‘<<’ token

halo@debian:~/Desktop$



ThaaanX! (=


P.S. Соре, кодбокс не могу воткнуть.
If I could, I would fly.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Решено: Почему не компилируется код С++?

Сообщение eddy »

А где main() ?
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
halo
Сообщения: 128
ОС: debian 4

Re: Решено: Почему не компилируется код С++?

Сообщение halo »

Поправил:

Код: Выделить всё

#include <iostream>
using namespace std;

int n;
int i;
int x;
int y;
int a;
int sum;

main()
{
cin >> n;
for (i = 1; i <= n; i++)
    for (x = 1; x <= i; x++)
    for (y = 1; y <= n - i + 1; y++)
        a[x][y] += 1;

sum = 0;
for (x = 1; x <= n; x++)
    for (y = 1; y <= n; y++)
    sum += a[x][y];

cout << sum;
}


Теперь ругается так:
~/Desktop$ g++ \!.cpp
!.cpp: In function ‘int main()’:
!.cpp:17: error: invalid types ‘int[int]’ for array subscript
!.cpp:22: error: invalid types ‘int[int]’ for array subscript
If I could, I would fly.
Спасибо сказали:
Аватара пользователя
Janik
Сообщения: 861
Статус: Оператор вычислительных машин
ОС: Debian

Re: Решено: Почему не компилируется код С++?

Сообщение Janik »

Вы не объявили массив. Надо делать так:

Код: Выделить всё

int a[x][y]

вместо x и y поставить числа, задающие размер массива.

ЗЫ: топик нужно переместить в раздел "Программирование для начинающих".
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
Аватара пользователя
halo
Сообщения: 128
ОС: debian 4

Re: Решено: Почему не компилируется код С++?

Сообщение halo »

Теперь компилируется, но ни с одним из вариантов ответов не сходится.
А) 5050
Б) 171700
В) 338350
Г) 10000
Д) 333300

Код: Выделить всё

#include <iostream>
using namespace std;

main()
{
    int n = 100;
    int i, x, y;
    int a[100][100];
    int sum;

for (i = 1; i <= 100; i++)
    for (x = 1; x <= i; x++)
    for (y = 1; y <= 100 - i + 1; y++)
        a[x][y] += 1;

sum = 0;

for (x = 1; x <= 100; x++)
    for (y = 1; y <= 100; y++)
    sum += a[x][y];

cout << sum << endl;
}


Там, где было n, я заменил на 100 сразу.
If I could, I would fly.
Спасибо сказали:
Robo
Сообщения: 121
ОС: Win XP SP3

Re: Решено: Почему не компилируется код С++?

Сообщение Robo »

Надо вот так:
1

Код: Выделить всё

int a[101][101];

Ну или везде писать так
2

Код: Выделить всё

a[x-1][y-1]

Индексы в массивах начинаются с нуля. При первом способе будут использоваться ячейки массива с индексами 1-100, а с индексом 0 не будет использоваться. Второй вариант не создаёт лишних ячеек.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Решено: Почему не компилируется код С++?

Сообщение NickLion »

halo писал(а):
13.12.2009 15:26
Теперь компилируется, но ни с одним из вариантов ответов не сходится.

Код: Выделить всё

a[x][y] += 1;

А обнулить?
Спасибо сказали:
Аватара пользователя
halo
Сообщения: 128
ОС: debian 4

Re: Решено: Почему не компилируется код С++?

Сообщение halo »

NickLion писал(а):
13.12.2009 17:03
halo писал(а):
13.12.2009 15:26
Теперь компилируется, но ни с одним из вариантов ответов не сходится.

Код: Выделить всё

a[x][y] += 1;

А обнулить?


В каком месте нужно обнулять?

Разбираюсь логически.
В первом цикле происходит заполнение элементов массива 100 х 100:

1 1
2 2
3 3
4 4 ....
.. ..
100 100


Во втором цикле происходит суммирование всех элементов массива.
If I could, I would fly.
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Решено: Почему не компилируется код С++?

Сообщение RasenHerz »

Думаю речь о инициализации массива начальными значениями: int a[2][2] = {{0, 0}, {0, 0}};
Спасибо сказали:
Аватара пользователя
halo
Сообщения: 128
ОС: debian 4

Re: Решено: Почему не компилируется код С++?

Сообщение halo »

RasenHerz писал(а):
14.12.2009 00:44
Думаю речь о инициализации массива начальными значениями: int a[2][2] = {{0, 0}, {0, 0}};


Да, там еще двойной переход по указателю добавить нужно. )
If I could, I would fly.
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Решено: Почему не компилируется код С++?

Сообщение RasenHerz »

halo писал(а):
14.12.2009 02:15
RasenHerz писал(а):
14.12.2009 00:44
Думаю речь о инициализации массива начальными значениями: int a[2][2] = {{0, 0}, {0, 0}};


Да, там еще двойной переход по указателю добавить нужно. )

Да бросьте: int a[100][100] = {{0}};
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Решено: Почему не компилируется код С++?

Сообщение NickLion »

Да, речь шла именно об инициализации массива a нулями. Достаточно записать int a[100][100] = {};

PS а заполнение происходит не так, там половина матрицы ниже побочной диагонали нулями останется, сама диагональ 1, заполнена и т.д.
Спасибо сказали:
Аватара пользователя
halo
Сообщения: 128
ОС: debian 4

Re: Решено: Почему не компилируется код С++?

Сообщение halo »

Работает. Окончательный вариант такой:

Код: Выделить всё

#include <iostream>
using namespace std;

main()
{
    int n = 100;
    int i, x, y;
    int a[101][101]={};
    int sum;

for (i = 1; i <= 100; i++)
    for (x = 1; x <= i; x++)
        for (y = 1; y <= 100 - i + 1; y++)
      a[x][y] += 1;


sum = 0;

for (x = 1; x <= 100; x++)
    for (y = 1; y <= 100; y++)
        sum += a[x][y];

cout << sum << endl;
}


На выходе число: 171700

Всем спасибо. Тему можно закрыть. :)
If I could, I would fly.
Спасибо сказали: