Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Всего 320 строк.
Исходная задача - получив 4 числа выполнить:
если их полусумма больше нуля, возвести минимальное положительное в квадрат
Если меньше нуля - уменьшить все отрицательные на величину наибольшего
Массивы использовать нельзя.
Вот-вот, становишься опытным программистом, и теряешь возможность решать школьные задачи. Говорит автор "не используй стек". Школьник задачу легко с рекурсией решит, а профессионал застрянет. Говорит автор "давайте без циклов и рекурсии", на map намекая, а программист понимает, что map без рекурсии и циклов не заработает, а значит, и его использовать нельзя.
> Говорит автор "не используй стек". Школьник задачу легко с рекурсией решит, а профессионал застрянет.
Можно на ассемблере без стека и ОЗУ даже, если регистров хватит. https://ru.wikipedia.org/wiki/Coreboot#.D0.98.D0.BD.D0.B8.D1.86.D0.B8. D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.86.D0.B 8.D1.8F_.D0.9E.D0.97.D0.A3
Наиболее сложной частью coreboot является код, который инициализирует ОЗУ и контроллер ОЗУ. Дело в том, что пока ОЗУ не инициализировано, его невозможно использовать. Очевидным способом инициализировать контроллер ОЗУ и саму оперативную память без обращений к ней является использование регистров общего назначения процессора. Для упрощения этой сложной задачи был разработан специальный компилятор языка C — romcc (англ. romcc), который порождает код, не производящий обращений к ОЗУ при своей работе. С помощью romcc компилируется код, который инициализирует ОЗУ путём обращения к SPD ROM на модулях DIMM по шине SMBus. После выполнения данного кода ОЗУ может быть использовано.
float a, b, c, d; //Может потребоваться изменить порядок объявления
float* arr = &a; //переменных / от какой переменной брать адрес.
//Решаем задачу массивами.
Так как лабы компилятся без оптимизаций и компиляторы себе многого тогда не позволяли, код должен работать.
Да, про порядок я писал: у одних компилятороа локалки идут сверху вниз (как будто их пушат по одной), у других — снизу вверх (как будто под все локалки сразу выделили память одним куском).
Проще использовать глобалки: они всегда идут снизу вверх.
Но в любом случае есть какой-то шанс соснуть из-за выравнивания. Вдруг оно для элементов масства и для отдельных переменных разное?
> зы: поцчему в джаве ссылки называются указателями?
Честно говоря, не совсем понял вопрос. Ссылки в джаве практически везде называются ссылками (reference: hard reference, weak reference, soft reference, phantom reference).
Указатели фигурируют разве что в названии исключения NullPointerException. Почему там Pointer а не Reference - не знаю, скорее всего, исторически сложившийся косяк.
ахахахахаха
>>ахахахахаха
попрошу не трогать мое борландсишное детство своими грязными руками
http://goo.gl/M2H4L5
> conio
Кругом лошади и кони
А теперь -- танцуем
мой встроенный компилятор на этом завис.
Ну понятно, опять лаба.
ну охуеть теперь. Может еще конвертацию вводимой строки в число использовать нельзя?
https://ideone.com/sA1CgE
Дайте я все прочувствую....
Получается по мнению того, кто составлял это задание
а
а автор в курсе, что arr[i] - сахарок для *(arr+i)?
то есть в си вообще нет массивов ?!!!
Посмеялся от души
Можно на ассемблере без стека и ОЗУ даже, если регистров хватит. https://ru.wikipedia.org/wiki/Coreboot#.D0.98.D0.BD.D0.B8.D1.86.D0.B8. D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.86.D0.B 8.D1.8F_.D0.9E.D0.97.D0.A3
Наиболее сложной частью coreboot является код, который инициализирует ОЗУ и контроллер ОЗУ. Дело в том, что пока ОЗУ не инициализировано, его невозможно использовать. Очевидным способом инициализировать контроллер ОЗУ и саму оперативную память без обращений к ней является использование регистров общего назначения процессора. Для упрощения этой сложной задачи был разработан специальный компилятор языка C — romcc (англ. romcc), который порождает код, не производящий обращений к ОЗУ при своей работе. С помощью romcc компилируется код, который инициализирует ОЗУ путём обращения к SPD ROM на модулях DIMM по шине SMBus. После выполнения данного кода ОЗУ может быть использовано.
зачем? типа чтоб не писать на асме?
а это массив?
блин, ну тогда любой contig. кусок памяти это массив
Царь.
Так как лабы компилятся без оптимизаций и компиляторы себе многого тогда не позволяли, код должен работать.
Проще использовать глобалки: они всегда идут снизу вверх.
Но в любом случае есть какой-то шанс соснуть из-за выравнивания. Вдруг оно для элементов масства и для отдельных переменных разное?
Не понял, в шарпе надо при вызове указывать реф? Иначе не скомпилится?!
как иначе C# компилятор поймет что ты хочешь адрес? по сигнатуре функции?
Потому что в C нету ссылок, есть только указатели.
В С++ есть ссылки, и там не надо явно брать адрес. > по сигнатуре функции?
Очевидно, да.
зы: поцчему в джаве ссылки называются указателями?
Честно говоря, не совсем понял вопрос. Ссылки в джаве практически везде называются ссылками (reference: hard reference, weak reference, soft reference, phantom reference).
Указатели фигурируют разве что в названии исключения NullPointerException. Почему там Pointer а не Reference - не знаю, скорее всего, исторически сложившийся косяк.
Кстати, в сишарпике они верно назыаются
понял, да
В сишке же нету ссылок в сигнатурах, а в шарпе есть.
поинтеры-то в сишке в сигнатуре е
А рекурсию?
А односвязные списки?