Важная информация

User Tag List

Страница 79 из 80 ПерваяПервая ... 757677787980 ПоследняяПоследняя
Показано с 781 по 790 из 794

Тема: ЭТЮДЫ

  1. #781
    Veteran Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    1,790
    Благодарностей: 847
    Записей в дневнике
    34
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от char Посмотреть сообщение
    взять стандартную процедуру побитного деления и раскрыть-расписать, учитывая, что делитель в данном конкретном случае - это просто два включенных бита / две ветки переходов, с невключенными остальными / пустыми ветками
    3 = %00000011
    Да все уже, сделано. Вычисления длинные, к тому же это демо, решается lut размером 512 байт.
    Украшу собой любой черный список
    TR-DOS cracktros

  2. #781
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #782
    Veteran Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    1,790
    Благодарностей: 847
    Записей в дневнике
    34
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Проверка на присутствие числа в диапазоне:
    Код:
    between: ; B.C=high/low, A=value
    	ld e,a
    	ld a,b
    	cp e
    	ret c
    	ld a,e
    	cp c
    	ret
    Есть другие варианты?
    Украшу собой любой черный список
    TR-DOS cracktros

  4. #783
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,508
    Благодарностей: 689
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Shiny Посмотреть сообщение
    Проверка на присутствие числа в диапазоне:
    А типа такого не прокатит?
    Код:
    ; In: B.C=high/low, A=value
    ; Out: флаг C=1 если число не в диапазоне
    between:
            cp b
            ccf
            ret c
            cp c
            ret
    Последний раз редактировалось Destr; 21.11.2018 в 17:48.

  5. #784
    Veteran Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    1,790
    Благодарностей: 847
    Записей в дневнике
    34
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Найдено в интернетах:
    При устройстве на работу программистом столкнулся с интересной задачей следующего содержания:

    «Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово Fizz, а вместо чисел, кратных пяти — слово Buzz. Если число кратно пятнадцати, то программа должна выводить слово FizzBuzz. Задача может показаться очевидной, но нужно получить наиболее простое и красивое решение.»
    пишите решения.
    Украшу собой любой черный список
    TR-DOS cracktros

  6. #785
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    810
    Благодарностей: 645
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    var
      s0: string;
    begin
      for i:=1 to 100 do begin
        s0:='';
        if (i mod 3) = 0 then s0:= 'Fizz';
        if (i mod 5) = 0 then s0:= s0 + 'Buzz';
        if s0 ='' then s0:= inttostr(i);
        writeln(s0);
      end;

  7. #786
    Activist
    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    356
    Благодарностей: 7
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    .org $8000
    ld b,0
    ld c,0
    ld d,1
    l1:
    ld e,0
    inc b
    ld a,b
    cp 3
    jr nz,j1
    ld b,0
    ld hl,str_fizz
    call print_strhl
    inc e
    j1:
    inc c
    ld a,c
    cp 5
    jr nz,j2
    ld c,0
    ld hl,str_buzz
    call print_strhl
    inc e
    j2:
    ld a,e
    and a
    jr nz,j3
    call print_strnum
    j3:
    ld a,32
    rst 16;lf
    inc d
    ld a,d
    cp 101
    jr nz,l1
    ret
    
    str_fizz: .db 'fizz',0
    str_buzz: .db 'buzz',0
    
    print_strhl:
    push bc
    push de
    l2:
    ld a,(hl)
    and a
    jr z,q1
    rst 16
    inc hl
    jr l2
    q1:
    pop de
    pop bc
    ret
    
    print_strnum:
    push bc
    push de
    ld c,d
    ld b,0
    call 6683
    pop de
    pop bc
    ret

  8. #787
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    810
    Благодарностей: 645
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    сурово )

  9. #788
    Master
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    956
    Благодарностей: 524
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Shiny Посмотреть сообщение
    Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово Fizz, а вместо чисел, кратных пяти — слово Buzz. Если число кратно пятнадцати, то программа должна выводить слово FizzBuzz.Задача может показаться очевидной, но нужно получить наиболее простое и красивое решение
    Задача действительно очевидная, а требование "простоты и красоты" переводит её в рубрику "угадай, что нравится автору". Быть может, требуется соблюдать определенные стандарты в оформлении кода?

    Можно ли придумать что-либо проще и очевиднее, чем вариант от shurik-ua выше? Сомневаюсь. А именно понятность кода для коллег является одним из главных качеств программиста, которые хотят видеть работодатели.

    По эффективности где-то можно оптимизировать. Скорость или, там, место в памяти. И это будет сильно зависеть от целевой архитектуры.

    Скажем, если процессор не имеет аппаратного деления или, если деление медленное - то имеет право на жизнь такой вариант:
    Код:
    #include <stdio.h>
    void main(void)
    {
        int r3=1;
        int r5=1;
        for(int i=1; i<=100; i++)
        {
            if(r3==3)
            {
                r3=0;
                printf("Fizz");
            }
            if(r5==5)
            {
                r5=0;
                printf("Buzz");
            }
            if(r3 || r5)
            {
                printf("%d",i);
            }
            putchar('\n');
            r3++;
            r5++;
        }
    }
    Но даже и здесь насчет эффективности можно поспорить, т.к. вывод на консоль почти на всех архитектурах (даже Z80) существенно медленнее, чем деление.

  10. Этот пользователь поблагодарил Barmaley_m за это полезное сообщение:
    shurik-ua (13.01.2019)

  11. #789
    Veteran Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    1,790
    Благодарностей: 847
    Записей в дневнике
    34
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    шо касается деления, то:


    у меня получилось 64 байта
    Украшу собой любой черный список
    TR-DOS cracktros

  12. #790
    Guru Аватар для goodboy
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    10,349
    Благодарностей: 3653
    Записей в дневнике
    1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    те-же интернеты говорят
    "в голову приходит идея использования строк. Например, с помощью строк можно избавиться от одной операции сравнения.
    ...
    А что если попробовать не приписывать к строке нужный текст, а наоборот убирать текст из строки вида «ЧислоFizzBuzz»?
    алгоритм содержит всего две операции сравнения и два условных оператора. "

Страница 79 из 80 ПерваяПервая ... 757677787980 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Этюды: как бы написать поизящнее.
    от AndTorp в разделе Программирование
    Ответов: 5
    Последнее: 17.03.2008, 00:43
  2. Ответов: 0
    Последнее: 18.08.2006, 20:40
  3. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 03:21

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •