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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2010, 12:38   #1
Corpsell
 
Регистрация: 23.01.2010
Сообщений: 7
Вопрос цикл_"for"

Мне была поставлена задача создать прогу на паскале которая бы выводила на экран все составные числа из диапазона [4,n]
вот что у мя вышло:

var
k,i,n:integer;
begin
writeln('Введите n');
readln(n);
for i:=4 to n do
for k:=2 to (i-1) do
if i mod k=0 then
write(' ',i);
readln;
end.

проблема в том что у мя в ответе цифры повторяются... подскажите, что мне сделать чтобы каждое составное число выводилось один раз. Заранее спасибо!
Corpsell вне форума Ответить с цитированием
Старый 06.11.2010, 12:54   #2
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость

Для начала - что такое составные числа? + приведите пример результата программы(что на входе + что на выходе).
Lemo вне форума Ответить с цитированием
Старый 06.11.2010, 12:59   #3
Corpsell
 
Регистрация: 23.01.2010
Сообщений: 7
По умолчанию

на входе n=10, а на выходе 4, 6, 6, 8, 8, 9, 10, 10
Corpsell вне форума Ответить с цитированием
Старый 06.11.2010, 13:02   #4
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
k,i,n:integer;
begin
writeln('Input n');
readln(n);
writeln('result : ');
for i:=4 to n do
begin
if (i mod 2=0) or
   (i mod 3=0) then
write(' ',i);
end;
readln;
end.
Lemo вне форума Ответить с цитированием
Старый 06.11.2010, 13:28   #5
Corpsell
 
Регистрация: 23.01.2010
Сообщений: 7
По умолчанию

спасибо за помощь!
Corpsell вне форума Ответить с цитированием
Старый 06.11.2010, 14:57   #6
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию

Lemo
уважаемый, Вы получили числа, которые делятся на 2 и на 3:

Код:
if (i mod 2=0) or
   (i mod 3=0) then
write(' ',i);
В промежутке от 4 до 10 это верно, а если от 4 до 100:

где 25? где 35? 49? нету, а потому что чисел, делящихся на 5 и на 7 этим алгоритмом не искали
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Старый 06.11.2010, 15:05   #7
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Corpsell Посмотреть сообщение
Мне была поставлена задача создать прогу на паскале которая бы выводила на экран все составные числа из диапазона [4,n]
вот что у мя вышло:

var
k,i,n:integer;
begin
writeln('Введите n');
readln(n);
for i:=4 to n do
for k:=2 to (i-1) do
if i mod k=0 then
write(' ',i);
readln;
end.

проблема в том что у мя в ответе цифры повторяются... подскажите, что мне сделать чтобы каждое составное число выводилось один раз. Заранее спасибо!
Вот смотри
например i = 10, k изменяется от 2 до 9
когда 10 делится на k ты выводишь 10.
10 делится на 2 и 5. соответственно и выведено будет 2 раза. Надо усовершенствовать алгоритм, чтобы при нахождении делителя дальше уже не проверять это число
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Старый 06.11.2010, 15:19   #8
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию

Corpsell, я бы предложил на основании твоего алгоритма вот этот, хоть тоже не сказать что оптимальный, наверное


Код:
program Project2;

uses
  SysUtils;
var
k,i,n:integer;
nashel : boolean;

begin
writeln('Введите n');
readln(n);
for i:=4 to n do
begin
    nashel := false;
    k := 2;
    While (not nashel) and (k <= i-1) do
    begin
        if i mod k = 0 then nashel := true;
        k := k +1;
    end;
    if nashel then write(' ',i);
end;
readln;
end.
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Старый 06.11.2010, 15:37   #9
Corpsell
 
Регистрация: 23.01.2010
Сообщений: 7
По умолчанию

благодарю за помощь!)
Corpsell вне форума Ответить с цитированием
Старый 06.11.2010, 15:54   #10
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Код:
uses
  crt;

var
  i, n, j: integer;
  t: boolean;

begin
  ClrScr;
  write('Input n:=');
  readln(n);
  writeln('result : ');
  for i := 4 to n do
  begin
    t := false;
    for j := 2 to round(sqrt(i)) do
      if (i mod j = 0) then
        t := true;
    if t then write(' ', i);
  end;
  readkey
end.
にんじゃ

Последний раз редактировалось ROMA2PVT; 06.11.2010 в 16:01.
ROMA2PVT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50