Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Вниз

Тоже пятничная задачка :о)   Найти похожие ветки 

 
Юрий Зотов ©   (2007-05-04 14:51) [0]

Написать программу, которая читает со стандартного ввода целые числа, а затем четные из них пишет в обратном порядке в стандартный вывод.

Задачка, конечно, элементарная. Фишка состоит не в ней самой, а в том, чтобы написать программу, максимально короткую и в то же время максимально понятную.

Писать можно на любом языке.


 
Rouse_ ©   (2007-05-04 14:54) [1]

Стандартный stdin-sdtout, СОМ или что именно?


 
Юрий Зотов ©   (2007-05-04 14:55) [2]

stdin-stdout


 
Rouse_ ©   (2007-05-04 14:56) [3]

Рамер данных определяется заранее, или вывод данных производится по пинку?


 
Юрий Зотов ©   (2007-05-04 15:01) [4]

Как угодно.


 
MBo ©   (2007-05-04 15:17) [5]

может, какой хитрый прием имеется в виду?
А то с использованием *** пара минут потребовалась...


 
Юрий Зотов ©   (2007-05-04 15:20) [6]

Так она за пару минут и пишется. Просто интересно, кто выдаст самый короткий и одновременно самый понятный вариант, подобрав для этого самый подходящий инструмент (язык).


 
Romkin ©   (2007-05-04 15:47) [7]

program Project1;

{$APPTYPE CONSOLE}

procedure PrintEven;
var
 A: integer;
begin
 repeat
   readln(A);
 until ((A and 1) = 0);
 if A <> 26 then
   PrintEven;
 writeln(A);
end;

begin
 PrintEven;
end.


 
Romkin ©   (2007-05-04 15:50) [8]

А нафига?


 
Юрий Зотов ©   (2007-05-04 16:02) [9]

> Romkin ©   (04.05.07 15:50) [8]

Хитрый ход, но не понял проверки на 26.

А на фига? Как и все задачки - кто-то мозги разомнет, кто-то поупражняется, кто-то поучится...


 
Юрий Зотов ©   (2007-05-04 16:05) [10]

> не понял проверки на 26.

Если имелось в виду ^Z, то проверка должна быть другой.


 
Romkin ©   (2007-05-04 16:09) [11]

А чем не нравится проверка? Бодун у меня, поэтому и 26...
Кто Штирлиц - пусть поменяет на 44
Условиям задачи удовлетворяет :-Р


 
umbra ©   (2007-05-04 16:25) [12]

не на паскале :)

#!/usr/bin/perl -w
use strict;

   my $line;
   my @data;
   
   
   while ($line = <STDIN>) {
       chomp $line;
       if (!($line =~ /\D/) and $line) {
           if ($line % 2 == 0) {
               unshift @data, $line;
           }
       }
   }    
   print "\n\n\n";
   foreach my $number (@data) {
       print $number."\n";
   }


 
clickmaker ©   (2007-05-04 16:29) [13]

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void main(void)
{
char strDigits[512];
gets(strDigits);
char* token = strDigits + strlen(strDigits);
while (token != strDigits)
{
 if (*token == " ")
 {
  int digit = atoi(token);
  if ((digit % 2) == 0)
   printf("%d ", digit);
  *token = 0;
 }
 token--;
}
}


 
McSimm_ ©   (2007-05-04 16:43) [14]

@_=(<>);
while ($a = pop @_ ) { print $a unless ($a % 2) }

Наверняка можно короче, подзабыл уже.


 
Romkin ©   (2007-05-04 16:56) [15]

clickmaker ©   (04.05.07 16:29) [13] И опять, млин, дыра переполнения буфера :(


 
umbra ©   (2007-05-04 16:59) [16]

2 McSimm_ ©   (04.05.07 16:43) [14]

будет печатать в обратном порядке все строки (не числа) и четные числа


 
clickmaker ©   (2007-05-04 17:11) [17]


> [15] Romkin ©   (04.05.07 16:56)

я в 2003 студии писал. В 2005 заюзал бы gets_s


 
McSimm_ ©   (2007-05-04 17:14) [18]


> будет печатать в обратном порядке все строки (не числа)
> и четные числа

Именно так.
В условии не написано, что программа читает строки и выбирает из них числа :)

Вот еще похожий пример.
<?php array_walk(array_reverse(file("php://STDIN")), create_function("$a","print ($a%2?"":$a);")); ?>


 
clickmaker ©   (2007-05-04 17:16) [19]

впрочем, можно fgets(strDigits, sizeof(strDigits), stdin);


 
McSimm_ ©   (2007-05-04 17:17) [20]

[14] все же больше удовлетворяет условиям понятности, на мой взгляд :)


 
McSimm_ ©   (2007-05-04 17:21) [21]


> umbra ©   (04.05.07 16:25) [12]
>        if (!($line =~ /\D/) and $line) {

Проверка не соответсвует множеству целых чисел :)


 
begin...end ©   (2007-05-04 18:13) [22]

var
 N: Integer;

begin
 with TStack.Create do
   try
     repeat
       ReadLn(N);
       if not Odd(N) then Push(Pointer(N))
     until N = -1;
     while Count <> 0 do
       WriteLn(Integer(Pop));
     ReadLn
   finally
     Free
   end
