Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу ошибка
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
siner siner вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.11.2012
Smile ошибка - 12.11.2012, 10:40

нужно вывести матрицу 5х5 спиралью по часовой стрелке, начиная с левого верхнего угла. сбивается в конце вывода. помогите, пожалуйста, найти ошибку.
c Код:
#include <stdio.h>


int main()
{
  int n,m,i,j1,j2,j3,stroka,stolb,c;
   
  float a[5][5]={{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}};
 
  n=5;
  m=5;
 

  printf("исходная матрица\n");
  for (j1=0;j1<n;j1++)
  {    
    for (j2=0;j2<m;j2++)
      printf("%5.2f ",a[j1][j2]);
    printf("\n");
  }
  printf("вывод элементов\n");

  stroka=0;
  stolb=0;

  c=0;

  while (c<n*m)
  {

    for (i=stolb; i<m-stolb-1; i++)
    {
      printf("%5.2f ",a[stroka][i]);
      c++;
    }
    stolb=i;

    for (i=stroka; i<n-stroka-1; i++)
    {
      printf("%5.2f ",a[i][stolb]);
      c++;
    }
    stroka=i;

    for (i=stolb; i>m-stolb-1; i--)
    {
      printf("%5.2f ",a[stroka][i]);
      c++;
    }
    stolb=i;
             
    for (i=stroka;i>n-stroka-1;i--)
    {
      printf("%5.2f ",a[i][stolb]);
      c++;
    }
    stroka=i;

    stroka++;
    stolb++;
  }
     

  scanf("%d",&i);
  return 0;
}
Ответить с цитированием
  (#2 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 12.11.2012, 14:57

Понятно в общем, что происходит.
Программа доходит до центрального элемента матрицы a[2][2] и не может его вывести, т. к.
stolb==2
i=stolb==2
n-stolb-1==2
и в цикле for (i=stolb; i<n-stolb-1; i++)
условие i<n-stolb-1 не выполнено (оно означает 2<2), а значит не возможен вход в цикл.
То же самое для цикла for (i=stroka; i<n-stroka-1; i++), т. к. stroka==2.

И аналогично для
for (i=stolb; i>m-stolb-1; i--)
и
for (i=stroka;i>n-stroka-1;i--) ,
только там уже 2>2.

Ни одного входа в циклы for не происходит, далее программа делает
stroka++;
stolb++;
т. е. stroka==3
stolb==3 ,
выполняет еще одну итерацию цикла while(c<n*m), т. к. с==24<25,
первые два цикла for пропускает, т. к. условие входа выглядит как 3<1, а оставшихся 2 выполняет, откуда и получается этот хвост из чисел в конце (нижняя и левая сторона рамки).

В общем, не будет работать алгоритм с матрицами нечетной размерности, т. к. он не выводит последний (краний) элемент стороны выводимой рамки. В частности к ошибке приведет попытка его запустить для матрицы m=n=1, т. е. матрицы из одного числа. Для матриц четной размерности m=n=2*N заработает.
Надо переделывать его по-другому.

Последний раз редактировалось Matematic; 12.11.2012 в 15:50
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не запускается STALKER Зов Припяти, ошибка: ошибка d3dx9_41.dll. даниэль Любые вопросы от новичков 23 22.05.2012 07:53
Ошибка при прожиге дисков - "ошибка драйвера DMA. ошибка CRC". burn Техническая поддержка 6 24.01.2012 19:51
При попытке зайти на сайт выдается ошибка - "ошибка подключения" shem-76 Любые вопросы от новичков 20 31.03.2010 23:48
При загрузке компьютера выдается ошибка: "ошибка при загрузке rjuq.mpo. Не найден Lisunov Любые вопросы от новичков 2 29.03.2010 16:44
Ошибка при запуске "S.T.A.L.K.E.R.": Ошибка при инициализации приложения(0xc000001d) 45дима Любые вопросы от новичков 1 15.01.2010 19:06
Ошибка: Generic Host Process For Win 32 Services-обнаружена ошибка СЕлНик Техническая поддержка 4 13.03.2009 17:07
При подключении к интернету выдается ошибка: svchost.exe Ошибка приложения. evgenich512 Любые вопросы от новичков 3 13.12.2008 23:26
NOD32 после проверки выдает "ошибка распаковки", что это за ошибка и как устранить? *АЛХИМИК* Любые вопросы от новичков 7 02.12.2008 01:07
При директиве PUT - ошибка 75 ошибка обращения к файлу/пути cowboy Visual Basic 4 17.11.2005 18:51
Как узнать что ошибка программы или же ошибка в программном коде Vasis Delphi 0 01.07.2004 16:09



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов