LINUX.ORG.RU

Помогите с лабой пожалуйста


0

0

Помогите пожалуйста найти ошибку

Задание: вывести максимальный член массива встречающийся более одного раза.

Надежда только на форум, так как программу 3 раза переделывал, ни компилятор ни преподаватели ошибок не находили, но программа не работает корректно.

Код:

#include <stdio.h>

int main(){
   int t,i,j,k,l,max,n,x;
   int mass[4][5],maxmass[10]={0};
   max=0;
   x=0;
   n=0;

     for(i=0;i<4;i++)
    for(j=0;j<5;j++)
      {
       printf("input element [%d,%d]\n",i+1,j+1);
       scanf("%d",&x);
       mass[i][j]=x;
      }
  for(i=0;i<4;i++)
  for (j=0;j<5;j++)
   for (k=i;k<4;k++)
   for (l=j+1;l<5;l++)
    if (mass[i][j]==mass[k][l]) {
     for (t=0;t<10;t++)
      if (mass[i][j]==maxmass[t]) n++;
       if (n==0)
      {
     maxmass[x]=mass[i][j];
     ++x;
     n=0;
    }
   }
 for (i=0;i<10;i++)
  max=maxmass[1];

 for(i=0;i<10;i++)
  if (max<maxmass[i]) max=maxmass[i];
   printf("maximalniy element massiva = %d\n",max);
 return 0;
}
★★

извини, но в такой лапше станет разбираться только бессмертный, верящий в вечность вселенной. у всех остальных не хватит времени на столь бесполезное занятие.

Если застрял - пиши комментарии:

1. опиши сам алгоритм, что он должен делать.

2. разбей программу на кусочки, перед каждым куском - описание что он должен делать. На этом этапе есть вероятность что увидишь баг

3. после каждого куска вставь печать промежуточных данные. Потом возьми пример c которым не работает, запусти, анализируй вывод и ищи где началось неправильное.

зы А у тебя алгоритм сортировки в портфолио (например предыдущей лабе) есть? если есть, то все можно сделать проще:

1. сортируем 2. бежим по массиву в обратном направлении. как только встретили 2 одинаковых числа стоящих подряд - вот оно...

gods-little-toy ★★★
()

> вывести максимальный член массива

почему тогда описана матрица?

> максимальный член

а если их несколько?

anonymous
()
Ответ на: комментарий от anonymous

Если с тем условием, что я спросил выше постом, то вот:

include <stdio.h>

#define XX 3
#define YY 3

int main(){
  int ii, jj, i, j, k, max = 0;
  int mass[XX][YY];
  
  
  for(i=0;i<XX;i++)
    for(j=0;j<YY;j++)
      {
	printf("input element [%d,%d]\n",i,j);
	scanf("%d",&mass[i][j]);
      }
  
  max=mass[0][0];
  for(i=0;i<XX;i++)
    for(j=0;j<YY;j++)
      {
	k=0;
	for(ii=0;ii<XX;ii++)
	  for(jj=0;jj<YY;jj++){
	    if(mass[i][j] == mass[ii][jj]) k++;
	  }
	if ((k > 1) && (max < mass[i][j]))  max = mass[i][j];
      }

 printf("maximalniy element massiva = %d\n",max);
 return 0;
}

anonymous
()

количество форов зашкаливает
алгоритм:
1) отсоритировать
2) посмотреть, есть ли в голове 2 одинаковых числа

вот этого вообще непонял:
for (i=0;i<10;i++)
max=maxmass[1];

и зачем нужен двумерный массив?

stave ★★★★★
()
Ответ на: комментарий от anonymous

Большое спасибо за помощь. По примеру твоего алгоритма сделал программу, добавил проверку сначала на минимальный член, иначе если следовать твоему примеру и если в начале массива будет стоять самый большой член, то он и выведется.

Dikar ★★
() автор топика
Ответ на: комментарий от ip1981

Огромное спасибо, ваша помощь неоценима.

Видимо вы , батенька, вылезли из утробы и сразу написали свой первый компилятор?

Dikar ★★
() автор топика
Ответ на: комментарий от anonymous

> я правильно понял, если в массиве числа 1,2,3,3,3,4,4,5, то выводить надо 4?

да.Верно

Dikar ★★
() автор топика
Ответ на: комментарий от anonymous

> почему тогда описана матрица? потому что это не матрица а двумерный массив

> максимальный член > а если их несколько?

я же написал "встречающийся более одного раза")) Само собой что их несколько) вывести 1 раз)

Dikar ★★
() автор топика
Ответ на: комментарий от stave

> и зачем нужен двумерный массив?

Увы. Препод сказал делать в прямоугольном двумерном массиве.

Dikar ★★
() автор топика
Ответ на: комментарий от gods-little-toy

Большое спасибо за советы.

Dikar ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.