Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Поиск наибольшего из четных


Автор: sasha1212 8.12.2014, 12:45
Помогите пожалуйста с задачкой.Для каждого элемента А(i,j) найти наиб.значение среди всех четных элементов в выделенной области.Результат представить в виде таблицы.Помогите пожалуйста,в  графе результат появляется не то число,почему то неправильно создается область,кто знает где ошибка в коде
Код

#include <stdio.h>
#include <conio.h>

int A[20][20];
int C[100];
int N,M;
int k,s;
int poisk_max(int);


void vvod_massiva()
{int i,j;
 printf("\n Vvedite kol-vo strok i stolbcov \n");
 scanf("%d %d",&N,&M);
 printf("\n Vvedite matricy: \n");
 for(i=1;i<=N;i++)
      {for(j=1;j<=M;j++)
      scanf("%d",&A[i][j]);
      
      }
}

void vivod_massiva()
{
 int i,j;
 printf("\n Vasha matrica \n");
 for(i=1;i<=N;i++)
    {
     for(j=1;j<=M;j++)
     printf("%d ",A[i][j]);
     printf("\n");
        
    }
}

int postroenieoblasti(int x,int y)
{

 int W;
 int i,j;
 int max;
 

    k=1;
  for(j=y;j>=1;j--)                 //прямая
      {
      C[k]=A[x][j];
      printf("%d",C[k]);
      k++; }

  for(i=x-1,j=y+1;i>=1,j<=M;i--,j++)    // верхняя диагональ
      
      {
        C[k]=A[i][j];
            k++;

}
           
                    
  for(i=x+1,j=y+1;i<=N,j<=M; i++,j++)    // нижняя диагональ
        
            {
            C[k]=A[i][j];
    
    k++;}
 s=k-1;
W=poisk_max(s);

return W;

}

int poisk_max(int s)
{
int max;
     
for(k=1;k<=s;k++)
    {
    
    if(C[k]%2==0)
     {
        max=C[k];
        break;
     }
 }
  for(k=1;k<=s;k++)
     {if(C[k]%2==0 && C[k]>max)
          max=C[k];}
  
   return max;   
}

int  main ()
{
    int i,j,a,x,y;
          
    vvod_massiva();
    vivod_massiva();

printf("| N | i | j | rezultat |\n");
printf("|   |   |   |          |\n");

    a=1;
    for(x=1;x<=N;x++)
    for(y=1;y<=M;y++)

{

A[x][y]=postroenieoblasti(x,y);

printf("|%3d|%3d|%3d|%10d|\n",a,x,y,A[x][y]);
a++;
}

getch();

}

Автор: feodorv 9.12.2014, 00:56
Цитата(sasha1212 @  8.12.2014,  12:45 Найти цитируемый пост)
почему то неправильно создается область

А кто знает, как строится эта область?


В код не вчитывался. Однако я не понял, чем диктовалось изменение исходного массива в последнем цикле:
Цитата(sasha1212 @  8.12.2014,  12:45 Найти цитируемый пост)
    for(x=1;x<=N;x++)
    for(y=1;y<=M;y++)
{
A[ x ][ y ]=postroenieoblasti(x,y);
printf("|%3d|%3d|%3d|%10d|\n",a,x,y,A[x][y]);
a++;
}

Почему нельзя было оставить массив в покое, а ввести дополнительную переменную:
Код
{
int v=postroenieoblasti(x,y);
printf("|%3d|%3d|%3d|%10d|\n",a,x,y,v);
a++;
}



Ну и возник вопрос:
Цитата(sasha1212 @  8.12.2014,  12:45 Найти цитируемый пост)
int poisk_max(int s)
{
int max;
     
for(k=1;k<=s;k++)
    {
    
    if(C[k]%2==0)
     {
        max=C[k];
        break;
     }

А если нет в массиве C[] четного элемента (ну вот такие входные данные), то чему будет равно значение переменной max?


ЗЫ Я не знаю, как у Вас в задаче выглядит "выделенная область", но понимаю, что размера массива C[] может не хватить: всего в массиве A[][] максимально 400 элементов, а в массив C[] влезает только 100. Конечно, Вам виднее, хватит ли этого или нет...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)