Няшная / Говнокод #19757 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 Iphonya96, (Updated )

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

  • Откуда у людей столько терпения и трудолюбия?
    Ответить
  • в каждой лабе люди переизобретают понятие красоты кода. Кто-то другой написал бы это сплошным кирпичом на тернарниках.
    Ответить
  • >> Массивы использовать нельзя.

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

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

        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. После выполнения данного кода ОЗУ может быть использовано.
            Ответить
                • то есть вот чтоб написать код, который инициализирует ОЗУ путём обращения к SPD ROM на модулях DIMM по шине SMBus запилили компилятор?
                  Ответить
                  • Может там не только эти задачи решались. Может там еще что-то надо было инициализировать еще то того, как инициализируется ОЗУ. Пойди у них спроси
                    Ответить
                    • кстати, а как говорить с SPD? через IO? MMIO? или там вообще ACPI таблицы и в них код?
                      Ответить
                      • через SMbus, выяснили же только что
                        Ответить
        • >>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 - не знаю, скорее всего, исторически сложившийся косяк.
              Ответить
        • Да, по сигнатуре.
          В сишке же нету ссылок в сигнатурах, а в шарпе есть.
          Ответить
          • да, я протупил и не сообразил что в C# это ref а не pointer

            поинтеры-то в сишке в сигнатуре е
            Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8