end.


 
Суслик ©   (2007-05-04 18:18) [23]

хи-хи
юра не может задачу решить?! а мы решай?! :-0


 
umbra ©   (2007-05-04 18:22) [24]

да, забыл об отрицательных числах :( Вот как надо:

#!/usr/bin/perl -w
use strict;

  my $line;
  my @data;
 
 
  while ($line = <STDIN>) {
      chomp $line;
      if ($line =~ /^-?\d*/ && $line % 2 == 0) {
              unshift @data, $line;
      }
  }    
  print "\n\n\n";
  foreach my $number (@data) {
      print $number."\n";
  }


 
McSimm_ ©   (2007-05-04 18:28) [25]


> да, забыл об отрицательных числах

И нуле (в первом варианте)


 
default ©   (2007-05-04 18:28) [26]

да наиболее очевидный это вставлять чётные числа в динамический список методом Insert(0, NewEvenNumber) и потом вывод в цикле


 
Rouse_ ©   (2007-05-04 18:55) [27]

http://rouse.drkb.ru/yz_test.zip
Там бинарник и исходник. Меньше некуда - все по условиям задачи :)


 
McSimm_ ©   (2007-05-04 19:04) [28]


> Rouse_ ©   (04.05.07 18:55) [27]

Программа на 120 строк, это меньше некуда? :)


 
Rouse_ ©   (2007-05-04 19:25) [29]


> Программа на 120 строк, это меньше некуда? :)

Эээ... а при чем тут строки? Я ориентировался на размер скомпиленого кода :) Разве не это нужно было?


 
Rouse_ ©   (2007-05-04 19:27) [30]

Да и кода там реально 38 асмовских строк :) Если считать только код с джампами :)


 
Внук ©   (2007-05-04 19:54) [31]

Задачка, разумеется, есть стандартная иллюстрация к теме "рекурсия". Либо к теме "стек". А уж кто как извратится, это от степени испорченности зависит :)


 
default ©   (2007-05-04 19:57) [32]

рекурсия тут совсем ни к месту
keep it simple, stupid
а если брать стек и подобное, то уж лучше Insert в 0 позицию, что поймёт всяк и каждый


 
Alx2 ©   (2007-05-04 20:03) [33]

>рекурсия тут совсем ни к месту
>а если брать стек и подобное,

Рекурсия ни к месту, а стек - к месту. А рекурсивный стек (стек вызовов) - к месту или ни к месту?


 
default ©   (2007-05-04 20:05) [34]

Alx2 ©   (04.05.07 20:03) [33]
разговор совсем не про то...я знаю что рекурсия через стек реализуется...о боже...буквоедство очередное...речь о простоте кода и краткости...


 
Внук ©   (2007-05-04 20:05) [35]

>>default ©   (04.05.07 19:57) [32]
 Как не к месту она, например, при вычислении факториала. Тем не менее, классические учебные задачи.


 
Alx2 ©   (2007-05-04 20:06) [36]

>default ©   (04.05.07 20:05)

Я и не сомневаюсь, что знаешь. Только не возьму в толк чего здесь в рекурсии туманного супротив явного стека?


 
Alx2 ©   (2007-05-04 20:08) [37]

>Внук ©   (04.05.07 20:05)

Да, в факториале не к месту - там не надо хранить се значения.
А здесь не вижу разницы


 
default ©   (2007-05-04 20:12) [38]

Alx2 ©   (04.05.07 20:06) [36]
просто когда пишешь код полезно предполагать о том, что его будут читать люди достаточно низкой квалификация
это маленькая хитрость заставляющая писать как можно более простой код
в конечном итоге этим самым "низкоквалицифированным" можешь оказать ты сам просматривающий код, например, для целей сопровождения который уже ничерта об этом коде уже не помнит
рекурсия тут проста, но многие люди не очень её понимают, что может вызвать замешательстов даже в таком простом случае рекурсии
Внук ©   (04.05.07 20:05) [35]
я не отрицаю рекурсию в общем случае:)
я к тому что если можно написать нерекурсивный код не меньшей понятности и краткости чем рекурсивный вариант, то лучше именно его и написать


 
Внук ©   (2007-05-04 20:12) [39]

>>Alx2 ©   (04.05.07 20:08) [37]
 Я вообще не вижу разницы :) Это лишь вопрос того, где кушать память - в массиве, списке или стеке вызовов. Думается, кратчайший по количеству строк кода вариант будет при рекурсии.


 
default ©   (2007-05-04 20:15) [40]

Внук ©   (04.05.07 20:12) [39]
многие бы за вычисление факториала через рекурсию сняли бы с собеседования враз...



Страницы: 1 2 3 вся ветка

Форум: "Прочее";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.049 c
2-1178858232
ZEN_ToS
2007-05-11 08:37
2007.06.03
Автоматический запуск программы при загрузке Windows


4-1167202366
clickmaker
2006-12-27 09:52
2007.06.03
PropertySheet &amp; Windows 95


1-1175408854
Vitek885
2007-04-01 10:27
2007.06.03
Расширение проводника


2-1179031389
pasenus
2007-05-13 08:43
2007.06.03
Как выполнить чужую процедуру в чужой программе


11-1160962882
Grademax
2006-10-16 05:41
2007.06.03
Как в KOL создать кнопку в стиле XP с картинкой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский