Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двумерные массивы, программа выдает ошибку 
V
    Опции темы
18652tasha
  Дата 19.1.2009, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 6.4.2008

Репутация: нет
Всего: нет



Вот условие задачи:
1.Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом.
2.Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.
Помогите решить 1-й пункт
И вот здесь код для второго, но прога выдает ошибку! 
Код

//---------------------------------------------------------------------------

#pragma hdrstop
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
//---------------------------------------------------------------------------

#pragma argsused
void main()
{
int i,j,n,m,flag,k,l,a[8][8],summ;
clrscr();
cout<<"Vvedite kolichestvo strok matriz k=";
    cin>>k;
    cout<<"Vvedite kolichestvo stolbzov matriz l=";
    cin>>l;
    for(i=0;i<k;i++)
        for(j=0;j<l;j++)
        a[i][j]=rand()%10-5;
    cout<<"\nIshodna matriza a[i][j]:\n";
     for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
           cout<<a[i][j]<<" ";
        cout<<"\n";
    }
summ=0;
for(i=0;i<n;i++)
{
  j=0; flag=0;
  while ((j<m) && (flag==0))
    if (a[i][j]<0) flag=1; else j++;
    if (flag==1)
      for(j=0;j<m;j++)
    {
    summ=summ+a[i][j];
    }
}
printf("\nرَىىà ‎ëهىهيٍîâ â ًٌٍîêàُ ٌ îًٍèِàٍهëüيûى ‎ëهىهيٍîى=");
printf("%d",summ);
getch();
}

PM MAIL   Вверх
NightXXX
Дата 19.1.2009, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 18.11.2006
Где: Россия

Репутация: нет
Всего: нет



Какую ошибку выдает ? 
И еще у тебя не понятно что есть n , m они вообще чему у тебя равны, задай значение им.
PM MAIL ICQ   Вверх
18652tasha
Дата 19.1.2009, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 6.4.2008

Репутация: нет
Всего: нет



Я не понимаю что там за ошибка, но из за нее программа не считает сумму.
PM MAIL   Вверх
NightXXX
Дата 19.1.2009, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 18.11.2006
Где: Россия

Репутация: нет
Всего: нет



1. Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом.

Код


int n,m,flag,a[8][8],rez[8],k;

n=m=8;
k=0;


for(int i=0;i<n;i++)
{ flag=1;
     for(int j=0;j<m,flag==1;j++)
         if(a[i][j]!=a[j][i]) flag=0;
  if(flag==1)
 {
   rez[k]=i; k++;
 } 
}
if(k>0)
{ printf("Rez : ");
   for(int i=0;i<k;i++)
         printf("%d  ",rez[i]);
}else printf("no");


Добавлено через 3 минуты и 38 секунд
Присвой n и m  значениям тогда будет работать, а то у тебя они объявлены а толку нету, и еще у тебя массив должен динамисечки объявлятся при таком раскладе, или же делай проверку чтобы не k и l не привышали бы 8, возможно из - за этого ошибка тоже!

Добавлено через 5 минут и 38 секунд
Вот так будет у тебя работать

Код

//---------------------------------------------------------------------------

#pragma hdrstop
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
//---------------------------------------------------------------------------

#pragma argsused
void main()
{
int i,j,n,m,flag,k,l,a[8][8],summ;
clrscr();
k=l=8;
    for(i=0;i<k;i++)
        for(j=0;j<l;j++)
        a[i][j]=rand()%10-5;
    cout<<"\nIshodna matriza a[i][j]:\n";
     for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
           cout<<a[i][j]<<" ";
        cout<<"\n";
    }
summ=0;
for(i=0;i<k;i++)
{
  j=0; flag=0;
  while ((j<m) && (flag==0))
    if (a[i][j]<0) flag=1; else j++;
    if (flag==1)
      for(j=0;j<l;j++)
    {
    summ=summ+a[i][j];
    }
}
printf("\nرَىىà ‎ëهىهيٍîâ â ًٌٍîêàُ ٌ îًٍèِàٍهëüيûى ‎ëهىهيٍîى=");
printf("%d",summ);
getch();
}

