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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal->C#] Работа с двумерными массивами 
:(
    Опции темы
DolceGabana
Дата 10.5.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть задача, решенная на Pascal, необходимо сделать её на C#. "Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине — в позиции (2, 2), следующий по величине - в позиции (3, 3) и т. д., заполнив, таким образом, всю главную диагональ."

Вот решение на Pascal: 

Код

program matrica;
uses CRT;
const
  N=5;
  M=5;
var
  i,j,u:integer;
  a:array[1..m,1..n] of real;
  b:array[1..m,1..n] of real;
  z:array[1..m] of real;
  nstr,nstl:byte; max, maxi:real; buf:real;
  f:text;
begin
clrscr;
    assign(f,'otv.pas');rewrite(f);
    randomize;
      for i:=1 to m do
      for j:=1 to n do
        a[i,j] :=random*random(100);
        write (f,'sformirovannii massiv');
        writeln (f);
      for i:=1 to m do
         begin
           for j:=1 to n do
              write(f,a[i,j]:5:2,' ');
              writeln(f);
         end;
     writeln(f);
        for i:=1 to m do
        for j:=1 to m do
          b[i,j]:=a[i,j];
for u:= 1 to m do
begin
  begin
    max:=b[1,1];
    nstr:=1; nstl:=1;
      for i:=1 to m do
      for j:=1 to n do
        if b[i,j]>max then
         begin
          max:=b[i,j];
          nstr:=i;
          nstl:=j
        end;
    end;
  z[u]:=b[nstr,nstl];
  b[nstr,nstl]:=0;
end;
  writeln(f,'MaccuB: ');
    for u:=1 to m do
      write(f,z[u]:3:2,' ');
      writeln (f);
    for j:=1 to m do
      begin
        for u:=1 to m-j do
          if z[u]<z[u+1] then
               begin
                  buf:=z[u];
                  z[u]:=z[u+1];
                  z[u+1]:=buf;
               end;
       end;
 writeln(f,'CopTupoBaHHbIu MaccuB: ');
  for u:=1 to m do
  write(f,z[u]:3:2,' ');
  writeln (f);
  for i:=1 to n do
  maxi:=a[i,i];
     for i:=1 to m do
     for u:= 1 to m do
         a[i,i]:=z[i];

writeln(f,'New MaccuB: ');
writeln (f);
for i:=1 to m do
 begin
 for j:=1 to n do
 write (f,a[i,j]:5:2,'  ');
 writeln (f)
 end;
 close(f);
End.



M
Alexeis
Модератор: выбирайте подсветку кода  http://forum.vingrad.ru/index.php?show_typ...howtopic=126445


Это сообщение отредактировал(а) Alexeis - 11.5.2007, 16:18
PM MAIL   Вверх
Rockie
Дата 10.5.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Код

using System;
using System.Collections.Generic;
using System.Text;

namespace CSharpMx
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] a =  { 
                          {11, 12, 13, 14 , 15},
                          {21, 22, 23, 24 , 25},
                          {31, 32, 33, 34 , 35},
                          {41, 42, 43, 44 , 45},
                          {51, 52, 53, 54 , 55}
                        };

            int n = 5, pos_i = 0, pos_j = 0, temp;

            for (int i = 0; i < n; i++)         // выведем матрицу на экран 
            {
                for (int j = 0; j < n; j++)
                    System.Console.Write("{0} ", a[i, j]);
                System.Console.Write("\n");
            }

            int max = a[1, 2];                  // возьмем какой-нибудь элемент матрицы как максимальный

            for (int i = 0; i < n; i++)         // найдем первый максимум и его координаты
                for (int j = 0; j < n; j++)
                {
                    if (a[i, j] > max)
                    {
                        max = a[i, j];
                        pos_i = i;             // запомним позицию максимума
                        pos_j = j;
                    }
                }

            // поменяем местами найденный максимум и элемент на диагонали
            temp = a[pos_i, pos_j]; a[pos_i, pos_j] = a[0, 0]; a[0, 0] = temp;


            for (int counter = 1; counter < n; counter++)
            {
                max = a[1, 2];                      // возьмем какой-нибудь элемент матрицы как максимальный

                for (int i = 0; i < n; i++)        // максимум и его координаты
                    for (int j = 0; j < n; j++)
                    {
                        // а теперь ищем меньшие по величине элементы
                        if (a[i, j] > max && a[i, j] < a[counter - 1, counter - 1])
                        {
                            max = a[i, j];
                            pos_i = i;             // запомним позицию максимума
                            pos_j = j;
                        }
                    }
                temp = a[pos_i, pos_j]; a[pos_i, pos_j] = a[counter, counter]; a[counter, counter] = temp;
            }

            System.Console.Write("\n");
            for (int i = 0; i < n; i++)         // выведем матрицу на экран 
            {
                for (int j = 0; j < n; j++)
                    System.Console.Write("{0} ", a[i, j]);
                System.Console.Write("\n");
            }


        }
    }
}





--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
DolceGabana
Дата 13.5.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2 Rockie
Спасибо Вам за помощь. А то я буквально месяца 3 назад начала изучать этот язык программирования, и пока что не разобралась во всех ньюансах! =)
PM MAIL   Вверх
DolceGabana
Дата 13.5.2007, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2 Rockie
Есть светлые мысли?
Переделала задачу с Pascal на C#, но почему-то она не идет, перепробовала разные методы, а она не в какую. Может Вы увидите ошибку.

Pascal


Код

Program var_9_6;
const kol_el=20;
var
     matrix: array [1..kol_el,1..kol_el] of integer;
     har_stolb: array [1..kol_el] of integer;
     summa,est_otr,vremen,h_stolb,i,i2,j,n,m,ii,jj: integer;



