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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2008, 11:59   #1
pakusya
Пользователь
 
Регистрация: 17.10.2008
Сообщений: 23
По умолчанию разложить число на простые множители и вывести результат

пожалуйста помогите разобраться!!!
задача:
дана натуральное число N. разложить его на простые множители и вывести результат в видв. например: 12=1*2*2*3.
программу я написала, но она выводит только простые делители
uses crt;
var n,i:longint;
begin
clrscr;
write('n');{ввести число}
readln(n);
write(n,'=','','1' );
i:=2;
while n<>1 do
begin
if n mod i=0 then
write('*',i,'');
repeat
n:=n div i;
until n mod i<>0;
end;
inc(i);
end;
end.
вывод программы такой: 12=1*2*3
а этот ответ неправельный.
pakusya вне форума Ответить с цитированием
Старый 14.11.2008, 12:05   #2
pakusya
Пользователь
 
Регистрация: 17.10.2008
Сообщений: 23
По умолчанию множители

и еще объясните если можно как повернуть квадратную матрицу на 90 градусов против часовой стрелки

Последний раз редактировалось pakusya; 14.11.2008 в 12:17.
pakusya вне форума Ответить с цитированием
Старый 14.11.2008, 13:59   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Простые множители и простые делители в данном случае вроде одно и тоже. Просто у Вас программа выводит каждый делитель один раз, хотя он может встречаться несколько раз, например 8=2*2*2.
Чтобы выводил нормально, нужно после того как нашли делитель, еще раз попробовать на него разделить, и еще, пока делиться не будет, и каждый раз выводить.
Можно написать так:
Код:
uses crt;
var a,n:Longint;
    b:boolean;
begin
clrscr;
write('a=');readln(a);{наше число}
n:=2; {первый простой делитель}
while a>0 do {пока число не ноль}
  begin
    b:=true;  {истина}
    while n <= round(sqrt(a)) do {пока очередной делитель меньше корня из числа}
       begin
         if a mod n=0 then {если это делитель}
           begin
             write(n,' '); {выводим его}
             a:=a div n;  {сокращаем число на этот делитель и снова проверяем делится или нет, если делится, выводим}
             b:=false; {если нет, прекращаем с этим делителем}
             break;
           end;
         inc(n); {увеличиваем делитель на 1 и все повторяем}
      end;
   if b then {если больше нет делителей,} 
     begin
       write(a,' ');{выводим остаток от деления числа - последний делитель}
       break; {заканчиваем, больше делителей нет}
     end;
  end;
readln
end.
puporev вне форума Ответить с цитированием
Старый 14.11.2008, 14:10   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

А Вы нарисуйте матрицу типа
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
Затем поверните ее по условию
14 24 34 44
13 23 33 43
12 22 32 42
11 21 31 41
А сейчас ищите закономерность и Вы увидите, что вторая матрица получается из первой, путем присваивания значений по следующему принципу:
b[i,j]:=a[j,n-i+1];
puporev вне форума Ответить с цитированием
Старый 14.11.2008, 14:45   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Вот, немного более простой вариант решения:
Код:
var N, I: Integer;

begin
  Write ('N = ');
  ReadLn (N); {ввод числа N}
  Write (N, ' = 1');
  I := 2; {первый делитель 2}
  while N > 1 do
  begin {пока число не 1}
    if N mod I = 0 then
    begin {если число делится на очередной делитель}
      Write (' * ', I);
      N := N div I; {делим число}
    end else Inc (I); {увеличиваем делитель}
  end; {while}
  ReadLn;
end.
Arigato на форуме Ответить с цитированием
Старый 15.11.2008, 02:54   #6
pakusya
Пользователь
 
Регистрация: 17.10.2008
Сообщений: 23
По умолчанию

большое спосибо!!! я все поняла. неделю сидела над этими задачами, надо было сразу обратится к вам.
pakusya вне форума Ответить с цитированием
Старый 15.11.2008, 03:07   #7
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от pakusya Посмотреть сообщение
большое спосибо!!! я все поняла. неделю сидела над этими задачами, надо было сразу обратится к вам.
Не надо сразу, учиться надо. А потом приходить на форум в качестве эксперта, так много интереснее
Alar вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разложение на простые множители pakusya Помощь студентам 2 19.12.2011 15:55
Разложение числа на простые множители artem_MG Паскаль, Turbo Pascal, PascalABC.NET 3 24.10.2008 19:28
Найти и вывести все слова,у котоpых число гласных букв пpевышает число согласных. Briz Помощь студентам 2 11.05.2008 00:56
как вывести результат расчета????? в VB Николай969 Помощь студентам 1 17.01.2008 17:45