PM MAIL ICQ   Вверх
18652tasha
Дата 19.1.2009, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 6.4.2008

Репутация: нет
Всего: нет



да,пасибо, программа заработала, но как сделать чтобы она выводила сумму каждой строки, а то она у меня выводит какую-то одну и еще неизвестно какую(((?

Код

//---------------------------------------------------------------------------
#pragma hdrstop
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
//---------------------------------------------------------------------------
#pragma argsused
void main()
{
int i,j,n,m,flag,k,l,a[8][8],summ;
clrscr();
k=l=8;
    for(i=0;i<k;i++)
        for(j=0;j<l;j++)
        a[i][j]=rand()%10-5;
    cout<<"\nIshodna matriza a[i][j]:\n";
     for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
           cout<<a[i][j]<<" ";
        cout<<"\n";
    }
summ=0;
for(i=0;i<k;i++)
{
  j=0; flag=0;
  while ((j<m) && (flag==0))
    if (a[i][j]<0) flag=1; else j++;
    if (flag==1)
      for(j=0;j<l;j++)
    {
    summ=summ+a[i][j];
    }
}
printf("\nSumma el v strokax c otr el=\n");
printf("%d",summ);
int rez[8];
n=m=8;
k=0;
for(int i=0;i<n;i++)
{ flag=1;
     for(int j=0;j<m,flag==1;j++)
         if(a[i][j]!=a[j][i]) flag=0;
  if(flag==1)
 {
   rez[k]=i; k++;
 } 
}
if(k>0)
{ printf("Rez : ");
   for(int i=0;i<k;i++)
         printf("%d  ",rez[i]);
}else printf("no");
getch();
}


Это сообщение отредактировал(а) 18652tasha - 19.1.2009, 02:25
PM MAIL   Вверх
NightXXX
Дата 19.1.2009, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 18.11.2006
Где: Россия

Репутация: нет
Всего: нет



У тебя программа считает сумму всех отрицательных строк, чтобы считала отдельно то можно вот так: 

Код

//---------------------------------------------------------------------------
#pragma hdrstop
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
//---------------------------------------------------------------------------
#pragma argsused
void main()
{
int i,j,n,m,flag,k,l,a[8][8],summ[8],kk;
clrscr();
k=l=8;
    for(i=0;i<k;i++)
        for(j=0;j<l;j++)
        a[i][j]=rand()%10-5;
    cout<<"\nIshodna matriza a[i][j]:\n";
     for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
           cout<<a[i][j]<<" ";
        cout<<"\n";
    }
for(i=0;i<k;i++) //только для квадратной матрицы, иначе надо еще сравнимать k и l
summ[i]=0;kk=0;
for(i=0;i<k;i++)
{
  j=0; flag=0;
  while ((j<m) && (flag==0))
    if (a[i][j]<0) flag=1; else j++;
    if (flag==1)
   {
        for(j=0;j<l;j++)
       {
         summ[kk]=summ[kk]+a[i][j];
       }
      kk++;
    }
}
printf("\nSumma el v strokax c otr el=\n");
for(i=0;i<kk;i++)
  printf("%d  ",summ[kk]);

int rez[8];
n=m=8;
k=0;
for(int i=0;i<n;i++)
{ flag=1;
     for(int j=0;j<m,flag==1;j++)
         if(a[i][j]!=a[j][i]) flag=0;
  if(flag==1)
 {
   rez[k]=i; k++;
 } 
}
if(k>0)
{ printf("Rez : ");
   for(int i=0;i<k;i++)
         printf("%d  ",rez[i]);
}else printf("no");
getch();
}


вот так должно работать!!! 

Это сообщение отредактировал(а) NightXXX - 19.1.2009, 02:36
PM MAIL ICQ   Вверх
18652tasha
Дата 19.1.2009, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 6.4.2008

Репутация: нет
Всего: нет



Цитата

вот так должно работать!!!


Что то не работает. прога выводит только ответ no. А сумм - нет!
PM MAIL   Вверх
mes
Дата 19.1.2009, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Не смотря приведенный код, решил предложить свои варианты :

Цитата(18652tasha @  19.1.2009,  00:33 Найти цитируемый пост)
1.Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом.

Код

const int n=8;
for (int k=0; k<n; ++k) 
{
   bool flag = true;
   for (int i=0; i<n && flag; ++i) flag = (A[k][i] == A[i][k]);
      
   if (flag) printf ("%d stroka ravna %d stolbcu",k,k);
}

Цитата(18652tasha @  19.1.2009,  00:33 Найти цитируемый пост)
2.Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.

Код

const int n=8;
for (int k=0; k<n; ++k) 
{
   bool flag = false;
   for (int i=0; i<n && !flag; ++i)  flag = (A[i][k] < 0);
    
   if (flag)
   {
      int sum =0;
      for (int i=0; i<n; ++i)  sum+= A[i][k];
      printf ("summa otric.el. stroki %d  ravna %d ",k,sum); 
   }
}


Этот код из второго примера:
Код

 if (flag)
   {
      int sum =0;
      ...
   }

можно заменить на такой :
Код

  if (!flag) continue;
   
  int sum =0;
  ...


Это сообщение отредактировал(а) mes - 19.1.2009, 03:08


--------------------
PM MAIL WWW   Вверх
18652tasha
Дата 19.1.2009, 03:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 6.4.2008

Репутация: нет
Всего: нет



mes я сложила в кучу предложенные тобой варианты но для


Цитата

1.Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом.
 прога ничего не выводит
а для второго пункта мне кажется что она выводит не верные значения, может я что не так собрала:
Код

//---------------------------------------------------------------------------
#pragma hdrstop
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
//---------------------------------------------------------------------------
#pragma argsused
void main()
{
int i,j,m,flag,k,l,a[8][8],summ[8];
const int n=8;
clrscr();
k=l=8;
    for(i=0;i<k;i++)
        for(j=0;j<l;j++)
        a[i][j]=rand()%10-5;
    cout<<"\nIshodna matriza a[i][j]:\n";
     for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
           cout<<a[i][j]<<" ";
        cout<<"\n";
    }
for (int k=0; k<n; ++k)
{
   bool flag = true;
   for (int i=0; i<n && flag; ++i) flag = (a[k][i] == a[i][k]);

   if (flag) printf ("%d stroka ravna %d stolbcu",k,k);
}
for (int k=0; k<n; ++k) 
{
   bool flag = false;
   for (int i=0; i<n && !flag; ++i)  flag |= (a[i][k]<0);
    
   if (flag)
   {
      int sum =0;
      for (int i=0; i<n; ++i)  sum+= a[i][k];
      printf ("summa otric.el. stroki %d  ravna %d ",k,sum);
   }
}
getch();
}