begin

  writeln('Vvedite razmernost matrici:');
  write('Kolich strok n=');readln(n);
  write('Kolich stolbcov m=');readln(m);

  for i:=1 to n do
    for j:=1 to m do
    begin
      write('matrix[',i,',',j,']=');readln(matrix[i,j]);
    end;

   writeln;
   writeln('Ishodnaja matrica...');
     for i:=1 to n do
    begin
     writeln;
     for j:=1 to m do
       begin
        write(matrix[i,j],'    ');
       end;
    end;



    {vijasnim i sravnivaem kriterii v kagdom stolbce}


   writeln;

   for i:=1 to m do
    begin
       h_stolb:=0;
     for j:=1 to n do
       begin
{
        writeln('i=',i, 'j=',j);
        writeln('matrix[',j,',',i,']=',matrix[j,i],' ');
}
        if (frac(matrix[j,i]/2)<>0) and (matrix[j,i]<0) then h_stolb:=abs(h_stolb+matrix[j,i]);

       end;
       har_stolb[i]:=h_stolb;
    end;
    writeln;

    write('Harakter massiv:  ');
    for i:=1 to m do write(har_stolb[i],' ');

    writeln;
    for i:=1 to m-1 do
       begin
              for i2:=1 to m-1 do
                begin
                   if har_stolb[i2]>har_stolb[i2+1] then
            begin
              vremen:=har_stolb[i2];
              har_stolb[i2]:=har_stolb[i2+1];
              har_stolb[i2+1]:=vremen;
              for j:=1 to n do
                begin
                 vremen:=matrix[j,i2];
                 matrix[j,i2]:=matrix[j,i2+1];
                 matrix[j,i2+1]:=vremen;
                end;
              end;
             end;
      end;

 writeln;

   for i:=1 to n do
    begin
     writeln;
     for j:=1 to m do
       begin
        write(matrix[i,j],'    ');
       end;
    end;

   writeln;
   writeln('Summa gde est otricat: ');
   for i:=1 to m do
    begin
       est_otr:=0;
     for j:=1 to n do
       begin
        if matrix[j,i]<0 then est_otr:=1;
       end;
       summa:=0;
      if est_otr=1 then
        begin
         for j:=1 to n do summa:=summa+matrix[j,i];
        end;
      write(summa,'  ');
     end;
  writeln;
  writeln('End....');

   readln;

end.



А вот переделанная на C#:

Код

using System;

namespace ConsoleApplication2
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            const d=5;
            int [,] mt;
            mt=new int[d,d];
            int[] hr=new int[20];
            int s,v,h,st,i,e,i2,j,n,m,ii,jj;
        
        
            Console.WriteLine("введите");
            for (i=1;i<n;++i) 
            {
            
                for (j=1;j<m;++j) 
                {
                    mt[i,j]=i+j+1;
                    Console.Write("mt["+i+","+j+"]=");
                    
                }
            
                Console.WriteLine();
                Console.WriteLine("Исходная матрица");
                for (i=1;i<n;i=i+1)
                {
                
                    for (j=1;j<m;j=j+1) 
                    {
                        Console.Write(mt[i,j]    );
                    }
                }
                Console.WriteLine();
                for (i=1;i<m;++i)
                {
                
                    for (j=1;j<n;++j)
                    {
                        if ((mt[j,i]%2!=0)&(mt[j,i]<0))
                    
                    
                            h=0;
                        h=Math.Abs(h+mt[j,i]);
                        
                    

                    }
                    hr[i]=h;
                }
                Console.WriteLine();
                Console.Write("Характеристики массива:");
                for (i=1;i<m;i=i+1)
                {
                    Console.Write(hr[i]  );
                }
                Console.WriteLine();
                for (i=1;i<m-1;i++)
                {
                    for (i2=1;i2<m-1;i2++)
                    {
                        if (hr[i2]>hr[i2+1])
                    
                            v=hr[i2];
                        hr[i2]=hr[i2+1];
                        hr[i2+1]=v;
                    
                        for (j=1;j<n;j++)
                        {
                   
                            v=mt[j,i2];
                            mt[j,i2]=mt[j,i2+1];
                            mt[j,i2+1]=v;
                   
                        }
            
                    }  
            
                }
        
                Console.WriteLine;
                
                for (i=1;i<n;i++)
                {
                
                    for (j=1;j<m;j++) 
                    {
                        Console.Write(mt[i,j] );
                    }    
                  
                }
                Console.WriteLine();
                Console.WriteLine("Сумма где есть отрицательные:");
                for (i=1;i<m;i++)
                {
                
                    for (j=1;j<n;j++)
                    {
                        e=0;
                    
                        if (mt[j,i]<0) e=1;
                    
                    
                                        
                                        
                    }
                    s=0;
                    if (e==1)
                    {
                        for (j=1;j<n;j=j+1)
                        {
                    
                            s=s+mt[j,i];
                    
                        }
                    }
                    Console.Write(s);
                }
                Console.WriteLine();
                Console.WriteLine("END...");
                Console.ReadLine();

 







        














             

                
            }
        }
    }
}


Это сообщение отредактировал(а) DolceGabana - 13.5.2007, 22:27
PM MAIL   Вверх
Rockie
Дата 14.5.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Цитата(DolceGabana @  13.5.2007,  22:23 Найти цитируемый пост)
Есть светлые мысли?

У кого?)) Думаю, да smile
DolceGabana
Цитата(DolceGabana @  13.5.2007,  22:23 Найти цитируемый пост)
Переделала задачу с Pascal на C#, но почему-то она не идет, перепробовала разные методы, а она не в какую. Может Вы увидите ошибку.

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




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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