Cап, ананасы. Вкатился физик-кун. Нужна помощь в программировании на СИ. Сижу уже 4 час пытаюсь разобраться в пикрелейтед, но почти в каждом моменте сомневаюсь, и ведь хуй узнаешь, правильно или неправильно делаешь. Короче, призываю всех, кто может хоть как-нибудь помочь разобраться в этой хуйне!
Бамп
бамп
>>151799786 (OP)Шо це за хуйня, Антон?Мимо 1 курс физфака
>>151800522Грят нужно уметь анализировать программу, каждый ход просчитывать. Или ты про то, какого хуя я вообще информатикой занимаюсь?
>>151799786 (OP)
>>151800594И про то, и про другое. Так какого xyzя?
> 1 задачаДропай нахуй эту шарагу, пиздец какой-то, нахуя давать никогда не встречающийсся в жизни кусок говнища вместо кода и спрашивать "ололо, а что будит?)))". мимо-кресто-кодер
>>151800679У меня уклон в радиоэлектронику может и не совсем в праве считать себя физиком, но лучше физик чем прогер, физики дохуища, но без информатики походу никак.
>>151800683Я умею анализировать такую хуйню, но просто не могу разобраться в теме указателей. А препод дотошный до мелочей, постоянно спрашивает - куда программа пойдет, после того как вот это вот произойдет и что бует?
>>151800872В первом куске говна у тебя сегфолт.
>>151800925Где именно?
АааааааЭтот кодстайл Сука блять Хочется вырвать себе глаза Вангую код писал какой нибудь сын шлюхи (математик) Чем вас ваш ебаный матлаб не устраивает?
>>151800925не, там до предпоследнего элемента итерация идет
>>151801116Препод информатикА при чем тут матлаб?
>>151801227Стандарт для всяких научных вычислений в математике/физике. Сейчас пайтон (с пайтонноутбуками и всякими математическими либами) еще становится популярным, но в шарагах такое не используют наверное.
>>151799786 (OP)Пиздец, ты псевдокод на си переписать не можешь? За тебя же написали все уже.
>>151801515чта?
>>151799786 (OP)Нихуя не понел, чего тебе от нас то нужно, даунич? Ты код скомпилить не можешь?
Пиздец, настолько нечитаемого куска говна я еще не видел.
>>151799786 (OP)Есть целочисленный массив А из 5 элементовВ цикле копируем массив А в массив P, пока массив число из P меньше чем число массив А + n - 1 , переходим след числу массива PЕсли Р больше о и оно четное и короче дальше ебаное мясо нихуя не понятно, как это вообще может работать? ССылки блять, нехуя не понятно. НИкогда не мог в СИ
короче эт хуйня, суть в том, что p - здесь это указатель типа инт, он у тебя в строчке for приравнивается к A, и вот это p=А в данном случае значит, что ты указываешь на первый элемент массива A[5]
>>151800872>2k17>не могу разобраться в теме указателейЛол, блядь. Охуеть вообще. Мда.
>>151801668P это не массив сука, а указатель на первый элемент массива A
>>151801586Его не нужно компилить. Нужно полностью описать ход программы сколько раз цикл выполнится и значения при этом все записать
>>151801742Ебать, P=A это так указатель инициализируется?
>>151801718Блять, я прошерстил тырнеты, там всё понятно описано и в примерах и в разборе, а как дошло до анализа этой поеботы, нихуя не понятно.
>>151799786 (OP)Что ты хочешь услышать?Есть массив с числами, есть пара указателей(p и q). Потом берут, присваивают одному из указателей (p) адрес первого элемента массива и итерируют по нему(то-есть, инкрементируют указатель p, после чего он указывает на следующий элемент).В теле цикла получают значение переменной, на которую указывает указатель p и проверяют, положительный ли он и кратен ли двум. Если что-то из этого срабатывает, то еще одному указателю(q) присваивают адрес этого элемента и выходят из цикла.Затем записывают в переменные значение следующего от q элемента и значение на которое указывает само q соответственно.
>>151801792Да
>>151801668>В цикле копируем массив А в массив PЗачем ты пытаешься объяснять, не зная при этом C?
>>151801915Я попробовал угадать
>>151801915P[5]=A[5] так скопируется?
>>151801850>Есть массив с числами, есть пара указателей(p и q). >Потом берут, присваивают одному из указателей (p) адрес первого элемента массива и итерируют по нему(то-есть, инкрементируют указатель p, после чего он указывает на следующий элемент).>В теле цикла получают значение переменной, на которую указывает указатель p и проверяют, положительный ли он и кратен ли двум. Если что-то из этого срабатывает, то еще одному указателю(q) присваивают адрес этого элемента и выходят из цикла.>Затем записывают в переменные значение следующего от q элемента и значение на которое указывает само q соответственно.вот тут все идеально, только вместо итерируется можно сказать для тупых: повторяется круг цикла, а вместо инкрементируют - увеличить переменную на 1
>>151802025Сигфолт будет.
>>151802025нет, тк нет никакого массива P[5] вообще, есть указатель типа Int, это значит, что в эту переменную записывается адрес
>>151801850Спасибо, все понятно, я так и делал, просто не знал, что делать после каждого цикла. Сейчас попробую сделать
>>151802025Это всё равно что(P+5) = (A+5)Т.е. копирование 5-го элемента массива A в 5-й элемент массива P. Это если P указывает на начало массива, в котором есть хотя бы 5 элементов.А в примее будет сегфолт, так как P не инициализированЕсли P указывает на
>>151801208У тебя идет сегфолт не на итерации, а на моменте когда ты пытаешься a присвоить пустой указатель. Если ты обратишь внимание у тебя q = 0x0; до 4-ки в массиве, потом ты просто выходишь из цикла.
>>151802175Ясно, пойду пирога наверну.
>>151799786 (OP)ну давай разберем по частям тобою написанное. че происходит в первой строчке тебе надеюсь понятно. с какой строчки тебе не понятно? мимо фриланс 330к в сек.
>>151801850>>151802056Алсо, вот этот вот момент "p < A + n -1" абсолютно пидорский и я даже не смогу сказать сразу, что там будет, так как не понятно, как компилятор эту хуйню оптимизирует.То-есть, если там посчитается A+n, то это будет неопределенное поведение. мне кажется
>>151799786 (OP)Ищется первое число больше нуля или четное.Потом в б пишется оно, в а следующее.
>>151802220если ты вынесешь эту ебалу из цикла, т.к у тебя значение переменной а не может быть равно NULL то получишь пик.
>>151802474ЕМНИП в сях можно ставить указатель сразу за последним элементом.
>>151802474это будет внезапно А+4
>>151802621Он скорее имел в виду что сначала будет A+5 и это вылет за границу кладбище кладбище пидор UB, а когда UB компилер может подставить любое число хоть 31337 и ему ничего не будет. Но вроде бы там не UB.
>>151802220Там последняя строчка после цикла. Там скобок тела цикла нету, значит в теле только if.
Сей тред - прямое доказательство следующего факта: образованный человек далеко не обязательно является умным. Разве умный человек может задавтаь подобные вопросы на сосаче, интеллектуальный уровень которого деградировал ниже уровня лайвкомментов на новостных сайтах, ютуба, и социальных сервисов мейл.ру? Не может конечно же, только полный дебил полезет с подобными вопросами в клоаку вкудахтовых дегенератов.
>>151802863Здесь 95% погромисты фрелансеры 300к/сек, маня
>>151802608Ты говоришь про массив char, где последний элемент '\0'. В обычных массивах такого нету, если я не ошибаюсь.
>>151801850Короче, блять. Я вроде подумал, что всё понял, но не всё так просто. Вот первый раз выполняется цикл. У нас for(p=A;p<A+ ...), получается, первый раз p=-1 У меня сейчас полное отупление мозга, но вроде как начальное выражение выполняется 1 раз, а только потом уже проверяется условие и делается приращение и будет идти в if, но там оно не выполнится, куда оно пойдет дальше?
вы тут о оптимизациях компилятора квохчите. а я щитаю что опа про оптимизации компилятора не спрашивают. дед пидор небось сам о них не знает. это же не сениор блеадь. этим задачам лет больше чем деду и он ебёт ими по методичке. компиляторы блеадь
>>151802569Ну тогда мой пик. И вот тебе вторая.
Установил p на первый элемент массива A. p <A+n-1. A+5 сместился от первого элемента на 5 элементов, а точнне на 20 байт и указываешь на ячейку идущую следом за массивом. Когда отнял 1, сместился и указываешь на последний элемент массива, т.е. на ячейку где хранится двойка. Цикл у тебя по сути не затрагивает последнее значение элемнта, последний обрабатываемый элемент это 4, это единственный элемент который удолетворяют условию if. q указывает на адрес где лежит 4.a = 2, b =4, c=0.
>>151803167p = A означает, что мы указателю p присваиваем указатель на первый элемент A. Всё, теперь он указывает точно так же на первый элемент, как и A.p < A + n - 1 означает, что берется A (который представляет из себя указатель на первый элемент) и сдвигается на n - 1, то-есть 5 - 1 = 4. То-есть, это указатель, указывающий на последний элемент A. Теперь сравнивается адрес p и адрес этого посчитанного указателя. Это выражение будет возвращать true на 1,2,3,4 итерациях.
>>151803039Нет, я про арифметику указателей. По стандарту указатель может указывать на любой элемент массива или сразу за ним. Считывать оттуда, конечно, нельзя. Раздел 5.7If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.
>>151803327а почему i < 100?
>>151803167скажите щито будет происходить дальше? Цикл попрет дальше, и p будет равен 0 и в if он опять не выполнится, че за хуйня?
>>151803167>получается, первый раз p=-1так блять!p у нас не =-1у нас *p=-1а p = адресу памяти где лежит первый элемент ебаного массива.далее я не уверен в сях, т.е. допустим ли фор без {}. фор допустим без {} если у тела цикла одна строка. а у тебя в теле цикла их три.но судя по отступу на последней строке, имелось ввиду что она тоже отностися к телу цикла и дед со своими задачами на карточках обосрался. или нет - не уверен в синтаксисе си. посему ответ на вопрос куда оно пойдет дальше? - пойдет на последнюю строку
>>151803709на псто ниже написано
>>151803690Потому, что чистому Си очень сложно в динамический массив, я бы мог тебе его написать, но я думаю оно тебе не нужно. Держи со второго по 8-й включительно.
>>151803642>>151803653>>151803719Спасибо, сейчас попробую это осмыслить, потом опять запощу высеры в этот итт ин зис тред.
на вопрос ответьте такой.в с или с++cin >> n;int arr[n];Статический массив? Но во время компиляции не известен его размер, значит не статический.. или магия какая?
>>151803653>>151803642Для указателей следует указывать номер указуемого элемента массива и значение этого элемента. В цикле значения переменных и указателей следует указывать для каждой итерации цикла.А что можете сказать насчет этого, что от меня хотят Для каждой итерации, т.е. каждый цикл расписать и написать чему будут переменные равны при соответствующем цикле?
>>151804238а ты скомпилить попробуй, маг)
>>151804350итерация это один проход по циклу. а хотят денег от тебя, чтобы без сдачи ебени сие закрыть
>>151804412ну мне лень
>>151804527ну не получится же.компилятор таких магов нахуй посылает, как раз потому что неизвестно. конечно можно и динамическое че угодно делать, что в сях что где угодно, но для этого нужны магические слова. в твоем примере их нет.
>>151804527я тебе даже больше скожу - возможно компилятор наркоманский кокой и не пошлёт, выделит тебе под массив целых "му" элементов(если ты с клавы введешь му, а не чесло, в твоем коде про тип n не сказано ничего вообще). но врят ли такое говно запустится
>>151804518Ну я это и имел в виду. Я уже заебал своей тупостью, но всё же, просто хочу досканально разобраться. Самое непонятное, что не могу понять, что значит p=A в цикле, ну присвоили мы указатель на первый элемент А и что дальше, чему он вообще равен? номеру элемента массива или значению элемента массива?
>>151805151А после этого проверяется условие p<A+n-1, и как итог прохода делается приращение p++, а чему равно p, если это указатель на A?
>>1518043501итерация - p указывает на A [0] 2ит - A [1] 3ит - A [2]4 ит - A [3] 4 итерация будет последняя. q указывает на A [3].
>>151801208Вам же анон >>151803327 показал уже. указатель это адрес ячейки памяти в 16-ричном формате. типа 0x2343432342ab1
>>151805263Почему ты называешь себя аноном?
>>151805151да я сам хуй пойму. учитывая что у деда {} после фора проебаны, звездочка перед p проебана тоже. тут еще почитай со слова УКАЗАТЕЛИ, как раз про то говно, что у тебя в задаче http://www.butovo.com/~zss/cpp/arrays.htm авось и разберешся.мне например было нахуй не понятно зачем в твою задачу вообще указатели заебенили. судя по моей ссылке это для охуитительной скорости. может так и есть
>>151805151p указывает на первый элемент. Т.е. хранит адрест первого элемента. Представь себе память как ящики. У ящика есть номер, в ящике лежит число. p указывает на ящик хранит номер ящика. Увеличивая p на 1, указываем на ящик идущий после. Конечно все гораздо сложнее, но может так поймешьб
>>151805354потому что он анон?
>>151805464ты мене обьясни как p может указывать на первый элемент, если у него написано p=A, а не *p=A? а?
>>151805460он не дед кстате, ему около 40
>>151804690>>151804690>>151804936В ОБЩЕМ, В КРЕСТАХ НОРМАЛЬНО ВСЕ А НА СИ РАНТАЙМ ОШИБКА ХОТЯ И ОТ КОМПИЛЯТОРА ЗАВИСИТ НАВЕРНОЕ МОЖЕТ ПОЛУЧИТЬЯ ЧТО НА КРЕСТАХ В КАКОМТО КОМПИЛЯТОРЕ ТОЖЕ РАБОТАТЬ НЕ БУДЕТ. ТОЛЬКО ОБЪЯСНИТЕ ПОЧЕМУ ЭТО РАБОТАЕТ НА КРЕСТАХ
и да, скрины с кодом говно собачье, т.к. там то как раз последняя строка вне тела цикла. но, если она вне тела цикла, зачем дед на своей карте выделил эту последнюю строку отступом?
>>151805628p это указатель. p это значение которое лежит по адресу на которое указывает этот указатель. A имя массива трактуется как указатель на первый элемент. Эквивалетно &A [0].Ap=A ты приравниваешь переменной типа int переменную типа указатель. Несоответствие типов.
>>151805830Попробуй массив забить чем-то.Схаваешь сегфолт
>>151805830видимо у тебя на крестах стоит наркоманский компилятор, который проебал ошибку при сборке приложения. и сделал массив походу нулевой. сгенерил его на отъебись. да и сгенерил то небось только потому, что далее ты не обращаешься к его элементам. попробуй обратись к 100му в коде. интересно че крестовый компилятор скажет. а потом введи туда значение 200, если все таки запустится. будет рантайм еррор, или синий экран смерти?
>>151805628потому что A == &A[0]
>>151805983>>151805985НА СИ, РАНТАЙМ ОШИБКА#include <stdio.h>int main() { int n, i; scanf ("%d",&n); int arr[n]; for (i = 0; i < n; i++) { arr = i; } for (i = 0; i < n; i++) { printf("%n", arr); } return 0;}НА ПЛЮСАХ. РАБОТАИТ#include <iostream>using namespace std;int main() { int n; std::cin >> n; int arr[n]; for (int i = 0; i < n; i++) { arr = i; } for (int i = 0; i < n; i++) { cout << arr << endl; } return 0;}
>>151805887int p;int a=3;p=&a;теперь у меня адрес в p. в p у меня 3.ок, лан, походу в ссылке выше опечатка с примером кода. там то как раз пишут что надо делать так *p=A чтобы далее массив итерировать по указателю
>>151806133>cout << arr << endче за говно?где обращение cout << arr << end?
>>151806133>>151806255ясно, макаба съела, пардон.
>>151806133а что значит работает? запускаешь прям прогу, даешь ей 10 элементов массива и она их выводит?
>>151806402ДА. ВСЕ НОРМАЛЬНО.
>>151805245а значения переменных при каждой итерации чему равны?
>>151806433поэтому капсом пишешь?
>>151806133Ну во первых так. В зависимости от компилятора создается массив на 2кк+ элементов.
Кто-нибудь смог в 3 задание?
>>151806720ТАК И ДУМАЛ, СУКА
>>151806720У меня на 2 100 000 уже вылетает сегфолт, подозреваю что тут прямая зависимость от размера стека.
>>151806753бамп
>>151806847
>>151806753Где там третье?
>>151799786 (OP)>физик кун>не может разобраться с хуевиной, которую в 8 классе в паскале делаютОхуенный физик. Хотя, сидеть и сосать хуй в каком нибудь нии за 15к для тебя самая лучшая перспектива
>>151807124проебался, не 3, а 2 - про функцию
>>151803327Вот тебе вторая задача
>>151806847ВЫДЕЛЯЕТ ПАМЯТЬ В СТЕКЕ В РАНТАЙМЕ? ХМММММ
>>151802474Там же можно даже A+n посчитать? Какого хуя это UB если мы не разыменуем? Указатели считаются с проверкой размеров выделеной памяти штоле?
>>151799786 (OP)А во втором указатель должен быть равен заданному значению или же элемент массива?Если первый вариант, то для меня это нихуёвая такая задача. Как выделить память в куче, чтобы она лежала по определённому адресу? (Даже без учёта выравнивания)
>>151812248>элемент*элементу
>>151812248Не ебу, скинул всё задание. Больше ничего не написано. Наверное как второй вариант, не думаю что там хотят наебать разум.
>>151812248элемент массива конечно
>>151813182>>151813670Ну, это намного проще. К тому же я слепой нахуй.
>>1518073168 класс? Мы в 11 ворд проходили
>>151814366А мы counter strike
>>151799786 (OP)>5 строчек кода>136 пост, макаки никак не разберутся с синтаксисом СИ.Охуеть!/thread
>>151817650Это уровень какого курса?