Консультация № 107913
03.11.2007, 19:38
0.00 руб.
0 2 2
Подскажите в чем ошибка...
Вот код:
float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}};
float a[5]={0,0,0,0,0};
float b[5]={6,6,6,6,6};
int N=6;
int n=3;
int m=2;
int myr[3][6]={0};
int cyr[3][6]={0};
int sum_myr, myr_i;
for (int i=0; i<N; i++)
{
for (int r=0; r<n; r++)
{
sum_myr=0;
if (xr[r][i]<=a[r] || xr[r][i]>=b[r])
{
for (int j=n; j<(n+m); j++)
{
if (xr[j][i]>=a[j] && xr[j][i]<=b[j]){myr_i=1;} else {myr_i=0;}
sum_myr=sum_myr+myr_i;
//printf("myr_i = %i",myr_i);
}
}
if (sum_myr==m) {myr[r][i]=1;} else {myr[r][i]=0;}
}

for (int r=n; r<(n+m); r++)
{
if (xr[r][i]>=a[r] && xr[r][i]<=b[r]){cyr[r][i]=0;}
else {cyr[r][i]=1;}
}
}

for (int r=0; r<n; r++)
{
for (int i=0; i<N; i++)
{
printf("myr[%i][%i] = %i",r,i,myr[r][i]);
}
printf("");
}
for (int r=n; r<(n+m); r++)
{
for (int i=0; i<N; i++)
{
printf("cyr[%i][%i] = %i",r,i,cyr[r][i]);
}
printf("");
}
ответ получается неверный.
А если убрать строки:
for (int r=n; r<(n+m); r++)
{
if (xr[r][i]>=a[r] && xr[r][i]<=b[r]){cyr[r][i]=0;}
else {cyr[r][i]=1;}
}
то все правильно . В чем может быть дело?

Обсуждение

Неизвестный
03.11.2007, 22:01
общий
это ответ
Здравствуйте, Mart!
В приложении Ваша программа, которая компилируется...я исправил всего 2 ошибки...там было 3 объявления переменной r...там достаточно и одного...так как весь код выполняется в одном так сказать модуле...(Turbo C++ 3.0)
Ну и еще возможно лучше вместо: (xr[r][i]<=a[r] || xr[r][i]>=b[r])
писать: ((xr[r][i]<=a[r]) || (xr[r][i]>=b[r]))...т.е. всё условие в скобки и кажое условие в скобки(между которыми должно стоять "и","или")...


Приложение:
#include<conio.h>#include<stdio.h>void main(){float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}};float a[5]={0,0,0,0,0};float b[5]={6,6,6,6,6};int N=6;int n=3;int m=2;int myr[3][6]={0};int cyr[3][6]={0};int sum_myr, myr_i;for (int i=0; i<N; i++){for (int r=0; r<n; r++){sum_myr=0;if (xr[r][i]<=a[r] || xr[r][i]>=b[r]){for (int j=n; j<(n+m); j++){if (xr[j][i]>=a[j] && xr[j][i]<=b[j]){myr_i=1;} else {myr_i=0;}sum_myr=sum_myr+myr_i;//printf("myr_i = %i\n",myr_i);}}if (sum_myr==m) {myr[r][i]=1;} else {myr[r][i]=0;}}for (r=n; r<(n+m); r++){if (xr[r][i]>=a[r] && xr[r][i]<=b[r]){cyr[r][i]=0;}else {cyr[r][i]=1;}}}for (int r=0; r<n; r++){for (int i=0; i<N; i++){printf("myr[%i][%i] = %i",r,i,myr[r][i]);}printf("\n");}for (r=n; r<(n+m); r++){for (int i=0; i<N; i++){printf("cyr[%i][%i] = %i",r,i,cyr[r][i]);}printf("\n");}}
Неизвестный
04.11.2007, 05:06
общий
это ответ
Здравствуйте, Mart!

Ваша проблема в том, что размеры массива cyr[3][6], а в указанном массиве вы прописываете в строки с индесами 3 и 4, т.е. за пределами массива.
Поэтому Вам нужно либо расширить массив cyr[5][6] либо писать
for(int r = n; r < (n + m); r++)
{
if(xr[r][i] >= a[r] && xr[r][i] <= b[r])
{
cyr[r - n][i] = 0;
}
else
{
cyr[r - n][i] = 1;
}
}
Код Гальцова Андрея Михайловича не исправляет сути проблемы - переполнение массива.
Код Виктора Пырлика полон новых синтасических ошибок типа пробела в знаках >= и <= и не исправляет суть проблемы - переполнение массива.
memset() Вам не нужен. Виктор Пырлик, видимо, не знает или не понимает, что именно это и достигается записью
int cyr[3][6] = {0};
Согласно стандарту при частичной инициализации массива все отсальные элементы массива инициализируются величинами по умолчанию.
Форма ответа