Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Формирование матрицы. 
:(
    Опции темы
Gavalex
Дата 28.5.2005, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Помогите, пожалуйста решить задачу на Turbo Pascal:
Составить программу, которая заполняет квадратную матрицу порядка "n" натуральными числами 1, 2, 3......n записывая их в ней по спирали.
Задали до понедельника, не знаю как делать!
PM MAIL   Вверх
Fedor
Дата 28.5.2005, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


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

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



Я делал так: запоминаем левую, нижнюю, правую и верхнюю границы, вводим переменные dx и dy, которые могут быть равны -1, 0, 1 ну и просто аккуратно и внимательно обойти матрицу.


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Irokez
Дата 28.5.2005, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

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



1) по спирали от центра или к центру?
2) по часовой или против smile
3) от 1 до n или от 1 до n^2?
PM   Вверх
Gavalex
Дата 28.5.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



К центру по часовой от 1 до n. Покажите, пожалуйста, как этот код выглядит.
PM MAIL   Вверх
Fedor
Дата 28.5.2005, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


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

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



Цитата(Gavalex @ 28.5.2005, 19:28)
Покажите, пожалуйста, как этот код выглядит.

Ну для этого нужно его писать ;) А тут не вольные работники. Идею Вам подсказали.
Добавлено @ 19:54
И если надо будет, поможем исправить ошибки в Вашем коде. Но писать его полностью вряд-ли тут кто-то будет.


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Pakshin A. S.
Дата 28.5.2005, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вот... делать нефига было...
Код

const
 n = 4;

var
   a: array [1..n, 1..n] of integer;
 i,j: integer;
   k: integer;

begin
 k:=1;
 i:=1;
 while i <= Round(n / 2) do
  begin
   for j:=i to (n - i + 1) do
    begin
     a[i,j]:=k;
     inc(k)
    end;
   for j:=(i + 1) to (n - i + 1) do
    begin
     a[j, (n - i + 1)]:=k;
     inc(k)
    end;
   for j:=(n - i) downto i do
    begin
     a[(n - i + 1), j]:=k;
     inc(k)
    end;
   for j:=(n - i) downto (i + 1) do
    begin
     a[j, i]:=k;
     inc(k)
    end;
   inc(i)
  end;
 for i:=1 to n do
  begin
   for j:=1 to n do
    write(a[i,j]:5);
   writeln
  end;
 readln
end.


P. S. Вот только пока не тестил кодик...
Добавлено @ 20:34
Кстати... что за маразм про заболнение от 1 до n? Ведь чисел не хватит!!!!

Хотя можно будет после каждого inc(k) делать:
Код

...
inc(k);
if k > n
 then
  k:=1
...


Тогда и это маразматическое условие будет выполнено... кстати, спираль по часовой стрелочке вроде должна идти...
PM   Вверх
Chrisstoff
Дата 28.5.2005, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Скромненько и со фкусом ... smile
Код

const
    n = 10;

var
    Mas: array [1..n, 1..n] of Integer;
    i, j: Integer;
    x, y: Integer;
    dx, dy: Integer;
    v: Integer;

begin
    dy := 1;
    x := 1;
    y := 1;
    v := 1;
    repeat
        Mas[x, y] := v;
        if (x + dx > n) or (y + dy > n) or (x + dx < 0) or (y + dy < 0) or (Mas[x + dx, y + dy] <> 0) then
        begin
            if dx = 0 then
            begin
                dx := dy;
                dy := 0;
            end
            else
            begin
                dy := - dx;
                dx := 0;
            end;
        end;
        Inc(x, dx);
        Inc(y, dy);
        Inc(v);
    until v > Sqr(n);
    for i := 1 to n do
    begin
        for j := 1 to n do
            Write(Mas[i, j]: 5);
        Writeln;
    end;
    Readln;
end.


Это сообщение отредактировал(а) Chrisstoff - 29.5.2005, 08:09
PM MAIL ICQ   Вверх
Ciber SLasH
Дата 29.5.2005, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

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



Оно ? smile
Код

program spirale;
uses Crt;
const
  n = 10;
var
  Matrix: array [1..n, 1..n] of Integer;
  i,j,p,m: Integer;
begin
  ClrScr;
  m := 1;
  for p := 1 to (n+1) div 2 do
  begin
    for j := p to n-p+1 do
    begin
      Matrix[p,j] := m;
      INC(m)
    end;
    for i := p+1 to n-p+1 do
    begin
      Matrix[i,n-p+1] := m;
      INC(m)
    end;
    for j := n-p downto p do
    begin
      Matrix[n-p+1,j] := m;
      INC(m)
    end;
    for i := n-p downto p+1 do
    begin
      Matrix[i,p] := m;
      INC(m)
    end
  end;
  for i := 1 to n do
  begin
    for j := 1 to n do
      Write(Matrix[i,j]:5);
    WriteLn
  end;
  repeat until KeyPressed
end.

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


Шустрый
*


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

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



Спасибо Вам огромнейшее! Вы все меня спасли!
PM MAIL   Вверх
Петр Громов
Дата 30.5.2005, 00:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите, люди добрые! Ситуэйшн с матрицами!
Дана матрица n на n. Необходимо (ой Боже!) извлечь корень из произведения сумм квадратов элементов строки. Т. е.:
Вот код. Проблем в том, что прога фурычит только если матрица заполнена 1 и 0. Если есть прочие (2,3,4...) , то иногда (чем больше диапазон чисел, тем чаще) после перемножения получается отр. число!!! Хотя такого по логике быть не может!!!
Код

Program TRINITY;
uses crt;
const n = 5;
var i,j,tempresult, endingresult : integer;
    a : array[1..n,1..n] of integer;
    result : real;
    tmp: string;


begin
randomize;
tempresult := 0;
endingresult := 1;
clrscr;

for i:=1 to n do
   for j:=1 to n do readln(a[j,i]); 
   for j:=1 to n do a[j,i] := random(3);  
clrscr;


write('This is a matrix:');

for i:=1 to n do
    for j:=1 to n do begin
        gotoxy(i*3,j*3);
        write(a[i,j]);
    end;
    writeln('');


for i:=1 to n do begin
    tempresult:=0;

        for j:=1 to n do begin
             tempresult:=tempresult+sqr(a[j,i]);
        end;

    endingresult:= endingresult*tempresult;
    
end;

result := sqrt(endingresult);
str(result:5:5,tmp);


writeln('');
writeln('');
writeln('This is function result: ');

writeln(tmp);

writeln('');
write('Press any key to exit...'); 
readkey;
end.

smile
  Вверх
Ciber SLasH
Дата 30.5.2005, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

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



У тебя результат не влазит в диапазон значений.
Замени 4-ю строку на:
Код

var i,j: Integer;
    tempresult, endingresult : Extended;

а 18-я строка я вообще не понял зачем... закомментируй её.
PM   Вверх
Fedor
Дата 30.5.2005, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


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

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



Петр Громов
Модератор: Пожалуйста, один топик - один вопрос.


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Петр Громов
Дата 6.6.2005, 02:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Извините. Спасибо. smile smile smile
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

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

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

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

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


 




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


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

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