Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2008, 22:40   #1
n01R
Пользователь
 
Аватар для n01R
 
Регистрация: 14.01.2008
Сообщений: 13
Лампочка Двумерный Массив

Помогите сделать задачу:

Нужно заполнить массив A по следующему принципу:

36,35,34,33,32,31
25,26,27,28,29,30
24,23,22,21,20,19
13,14,15,16,17,18
12,11,10,9,8,7
1,2,3,4,5,6
n01R вне форума Ответить с цитированием
Старый 10.06.2008, 22:50   #2
Olympian
Форумчанин
 
Аватар для Olympian
 
Регистрация: 06.06.2008
Сообщений: 105
По умолчанию

Код:
int N, i, j;
N = 36;

for (j = 0; j < 3; j++)
{
  for (i = 0; i < 6; i++)
    A[2 * j][i] = N--;
  for (i = 5; i >= 0; i--)
     A[2 * j + 1][i] = N--;
}
Вот так можно
Olympian вне форума Ответить с цитированием
Старый 10.06.2008, 23:05   #3
n01R
Пользователь
 
Аватар для n01R
 
Регистрация: 14.01.2008
Сообщений: 13
По умолчанию

спасибо, но я лошара и забыл сказать что нужно для Delphi

Последний раз редактировалось n01R; 10.06.2008 в 23:05. Причина: безграмотность
n01R вне форума Ответить с цитированием
Старый 11.06.2008, 17:03   #4
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

на делфи нетрудно это переписать:
Код:
var
  N, i, j: integer;
begin
  N := 36;
  for j:= 0 to 2 do begin
    for i:= 0 to 5 do
      A[2*j][i] := Dec(N);
    for i:= 5 downto 0 do
      A[2*j+1][i] := Dec(N);
  end;
Ring0Sn вне форума Ответить с цитированием
Старый 12.06.2008, 21:06   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ring0Sn, код переписан чуть неверно... dec - процедура...
можно так:
Код:
{ (c) Olympian 
    portion copyrigth Ring0Sn }
var
  A : array[0..5, 0..5] of integer;
  N, i, j: integer;
begin
  N := 36;
  for j:= 0 to 2 do begin
    for i:= 0 to 5 do
      begin
        A[2*j][i] := N;
        Dec(N);
      end;
    for i:= 5 downto 0 do
      begin
        A[2*j+1][i] := N;
        Dec(N);
      end;
  end;
...
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.06.2008, 22:22   #6
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

И всётаки неправильно указан диапазон(матрица же 6х6):
for j:= 0 to 2 do
begin
for i:= 0 to 5 do .

Вот на дельфи:
Код:
unit Masa;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
   Procedure PrintMas(C :TCanvas);//Печать двумерной матрицы
    { Public declarations }
  end;
    // [0..5, 0..5] => 6х6
var A :Array[0..5, 0..5] of Integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var N, i, j: integer;
begin
  N := 36+1;
  for j:= 0 to 5 do
  begin
   for i:=0 to 5 do
   begin
    Dec(N);
    A[2*j][i] := N;
   end;
    for i:=5 downto 0 do
    begin
     Dec(N);
     A[2*j+1][i] := N;
    end;
  end;
 PrintMas(Canvas);//Печать
end;

Procedure TForm1.PrintMas(C :TCanvas);
Const dx = 10;
      dy = 5;
Var X,Y, W,H :Integer;
    i, j: integer;
    S :String;
begin //Печать двумерной матрицы
 If C=Nil then Exit;
  C.Brush.Color := clBtnFace;
  C.FillRect(C.ClipRect); //Стираем с формы
 X:=0; Y:=0;
 For J:=0 To 5 Do
 begin
   X := Dx; //Перенос на позицию Dx
  For i:=0 To 5 Do
  begin
   S := Format('[%d, %d]=%d', [J,I, A[J, I]]);
   W := C.TextWidth(S);  //Вычисляем длину текста
   H := C.TextHeight(S); //Вычисляем высоту текста
    If I>0 then
    X := X + W + Dx; //Делаем отступ слева
   C.Font.Color := clBlue; //Цвет Текста
   C.TextOut(X, Y, S);
  end;
    IF J>=0 Then //Первую строку не переносим
    Y := Y + H + Dy; //Делаем отступ
 end;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 PrintMas(Canvas);