PM MAIL   Вверх
mes
Дата 19.1.2009, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(18652tasha @  19.1.2009,  02:11 Найти цитируемый пост)
прога ничего не выводит

так в получаемой матрице и не было одинаковых строки и столбца  smile 
тестировать такие вещи надо не с рандомной, а с определенной матрицей.

вот подправил , лови  примерчик, тестируй и модернизируй под нужды 
Код

// инклуды

int a[8][8] =  { { 1, 2, 3, 4, 5, 6, 7, 8 },
                 { 1,-2, 3, 4, 5, 6, 7 ,8 },
                 { 6, 7, 4, 4,-5, 1, 2, 3 },
                 { 2, 4, 5, 6, 1, 2, 1, 8 },
                 { 9, 2, 3, 6, 4, 1, 0, 1 },
                 { 2, 1, 3, 7, 5, 8, 4,-4 },
                 { 7, 7, 2, 1, 0, 4, 5, 2 },
                 { 3, 3, 4, 2, 1, 4, 2,-1 } };

int main()
{
    const int n=8;

    cout<<"\nIshodna matriza a[i][j]:\n";
    for (int i=0; i<n; ++i)
    {
       for (int j=0; j<n; ++j)  cout<<a[i][j]<<" ";

       cout<<"\n";
    }

    for (int k=0; k<n; ++k)
    {
       bool flag = true;
       for (int i=0; i<n && flag; ++i) flag = (a[k][i] == a[i][k]);
       if (flag) printf ("%d stroka ravna %d stolbcu \n",k,k);
    }

    for (int k=0; k<n; ++k)
    {
       bool flag = false;
       for (int i=0; i<n && !flag; ++i)  flag = (a[i][k] < 0);

       if (!flag) continue;

       int sum =0;
       for (int i=0; i<n; ++i)  sum+= a[i][k];
       printf ("summa otric.el. stroki %d  ravna %d \n",k,sum);
    }

    getch();
}




