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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 17.01.2009, 19:28   #1
Diabolik
Новичок
Джуниор
 
Регистрация: 17.01.2009
Сообщений: 2
По умолчанию Большие значения/спиральное заполнение массива

Имеется 2 задачи, для подготовки делаю но не могу разобраться
№1
Найти количество делителей у числа если чётное вывести 0 если чётное кол-во 1 если нечётное.

Пример:
2(кол-во чисел)
4 5

Ответ:
1 0

Код:
var input,output:text; a,b,n,k,i,j:longint; mass:array[1..100000] of longint;
begin

assign(input,'input.txt');
reset(input);
assign(output,'output.txt');
rewrite(output);
readln(input,n);
For i:= 1 to n do
begin
k:=0;
read(input,mass[i]);
For j:= 1 to mass[i] do
begin
If mass[i] mod j = 0 Then
begin
inc(k);

end;
end;
If k mod 2 = 0 Then write(output,'0 ') Else write(output,'1 ');
end;
close(input);
close(output);
end.
Проблема в том что число может быть до 10 в 8 степени чего лонгинт никак не обрабатывает как можно это избежать.

№2
0<n<100
Имеется массив размеров n*n записать спиралью начиная с центра против часовой стрелки.
Пример:


5 4 3
6 1 2
7 8 9

Тут я полный профан никогда не умел с матрицами работать.
Diabolik вне форума
Старый 17.01.2009, 22:35   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Учитесь работать с матрицами и для начала разберите этот код. Нарисуйте матриу на бумаге и следите как Вы будете заполнять и как это написано в программе, отдельно для матриц с четной и нечетной длиной стороны. По сути здесь 4 повторяющихся маршрута:
1. влево по строке
2.вниз по столбцу
3.вправо по строке
4.вверх по столбцу.
Точки поворота фиксирует конечный автомат k, точнее его остаток от деления на 4.
переменная х -движение по строке, у - по столбцу. Числа заданы в цикле от 1 до n^2 переменной z.
Короче разбирайтесь.
Код:
uses crt;
var a:array[1..20,1..20]of byte;
    n,x,y,k,z:integer;
begin
clrscr;
write('n=');readln(n);
if odd(n) then {dlya nechetnyh}
  begin
    x:=n div 2+1;y:=n div 2+1;
    k:=0;
    for z:=1 to n*n do
      begin
       a[x,y]:=z;
       case k mod 4 of
       0:begin
         dec(y);
         if (x-1)=y then inc(k);
         end;
       1:begin
         inc(x);
         if(n-x+1)=y then inc(k);
         end;
       2:begin
         inc(y);
         if(n-x)=(n-y) then inc (k);
         end;
       3:begin
         dec(x);
         if y=(n-x+1) then inc(k);
         end;
       end;
     end;
   end
else   {dlya chetnyh}
   begin
     x:=n div 2;y:=n div 2+1;
     for z:=1 to n*n do
       begin
        a[x,y]:=z;
        case k mod 4 of
        0:begin
          dec(y);
          if x=y then inc(k);
          end;
        1:begin
          inc(x);
          if(n-x+1)=y then inc(k);
          end;
        2:begin
          inc(y);
          if(n-x-1)=(n-y) then inc (k);
          end;
        3:begin
          dec(x);
          if y=(n-x+1) then inc(k);
          end;
        end;
      end;
   end;
for x:=1 to n do
  begin
    for y:=1 to n do
    write(a[x,y]:4);
    writeln;
  end;
readln
end.
По первой задаче:
10^8=100 000 000;
MaxLongint=2 147 483 648;
Почему у Вас не входит в этот тип?

Последний раз редактировалось puporev; 17.01.2009 в 22:41.
puporev вне форума
Старый 18.01.2009, 01:42   #3
Diabolik
Новичок
Джуниор
 
Регистрация: 17.01.2009
Сообщений: 2
По умолчанию

Извините 10^18 имелось ввиду, в матрице спираль не в ту сторону идёт, предпологалось чтобы было:

5 4 3
6 1 2
7 8 9

у вас

9 8 7
2 1 6
3 4 5
Diabolik вне форума
Старый 18.01.2009, 07:36   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Повернуть спираль в другую сторону самостоятельно конечно не судьба. 10 минут подумать и несколько символов в коде изменить.
Код:
uses crt;
var a:array[1..20,1..20]of byte;
    n,x,y,k,z:integer;
