Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > нечётные числа


Автор: Warfire 7.12.2009, 19:20
Вводишь число и тебе высвечиваются все начётные числа в указанное число столбцов
Например:
вводишь 5 и:
1 3 5 7 9
11 13 15 17 19 и так до ста.
Помогите плиз
 smile 

Автор: NFL 7.12.2009, 19:27
Warfire, на паскалюшке?
проверяй остаток от деления на 2, что там определять то... 

зы: стукни в аську 386439383 если что...

Добавлено через 9 минут и 55 секунд
Код

program hz;
  uses crt;
  var inp, k, i: integer;
begin
  clrscr;
  write ('‚ўҐ¤ЁвҐ Є®«. бв®«Ўж®ў (1-10): ');
  read (inp);
  k:=0;
  for i:=1 to 100 do
  begin
    if (i mod 2=1) then write (i:4);
    inc (k);
    if (k=inp*2) then
      begin
        writeln;
        k:=0;
      end;
  end;
  readln;
end.


Автор: ~FoX~ 7.12.2009, 20:08
odd

Автор: kemiisto 7.12.2009, 20:53
Код

program test;

var
  RowCount, OddNumber, AlreadyPrinted: integer;

begin
  write('Введите число столбцов: ');
  readln(RowCount);
  
  OddNumber := 1;
  AlreadyPrinted := 0;
  while OddNumber < 100 do
  begin
    write(OddNumber:3);
    inc(OddNumber, 2);
    inc(AlreadyPrinted);
    if AlreadyPrinted = RowCount then
    begin
      AlreadyPrinted := 0;
      writeln;
    end;
  end;
end.

Автор: NFL 7.12.2009, 21:22
А в чем разница, while или for? smile 
(для данной задачи, разумеется)

kemiisto, у нас, по сути, одинаковые тексты, только переменные разные smile 

Автор: kemiisto 7.12.2009, 21:39
Цитата(NFL @  7.12.2009,  22:22 Найти цитируемый пост)
kemiisto, у нас, по сути, одинаковые тексты, только переменные разные

Тешу себя надеждой, что у меня нагляднее получилось. smile У тебя имена переменных бессмысленны, условие перехода на новую строку нетривиально, проверка на нечётность присутствует (зачем? начать с 1 и прибавлять 2 куда проще). 

Цитата(NFL @  7.12.2009,  22:22 Найти цитируемый пост)
А в чем разница, while или for?

for можно считать синтаксическим сахаром. И отнюдь не самым удачным. Вирт убирал цикл со счётчиком из Oberon. В Oberon-2 вернул под давлением общественности. smile Но мне всё более близка идея, что for - костыль. smile 

Цитата(NFL @  7.12.2009,  22:22 Найти цитируемый пост)
(для данной задачи, разумеется)

В моей реализации (когда начинаем с 1 и прибавляем 2) while напрашивается очевидным образом.

Автор: NFL 7.12.2009, 22:31
kemiisto, бессмысленные, говоришь, переменные?  smile 
возможно, ибо писал просто дабы показать алгоритм smile 

в быстродействии, возможно, while даже чуть выиграет smile 
ибо в моем случае 100 повторов, а с while - 50, если я не ошибаюсь)))

но повторюсь, написал так, как написал бы в универе с целью "а чтоб сдать, чтоб они от меня от**ались побыстрее" smile 

Автор: kemiisto 7.12.2009, 22:57
Цитата(NFL @  7.12.2009,  23:31 Найти цитируемый пост)
kemiisto, бессмысленные, говоришь, переменные?

Не надо мне приписывать того, чего я не говорил.
Я сказал, что
Цитата(kemiisto @  7.12.2009,  22:39 Найти цитируемый пост)
имена переменных бессмысленны

То есть имя не отражает предназначение переменной. Что есть не очень хорошо.

Цитата(NFL @  7.12.2009,  23:31 Найти цитируемый пост)
но повторюсь, написал так, как написал бы в универе с целью "а чтоб сдать, чтоб они от меня от**ались побыстрее"

Я так и понял. Именно это мне и не понравилось.

Автор: volvo877 8.12.2009, 12:44
Цитата(kemiisto @  7.12.2009,  20:39 Найти цитируемый пост)
for можно считать синтаксическим сахаром. И отнюдь не самым удачным. Вирт убирал цикл со счётчиком из Oberon. В Oberon-2 вернул под давлением общественности.
Ну, и? Кое-кто и множества с диапазонами убирает из языка (ну, ты в курсе, о чем я?), что теперь, отказаться от из использования даже там, где они есть? Вообще-то здесь раздел Паскаль, а не Оберон, если средство есть - им никто не запрещал пользоваться.
Цитата(kemiisto @  7.12.2009,  20:39 Найти цитируемый пост)
условие перехода на новую строку нетривиально
Да ну?... smile Это ты по-настоящему нетривиального не видел... Ну, вот так, скажем:
Код
const
  Cols = 5;
  s: array[boolean] of string = ('', #13#10);

var curr: integer;

begin
  curr := 1;
  while curr < 100 do
  begin
    write(curr:3, s[(curr > 1) and ((succ(curr) div 2) mod cols = 0)]);
    inc(curr, 2);
  end;
end.
Много преподавателей разберутся, как оно работает?

Автор: kemiisto 8.12.2009, 13:23
Цитата(volvo877 @  8.12.2009,  13:44 Найти цитируемый пост)
Вообще-то здесь раздел Паскаль, а не Оберон, если средство есть - им никто не запрещал пользоваться.

Я где-то кому-то что-то запрещал?

Цитата(volvo877 @  8.12.2009,  13:44 Найти цитируемый пост)
Много преподавателей разберутся, как оно работает? 

А смысл писать код, в котором не разберётся преподаватель?

Автор: Beltar 9.12.2009, 13:17
Цитата

в быстродействии, возможно, while даже чуть выиграет


Каким местом?? В общем случае наоборот.

Цитата

Но мне всё более близка идея, что for - костыль.


Мне более близка идея, что Вирт чем старше, тем дурнее. Вместо for лучше бы выбрасывал нафиг, это бессмысленное PROCEDURE т. к. синтаксис вида function Proc(x:Integer); и так ясен, а вот переписывать procedure на function, если вдруг приспичило бесит.
Вместо repeat until, требующего умственное инвертирование порой нетривиального условия, должно быть repeat while, что куда полезнее бессмысленного loop легко реализуемого с помощью
repeat
until false;

По теме, а почему никто (x and 1)>0 не предлагает? smile

Автор: Dizzzy Dozzzer 13.12.2009, 09:33
Цитата(volvo877 @  8.12.2009,  10:44 Найти цитируемый пост)
const
  Cols = 5;
  s: array[boolean] of string = ('', #13#10);
var curr: integer;
begin
  curr := 1;
  while curr < 100 do
  begin
    write(curr:3, s[(curr > 1) and ((succ(curr) div 2) mod cols = 0)]);
    inc(curr, 2);
  end;
end.


а что тут непонятного?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)