Это сообщение отредактировал(а) mes - 19.1.2009, 03:36


--------------------
PM MAIL WWW   Вверх
18652tasha
Дата 19.1.2009, 03:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 6.4.2008

Репутация: нет
Всего: нет



mes насчет первого пункта - там все в порядке , а вот со вторым - прога выводит 1,4,7 строку, а должна 1,2,5,7 и сумму она все равно считает не правильно к примеру - сумма 7 строки 18, а выдает 25
PM MAIL   Вверх
mes
Дата 19.1.2009, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(18652tasha @  19.1.2009,  02:38 Найти цитируемый пост)
а вот со вторым - прога выводит 1,4,7 строку, а должна 1,2,5,

аа.. ну так ничего  страшного -  столбцы со строками перепутаны.. 
думаю более подробной подсказки для исправления и не требуется, или ?  smile 

Это сообщение отредактировал(а) mes - 19.1.2009, 03:49


--------------------
PM MAIL WWW   Вверх
18652tasha
Дата 19.1.2009, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 6.4.2008

Репутация: нет
Всего: нет



лучше исправь, я только изучаю с++ третий день , и для мя это исправление будет на весь день, а для тя на пару секунд


не надо , поняла , поправила, пасибо те

Это сообщение отредактировал(а) 18652tasha - 19.1.2009, 03:55
PM MAIL   Вверх
mes
Дата 19.1.2009, 03:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(18652tasha @  19.1.2009,  02:53 Найти цитируемый пост)
лучше исправь, я только изучаю с++ третий день , и для мя это исправление будет на весь день, а для тя на пару секунд

вот заодно и имена перемнных во всех циклах привел к одному виду :
Код

    const int n=8;

    cout<<"\nIshodna matriza a[i][j]:\n";
    for (int i=0; i<n; ++i)
    {
       for (int j=0; j<n; ++j) cout<<a[i][j]<<" ";

       cout<<"\n";
    }

    for (int i=0; i<n; ++i)
    {
       bool flag = true;
       for (int j=0; j<n && flag; ++j) flag = (a[i][j] == a[j][i]);
  
       if (flag) printf ("%d stroka ravna %d stolbcu \n",i,i);
    }

    for (int i=0; i<n; ++i)
    {
       bool flag = false;
       for (int j=0; j<n && !flag; ++j)  flag = (a[i][j] < 0);

       if (!flag) continue;

       int sum =0;
       for (int j=0; j<n; ++j)  sum+= a[i][j];

       printf ("summa otric.el. stroki %d  ravna %d \n",i,sum);
    }

    getch();




Это сообщение отредактировал(а) mes - 19.1.2009, 05:07


--------------------
PM MAIL WWW   Вверх
18652tasha
Дата 19.1.2009, 04:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 6.4.2008

Репутация: нет
Всего: нет



 smile  ну все мона спать  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0661 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.