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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Соседи элементов матрицы, не могу перенести код на C++ 
:(
    Опции темы
Vinouser
Дата 27.12.2013, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Соседом элемента a[i][j] матрицы называется другой элемент a[i][k] этой же матрицы, если каждый из индексов l и k отличается соответственно от i и j не более, чем на единицу. Дана вещественная матрица M x N. Построить матрицу B такого же размера, чтобы каждый элемент b[i][j] этой матрицы был равен наименьшему значению среди соседей элемента a[i][j].

Помогите пожалуйста перенести код с Паскаля на C++. Получается совсем не то, что нужно.

Вот код на Паскале:
Код

program PROGMatrix;
uses crt;
const n=4;m=5;
var a,b:array[1..m,1..n] of real;
    min:real;
    i,j,k,l,p,t,p1,t1:integer;
Begin
  clrscr;
 
{создаем массив чисел}
  randomize; 
  writeln('Исходный массив');
  for i:=1 to m do
   begin
    for j:=1 to n do
      begin
        a[i,j]:=random(50)/11;
        write(a[i,j]:0:2,'  ');
      end;
       writeln;
   end;
 
   for i:=1 to m do
    for j:=1 to n do
     begin
      min:=maxint;
    for k:=i-1 to i+1 do
      for l:=j-1 to j+1 do
 
    if ((k>=1) and (k<=m)) and ((l>=1)and (l<=n)) and ((i<>k) xor (j<>l))then
         begin
           if (a[k,l]<min) and (a[k,l]<>a[i,j]) then
             begin
               min:=a[k,l];
             end;
           b[i,j]:=min;
           end;
      end;
 
 
         writeln;
         writeln('полученный массив');
         for i:=1 to m do
           begin
             for j:=1 to n do write(b[i,j]:0:2,'  ');
             writeln;
           end;
         readln;
 
end.


Вот на C++:
Код

#include <iostream>
#include <cmath>
#include <iomanip>
#include <ctime>
#include <cstdlib>
using namespace std;
 
void main()
{
    system("cls");
    setlocale(0,"");
    srand(time(NULL));
    int m,n;
    int i,j,k,l;
    float min;
    cout << "Количество строк матрицы: "; cin >> m;
    cout << "Количество столбцов матрицы: "; cin >> n;
    float **a = new float *[m];
    float **b = new float *[m];
    for (int i=0; i<m; i++)
    {
        a[i] = new float[n];
        b[i] = new float[n];
    }
 
    cout << endl << "Исходная матрица:\n\n";
    for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            a[i][j] = rand()/(float)32767*20-10; //(double)rand() / ((double)rand() + 0.1) 
            cout << setw(7) << setprecision(3) << a[i][j] << setprecision(3) << setw(7);
            //cout << "A[" << i << "][" << j << "] = "; cin >> a[i][j];
        }
        cout << endl << endl;
    }
    
    min = a[0][0];
 
    for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            for (k=(i-1); k<(i+1); k++)
            {
                for (l=(j-1); l<(j+1); l++)
                {
                    // тут , я как понимаю нужна операция XOR, но вдруг ошибаюсь
                    if ( ( (k>=1) && (k<=m) ) && ( (l>=1) && (l<=n) ) && ( (i!=k) ^ (j!=l) ) )
                    {
                        if ((a[k][l]<min) && (a[k][l] != a[i][j]))
                        {
                            min = a[k][l];
                        }
                        b[i][j] = min;
                    }
                }
            }
        }
    }
 
    cout << endl;
 
    for (int i=0; i<m; i++)
    {
        for (int j=0; j<n; j++)
        {
            cout << setw(7) << setprecision(3) << b[i][j] << setprecision(3) << setw(7); 
        }
        cout << endl << endl;
    }
 
    system("pause>>void");
}

PM MAIL   Вверх
akizelokro
Дата 27.12.2013, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Код

    system("cls");
    setlocale(0,"");
    srand(time(NULL));



Сразу по этим строчкам вопрос, что ты хотел выразить (тут я спрашиваю, какпаренёк продававший заказы заказыи на Delphi
сразу тебе для заметок 

// for ( ситуация в начале цикла; условие прекращения цикла; на каждой итерации цикла)
//for ( int hruhru =...
// типа внешний цикл

for( int q = (k-1); q < UPPER_OF_X; q++)
{
   if (q < 0)
     continue; // в С/C++ приянто что измерения массива начинаются с 0 (нуля), continue -переход на следующую итерацию
  if ( q == hruhru)
   continue; // пропустим элементов с самим собой
}


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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