Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите решить 2 задачи
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
Дмитрий
Здравствуйте! Не писал на С++ уже больше полутора лет, друг попросил помочь, сам никак не разберусь...
Есть 2 задачи:
- Дан одномерный массив чисел, среди элементов которого есть одинаковые. Создать новый массив из различных элементов исходного массива.
- Дана действительная матрица размером n ? m, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы элемента с найденным значением.
Написал следующий код:
Задача №1
Предполагаемый алгоритм:
- Пусть дан массив a
- Сравниваем a[k] элемент со всеми остальными
- Если значения совпадают (но не совпадают индексы) элементов массива, то увеличиваем f,
если в результате работы цикла значение f равно 1, то число добавляем в другой массив.
Код

#include <iostream.h>
#include <conio.h>
void main()
{
clrscr();
int n,f,d,i,j,k,a[100],b[100];
f=1;
d=1;
cin >> n;
for (i=1; i<=n; i++)
{
cout << "Введите длину массива "  << i << " :";
cin >> a[i];
}
for (i=1; i<=n; i++)
{
cout << " " << a[i] << " ";
}
for (j=1; j<=n; j++)
{
for (k=1; k<=n; k++)
  {
  if (a[k]==a[j])
  {
  if (k!=j)
  {
   f++;
   }
   }
   if (f==1)
    {
    b[d]=a[j];
    d++;
    }
  }

}
for (i=0; i<=n; i++)
{
cout << b[i];
}

}

Задание 2:
- Берем матрицу и построчно находим минимальное значение.
- Каждое минимальное значение(а также координаты в матрице) добавляем в массив b.
- Находим максимальное значение среди элементов массива b, и выводим это значение.
Код

#include <iostream.h>
#include <conio.h>
void main ()
{
int n,m;
clrscr();
cout << "Enter rows:";
cin >> n;
cout << "Enter cols:";
cin >> m;
int i,f,j,k,a[10][10],b[10][3],d,t;
f=1;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
  {
  cout << "Enter a[" << i << "," << j << "]";
  cin >> a[n][m];
  }
}
for (d=1;d<=n; d++)
{
k=a[d][1];
for (t=1;t<=m;t++)
  {
  if (k<a[d][t]) {k=a[d][t]; b[f][1]=k; b[f][2]=d; b[f][3]=t;}
  }
}
k=b[1][1];
for (j=1; j<=m; j++)
  {
  if (b[j][1]>k) {k=b[j][1]; d=b[j][2]; t=b[j][3];}
  }
cout << "Max: " << k << " Str: " << d << " Stolb: " << t;
}


Оно компилируется, но не работает, подскажите пожалуйста как лучше реализовать эти задачи?
Заранее спасибо!
volvo
#1:
#include <iostream.h>
#include <conio.h>

int main() {

  clrscr();

  int a[100], b[100], i, j, n;

  cin >> n;
  for (i=0; i < n; i++) {
    cout << "element "  << i << " :";
    cin >> a[i];
  }

  for (i = 0; i < n; i++) {
    cout << " " << a[i] << " ";
  }

  int d = 0;
  for(i = 0; i < n; ++i) {

    int exists = 0;
    for(j = 0; j < d; ++j)
      if(a[i] == b[j]) { exists = 1; break; }

    if(!exists) b[d++] = a[i];

  }

  cout << endl;
  for (i=0; i < d; i++) {
    cout << b[i] << " ";
  }
  return 0;

}

volvo
Ну, и
#2:
#include <iostream.h>
#include <conio.h>
#include <values.h>

int main () {

  int i, j, n, m, res_i, res_j;
  clrscr();

  cout << "Enter rows:";
  cin >> n;

  cout << "Enter cols:";
  cin >> m;

  int a[10][10];
  for(i = 0; i < n; i++) {
    for(j = 0; j < m; j++) {
      cout << "Enter a[" << i+1 << "," << j+1 << "]";
      cin >> a[i][j];
    }
  }

  int maximal = -MAXINT;
  for(i = 0; i < n; ++i) {

    int ix_min = 0;
    for(j = 1; j < m; ++j)
      if(a[i][j] < a[i][ix_min]) ix_min = j;

    if(a[i][ix_min] > maximal) {
      maximal = a[i][ix_min];
      res_i = i; res_j = ix_min;
    }
  }

  cout << "max of mins = " << a[res_i][res_j]
       << ": " << res_i << ", " << res_j << endl;

  return 0;
}
Дмитрий
Большое спасибо за помощь!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.