end;

end.
Alter вне форума Ответить с цитированием
Старый 13.06.2008, 10:20   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я потрясён...
Alter, не поленитесь, пожалуйста,
проверьте вот этот код (если нет TP, то пойдёт и консольное приложение Delphi):
Код:
var
  A : array[0..5, 0..5] of integer;
  N, i, j: integer;
begin
  N := 36;
  for j:= 0 to 2 do begin
    for i:= 0 to 5 do
      begin
        A[2*j][i] := N;
        Dec(N);
      end;
    for i:= 5 downto 0 do
      begin
        A[2*j+1][i] := N;
        Dec(N);
      end;
  end;
  
  for i:=0 to 5 do 
  begin
    for j:=0 to 5 do 
      Write(A[i,j]:4);
    WriteLn;
  end;  
  readln;
end.
Программа выводит ПРАВИЛЬНЫЙ РЕЗУЛЬТАТ!!!

2. похоже мы оба с Вами не понимаем, как это работает :-((
вот, к пример, чему будет равно выражение
A[2*j+1][i] при j=5 и i=5 ? A[11][5] ? причём ошибки не будет...
и последнее, в ВАШЕЙ же программе измените
цикл по J на
for j:= 0 to 2 do

и как результат?? :-))
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.06.2008, 13:18   #8
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

За "Dec" извеняюсь, подзабыл...
Насчет диапазонов, я всего лишь переписал код Olympian, а не сам его выдумал, но вроде там все ок с диапазонами

Последний раз редактировалось Ring0Sn; 13.06.2008 в 13:23.
Ring0Sn вне форума Ответить с цитированием
Старый 13.06.2008, 16:31   #9
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

Вот что надо получить:
36,35,34,33,32,31
25,26,27,28,29,30
24,23,22,21,20,19
13,14,15,16,17,18
12,11,10,9,8,7
1,2,3,4,5,6


Вот что будет при таком коде:
Код:
  N := 36+1;
  for j:= 0 to 5 do
  begin
   for i:=0 to 5 do
   begin
    Dec(N);
    A[2*j][i] := N;
   end;
    for i:=5 downto 0 do
    begin
     Dec(N);
     A[2*j+1][i] := N;
    end;
  end;


А вот с другим кодом, тоже самое:
Код:
  N := 36+1;
  for j:= 0 to 2 do
  begin
   for i:=0 to 5 do
   begin
    Dec(N);
    A[2*j][i] := N;
   end;
    for i:=5 downto 0 do
    begin
     Dec(N);
     A[2*j+1][i] := N;
    end;
  end;

___________________________________ _____________________________
Да результат одинаков.
Alter вне форума Ответить с цитированием
Старый 19.12.2009, 16:41   #10
dmxant
Новичок
Джуниор
 
Регистрация: 19.12.2009
Сообщений: 1
По умолчанию

Помоги сделать задачу:
Таблица футбольного чемпионата задана квадратной матрицей порядка N, в которой все элементы главной диагонали не используются, а каждый элемент, не принадлежащий главной диагонали, равен количеству очков, набранных в игре командой, игравшей на своем поле: 2 – выигрыш, 1 – ничья, 0 – поражение. Для команды i (1≤i≤N) в строке i указано количество очков, полученных на своем поле, а в столбце i – количество очков, потерянных на чужом поле. Сформировать список номеров команд, имеющих больше побед на чужом поле, чем на своем. Определить номера двух команд, набравших меньше всего очков.
dmxant вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный массив... slim5 Помощь студентам 2 20.06.2008 23:16
Двумерный массив в С++ Draid Помощь студентам 2 07.03.2008 22:06
Двумерный массив Jodu Помощь студентам 18 05.12.2007 22:44
Двумерный массив help Imperceptible Паскаль, Turbo Pascal, PascalABC.NET 25 02.03.2007 20:00