1. Си / Говнокод #19757

    −50

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    #include <stdio.h>
    #include <conio.h>
    void main(void)
    float a,b,c,d;
    printf("Vvedite 4 chisla:/n");
    scanf("%f,%f,%f,%f, &a,&b,&c,&d)
    s=(a+b+c+d)/2;
    if(s>0)
    	if(a>0)
    		if(b>0)
    			if(c>0)
    				if(d>0)
    					if(a>b)
    						if(b>c)
    							if(c>d)
    								{d=d^2}
    							else
    								{c=c^2}								
    						else
    
    							if(b<d)
    								{b=b^2}
    							else
    								{d=d^2}
    					else
    						if(a<c)
    							if(a<d)
    								{a=a^2}
    							else
    								{d=d^2}
    						else
    							if(c<d)
    								{c=c^2}
    							else
    								{d=d^2}
    				else
    					if(a>b)
    						if(b>c)
    							{c=c^2}
    						else
    							{b=b^2}
    					else
    						if(a<c)
    							{a=a^2}
    						else
    							{c=c^2}
    			if(d>0)
    				if(a>b)
    					if(b>d)
    						{d=d^2}
    					else
    						{b=b^2}
    				else
    					if(a<d)
    						{a=a^2}
    					else
    						{d=d^2}
    			else
    				if(a>b)
    					{b=b^2}
    				else
    					{a=a^2}
    		else
    			if(c>0)
    				if(d>0)
    					if(a>c)
    						if(c>d)
    							{d=d^2}
    						else
    							{c=c^2}
    					else
    						if(a<d)
    							{a=a^2}
    						else
    							{d=d^2}
    				else
    					if(a>c)
    						{c=c^2}
    					else
    						{a=a^2}
    			else
    				if(d>0)
    					if(a>d)
    						{d=d^2}
    					else
    						{a=a^2}
    				else
    					{a=a^2}
    	else
    		if(b>0)
    			if(c>0)
    				if(d>0)
    					if(b>c)
    						if(c>d)

    Всего 320 строк.
    Исходная задача - получив 4 числа выполнить:
    если их полусумма больше нуля, возвести минимальное положительное в квадрат
    Если меньше нуля - уменьшить все отрицательные на величину наибольшего
    Массивы использовать нельзя.

    Запостил: Iphonya96, 05 Апреля 2016

    Комментарии (49) RSS

    • conio.h

      ахахахахаха
      Ответить
      • >>conio.h
        >>ахахахахаха

        попрошу не трогать мое борландсишное детство своими грязными руками
        http://goo.gl/M2H4L5
        Ответить

      • > conio
        Кругом лошади и кони
        Ответить
    • a=a^2
      Ответить
    • "Vvedite 4 chisla:/n"
      Ну понятно, опять лаба.
      Ответить
    • Откуда у людей столько терпения и трудолюбия?
      Ответить
    • в каждой лабе люди переизобретают понятие красоты кода. Кто-то другой написал бы это сплошным кирпичом на тернарниках.
      Ответить
    • Ввести 64 числа...
      Ответить
    • >> Массивы использовать нельзя.

      ну охуеть теперь. Может еще конвертацию вводимой строки в число использовать нельзя?

      https://ideone.com/sA1CgE
      Ответить
      • Хорошо, что в С есть не только массивы, а еще и указатели
        Ответить
        • C-указатели...
          Ответить
        • Подождите. подождите....
          Дайте я все прочувствую....
          Получается по мнению того, кто составлял это задание

          double arr[x] = {...}; - массив


          а

          double * arr = malloc( sizeof(double*x ) ); - нет?


          а автор в курсе, что arr[i] - сахарок для *(arr+i)?

          то есть в си вообще нет массивов ?!!!

          Посмеялся от души
          Ответить
          • Вот-вот, становишься опытным программистом, и теряешь возможность решать школьные задачи. Говорит автор "не используй стек". Школьник задачу легко с рекурсией решит, а профессионал застрянет. Говорит автор "давайте без циклов и рекурсии", на 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. После выполнения данного кода ОЗУ может быть использовано.
              Ответить
              • romcc??

                зачем? типа чтоб не писать на асме?
                Ответить
                • Конечно. Для чего ж еще?
                  Ответить
                  • то есть вот чтоб написать код, который инициализирует ОЗУ путём обращения к SPD ROM на модулях DIMM по шине SMBus запилили компилятор?
                    Ответить
                    • Может там не только эти задачи решались. Может там еще что-то надо было инициализировать еще то того, как инициализируется ОЗУ. Пойди у них спроси
                      Ответить
                      • кстати, а как говорить с SPD? через IO? MMIO? или там вообще ACPI таблицы и в них код?
                        Ответить
          • >>double * arr = malloc( sizeof(double*x ) ); - нет?
            а это массив?

            блин, ну тогда любой contig. кусок памяти это массив

            Царь.
            Ответить
          • Всё проще:
            float a, b, c, d; //Может потребоваться изменить порядок объявления 
            float* arr = &a; //переменных / от какой переменной брать адрес.
            
            //Решаем задачу массивами.


            Так как лабы компилятся без оптимизаций и компиляторы себе многого тогда не позволяли, код должен работать.
            Ответить
            • Лабы компилятся без компилятора.
              Ответить
            • Да, про порядок я писал: у одних компилятороа локалки идут сверху вниз (как будто их пушат по одной), у других — снизу вверх (как будто под все локалки сразу выделили память одним куском).

              Проще использовать глобалки: они всегда идут снизу вверх.

              Но в любом случае есть какой-то шанс соснуть из-за выравнивания. Вдруг оно для элементов масства и для отдельных переменных разное?
              Ответить
      • Во втором случае у вас числа не по порядку выводятся, приходите на пересдачу.
        Ответить
      • > if (a > b) Swap(ref a, ref b);
        Не понял, в шарпе надо при вызове указывать реф? Иначе не скомпилится?!
        Ответить
        • да. защита от выстрела в ногу
          Ответить
        • ты не повреишь, но в C тоже нужно указывать &.

          как иначе C# компилятор поймет что ты хочешь адрес? по сигнатуре функции?
          Ответить
          • > ты не повреишь, но в C тоже нужно указывать &

            Потому что в C нету ссылок, есть только указатели.
            В С++ есть ссылки, и там не надо явно брать адрес.
            void f(const string& by_const_ref);
            
            string s;
            f(s);
            > по сигнатуре функции?
            Очевидно, да.
            Ответить
            • да, ты прав, спасибо.

              зы: поцчему в джаве ссылки называются указателями?
              Ответить
              • > зы: поцчему в джаве ссылки называются указателями?

                Честно говоря, не совсем понял вопрос. Ссылки в джаве практически везде называются ссылками (reference: hard reference, weak reference, soft reference, phantom reference).

                Указатели фигурируют разве что в названии исключения NullPointerException. Почему там Pointer а не Reference - не знаю, скорее всего, исторически сложившийся косяк.
                Ответить
                • Я и говорил про исключения

                  Кстати, в сишарпике они верно назыаются
                  Ответить
                  • в шарпике и ансейвед есть
                    Ответить
                    • ансейвед?
                      Ответить
                      • using System;
                        
                        class UnsafeTest
                        {
                        
                           unsafe static void SquarePtrParam(int* p)
                           {
                              *p *= *p;
                           }
                        
                           unsafe static void Main()
                           {
                              int i = 5;
                              SquarePtrParam(&i);
                              Console.WriteLine(i);
                           }
                        }
                        Ответить
          • Да, по сигнатуре.
            В сишке же нету ссылок в сигнатурах, а в шарпе есть.
            Ответить
            • да, я протупил и не сообразил что в C# это ref а не pointer

              поинтеры-то в сишке в сигнатуре е
              Ответить
    • > Массивы использовать нельзя.
      А рекурсию?
      Ответить

    Добавить комментарий