begin
clrscr;
write('n=');readln(n);
if odd(n) then {dlya nechetnyh}
  begin
    x:=n div 2+1;y:=n div 2+1;
    k:=0;
    for z:=1 to n*n do
      begin
       a[x,y]:=z;
       case k mod 4 of
       0:begin
         inc(y);
         if y=x+1 then inc(k);
         end;
       1:begin
         dec(x);
         if(n-x+1)=y then inc(k);
         end;
       2:begin
         dec(y);
         if x=y then inc (k);
         end;
       3:begin
         inc(x);
         if y=(n-x+1) then inc(k);
         end;
       end;
     end;
   end
else   {dlya chetnyh}
   begin
     x:=n div 2+1;y:=n div 2;
     for z:=1 to n*n do
       begin
        a[x,y]:=z;
        case k mod 4 of
        0:begin
          inc(y);
          if x=y then inc(k);
          end;
        1:begin
          dec(x);
          if(n-x+1)=y then inc(k);
          end;
        2:begin
          dec(y);
          if x-1=y then inc (k);
          end;
        3:begin
          inc(x);
          if y=(n-x+1) then inc(k);
          end;
        end;
      end;
   end;
for x:=1 to n do
  begin
    for y:=1 to n do
    write(a[x,y]:4);
    writeln;
  end;
readln
end.
puporev вне форума
Старый 18.01.2009, 08:36   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

По первой задаче.
1.Можно использовать тип Extended.
2. Непонятно зачем массив.
3. Зачем гнать цикл от 1 до данного числа, если на 1 на себя число всегда делится, т.е. 2 делителя всегда есть. Достаточно проверить от 2 до корня квадратного из числа. Вот кусок кода. считает нормально, но число из 18 знаков обрабатывает минуты 2, точно не засекал.
Код:
var a,j:extended;
     n,i,k:integer;
........................
readln(f,n);
for i:=1 to n do
  begin
   read(f,a);
   j:=2;k:=0;
   while j<=sqrt(a) do
     begin
      if frac(a/j)=0 then k:=k+1;
      j:=j+1;
    end;
puporev вне форума
Старый 18.11.2009, 19:35   #6
Hom9IchOK
 
Регистрация: 18.11.2009
Сообщений: 3
По умолчанию

Все ситуации, которые я нашла на форуме рассматривают случаи, когда элементы не вводятся, а формируются в ходе решения. Просто берётся последовательность натуральных чисел до введенного n.

В моём случае не только задается размерность матрицы, но и вводятся элементы (рандомом).

Я очень долго пыталась перевести выше описанную логику под мой вариант. Но не получилось.

Прошу помочь!
Hom9IchOK вне форума
Старый 22.09.2011, 16:46   #7
BeSHyLLlka
Новичок
Джуниор
 
Регистрация: 24.06.2011
Сообщений: 2
По умолчанию

нужно в javascript заполнить массив по спирали начиная с центра. в паскале работает а вот в java ни как не могу додумать как сделать чтоб заработало

Последний раз редактировалось BeSHyLLlka; 22.09.2011 в 17:04.
BeSHyLLlka вне форума
Старый 22.09.2011, 21:10   #8
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от BeSHyLLlka Посмотреть сообщение
нужно в javascript <...> а вот в java ни как не могу додумать как сделать чтоб заработало
Ты уж, будь ласков, определись, что тебе надо - JavaScript или Java.. И показывай, что сделал.

Кстати, была же еще ТВОЯ тема про заполнение по спирали. Тебе там помогли. Почему ты теперь лезешь в чужую?
Предпочитаю на "ты".
TinMan вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение диапазона данными массива Сер_Ежик Microsoft Office Excel 4 24.03.2009 16:52
Спиральное отображение массива.... enot27 Паскаль, Turbo Pascal, PascalABC.NET 2 05.12.2008 15:23
Dblookupcombobox автоматическое заполнение в случае одного значения 1sal1 БД в Delphi 1 07.10.2008 21:41
Заполнение массива случайными числами Roomper Помощь студентам 4 12.05.2008 22:34
Заполнение массива числами Ermiss Общие вопросы C/C++ 7 25.11.2007 14:54