NoA.dohteM Опубликовано 10 мая, 2011 Жалоба Опубликовано 10 мая, 2011 1)Выясните, имеются ли в заданном целочисленном векторе A(N) три подряд идущих элемента одного знака.2)В заданном массиве A(N), все элементы которого попарно различны, найдите:а) наибольший элемент из отрицательных;б) наименьший элемент из положительных;в) в) второй по величине элемент.
martinges Опубликовано 11 мая, 2011 Жалоба Опубликовано 11 мая, 2011 1) цикл с первого до предпред последнего. в теле цикла если произведение текущего элемента на следующий положительно и произведение следующего на следующего следующего положительно тогда имеем 3 подряд идущих элемента одного знака.модернизация (цикл с предусловием---> чтобы не делать лишние итерации)
NoA.dohteM Опубликовано 11 мая, 2011 Автор Жалоба Опубликовано 11 мая, 2011 Я в программе не шарю нисколько)Дайте лучше код
Zurbagan Опубликовано 11 мая, 2011 Жалоба Опубликовано 11 мая, 2011 2a:max:=0;for i:=1 to n doif (a<0 and mod(a)Writeln('Максимальное отрицательное', max);2b:min:=a[1];for i:=1 to n doif (a>0 and aWriteln('Минимальное положительное', min);
Vsadnik665 Опубликовано 11 мая, 2011 Жалоба Опубликовано 11 мая, 2011 MOV AC,3DIF BC,ACGET AA,ABWHAT ISTHE LANGUAGE
martinges Опубликовано 11 мая, 2011 Жалоба Опубликовано 11 мая, 2011 Я в программе не шарю нисколько)Дайте лучше кодтебе выкладывают алгоритм и куски кода) дальше ты уж сам P.S. знаешь как прикалываются программисты, когда им пишут напишите мне готовую программу Они её специально с ошибками пишут, то точку запятую пропустят, то в переменной одну букву изменят, то + на - переправят. Ибо нефиг
NoA.dohteM Опубликовано 12 мая, 2011 Автор Жалоба Опубликовано 12 мая, 2011 martingesбесполезная информация.Задача 1?
Vsadnik665 Опубликовано 12 мая, 2011 Жалоба Опубликовано 12 мая, 2011 1) примерно так:program Project1;const n=10;var a: array [1..n] of integer; i,z,num: integer;function znak(x:integer):INTEGER;begin if x>0 then znak:=1 else if x<0 then znak:=-1 else znak:=0;end;begin for i:=1 to n do readln(a[i]); i:=2; num:=1; z:=znak(a[1]); while i<=n do begin if znak(a[i])=0 then begin i:=i+1;continue;end; if znak(a[i])=z then begin inc(num); if num=3 then begin Writeln('yes'); readln; exit;end; end else begin num:=1;z:=znak(a[i]);end; i:=i+1; end; Writeln('no'); readln;end.
NoA.dohteM Опубликовано 13 мая, 2011 Автор Жалоба Опубликовано 13 мая, 2011 Спасибо.А в задаче №2 в) как?
Vsadnik665 Опубликовано 13 мая, 2011 Жалоба Опубликовано 13 мая, 2011 Сортируй по убыванию - методов сортировки полно, и выводи на экран второй элемент
NoA.dohteM Опубликовано 17 мая, 2011 Автор Жалоба Опубликовано 17 мая, 2011 Задача номер 2. Алгоритм неправильный у ZurbaganХелп!!!
voland Опубликовано 17 мая, 2011 Жалоба Опубликовано 17 мая, 2011 Ну вроде вот так:uses crt;const n=20;var A:array[1..n] of integer; i:word; M,NiO,NiP,VpV:integer;BEGIN{-------------------------------------------------}clrscr;randomize;for i:= 1 to n dobegin A[i]:=random(100)-50; write(A[i],' '); end;writeln;readkey;{-------------------------------------------------}M:=A[1]; NiP:=32767; NiO:=-32768; VpV:=-32768;for i:= 1 to n dobegin if (i<>1) then if (A[i]>M) then begin VpV:=M; M:=A[i]; end else if ((A[i]>VpV)and(A[i]<>M)) then VpV:=A[i]; if (A[i]>0) then if (A[i] if (A[i]<0) then if (A[i]>NiO) then NiO:=A[i];end;writeln('Vtoroy po velichine:',VpV);writeln('Naimenshiy iz polojitelnih:',NiP);write('Naibolshiy iz otricatelnih:',NiO);readkey;END.Конечно рандомный массив для примера.И такое присвоение:...NiP:=32767; NiO:=-32768; VpV:=-32768;...Макс и мин для integer мне не нравится, но в один проход по-моему ничего лучше не придумать))
TolkienDRR Опубликовано 18 мая, 2011 Жалоба Опубликовано 18 мая, 2011 2)В заданном массиве A(N), все элементы которого попарно различны, найдите:а) наибольший элемент из отрицательных;б) наименьший элемент из положительных;в) второй по величине элемент. Максимальную производительность, учитывая всегда произвольный набор элементов [цифЕр] в массиве, даст квиксорт. Любое решение за один проход - заведомо неверно или же будет настолько заполнено иф-ами, что скорости не прибавит. if (i<>1) then if (A>M) then begin VpV:=M; M:=A; end else if ((A>VpV)and(A<>M)) then VpV:=A;Первое условие if (i<>1) излишнее - в следующем условии оно дублируется if (A>M). К тому же не учтено, что первое число - максимальное.sja := 0;sjb := -1; //здесь -1 дабы отойти от холиваров про 0 положительное или не положительное число. поэтому будем считать 0 - положительнымsjc := a[1];m := a[1];d := 65535;for i := 1 to n do begin if a[i] < 0 then if sja = 0 then sja := a[i] else if a[i] > sja then sja := a[i]; if a[i] >= 0 then if sjb = -1 then sjb := a[i] else if a[i] < sjb then sjb := a[i]; if a[i] > m then begin sjc := m; m := a[i]; d := 0; end else if (d <> 0) and (a[i] < m) then if d < m - a[i] then d := m - a[i]end;if sja = 0 then writeln ('Отрицательных эл-тов нет в массиве') else writeln ('a - ', sja);if sjb = -1 then writeln ('Положительных эл-тов нет в массиве') else writeln ('b - ', sjb);if m = a[1] then sjc := m - d;if n = 1 then wirteln ('В массиве всего 1 элемент') else writeln ('c - ', sjc);вот такой вот изврат
voland Опубликовано 18 мая, 2011 Жалоба Опубликовано 18 мая, 2011 Максимальную производительность, учитывая всегда произвольный набор элементов [цифЕр] в массиве, даст квиксорт. Любое решение за один проход - заведомо неверно или же будет настолько заполнено иф-ами, что скорости не прибавит. Ёб... а я писал что-то про производительность?!Ну и конечно я проверки не делал, соответственно всякие вытекающие пакости выпадают, мой код для правильного массива)))В принципе можно и прикрутить проверки, но это уже должен делать сам просящий...Первое условие if (i<>1) излишнее - в следующем условии оно дублируется if (A>M). Это да... пропустил, просто добавил условие A<>M, а про первый иф забыл)) К тому же не учтено, что первое число - максимальное.А вот как раз таки и учтено!внимательней код просмотри! если не веришь... копируешь в блокнот, сохраняешь как *.раs, открываешь ТП, компилишь и радуешься))uses crt;const n=20;var A:array[1..n] of integer; i:word; M,NiO,NiP,VpV:integer;BEGIN{-------------------------------------------------}clrscr;randomize;for i:= 1 to n dobegin A[i]:=random(100)-50; write(A[i],' '); end;writeln;readkey;{-------------------------------------------------}M:=A[1]; NiP:=32767; NiO:=-32768; VpV:=-32768;for i:= 1 to n dobegin if (A[i]>M) then begin VpV:=M; M:=A[i]; end else if ((A[i]>VpV)and(A[i]<>M)) then VpV:=A[i]; if (A[i]>0) then if (A[i] if (A[i]<0) then if (A[i]>NiO) then NiO:=A[i];end;writeln('Vtoroy po velichine:',VpV);writeln('Naimenshiy iz polojitelnih:',NiP);write('Naibolshiy iz otricatelnih:',NiO);readkey;END.Вот тебе так сказать трассировка:: (конечно так для примера)А=(10,-3,-5,6,3)1) А[1]=10 M=10 NiP=10 NiO=-32768 VpV=-327682) А[2]=-3 M=10 NiP=10 NiO=-3 VpV=-33) А[3]=-5 M=10 NiP=10 NiO=-3 VpV=-34) А[4]=6 M=10 NiP=6 NiO=-3 VpV=65) А[5]=3 M=10 NiP=3 NiO=-3 VpV=6
voland Опубликовано 18 мая, 2011 Жалоба Опубликовано 18 мая, 2011 версия 1.2))uses crt;const n=20;var A:array[1..n] of integer; i,CP,CO:word; M,NiO,NiP,VpV:integer;function Puhdys : boolean;beginfor i:= 1 to n dobegin if (A[i]>0) then inc(CP); if (A[i]<0) then inc(CO); if (A[i]>M) then M:=A[i]; if (A[i]end;if ((CP>1)and(CO>1)) then Puhdys:=true else Puhdys:=false;end;BEGINclrscr;{-------------------------------------------------}randomize;for i:= 1 to n dobegin A[i]:=random(100)-50; write(A[i],' '); end;writeln;{-------------------------------------------------}M:=A[1]; NiO:=A[1]; CP:=0; CO:=0;if Puhdys thenbegin VpV:=NiO; NiP:=M; for i:= 1 to n do begin if ((A[i]<>M)and(A[i]>VpV)) then VpV:=A[i]; if ((A[i]>0) and(A[i] if ((A[i]<0) and(A[i]>NiO)) then NiO:=A[i]; end; writeln('Второй по величине:',VpV); writeln('Наименьший из положительных:',NiP); write('Наибольший из отрицательных:',NiO);endelse write('Массив не подходит!'); readkey;END.
TolkienDRR Опубликовано 19 мая, 2011 Жалоба Опубликовано 19 мая, 2011 Ёб... а я писал что-то про производительность?! =D это было написано к сведению, а не тебе ))) твоего ника там не было и копираста твоего тоже )) так что не бздеть ) voland, да действительно, максимальное учитывается, но все же лишняя проверка (A<>M) =Р К тому же, что за проверка a <> M, к любому моменту кроме переприсваивания М - a не равно M (это видно из условия).//addну ты извращенец =D сейчас примерно глянул чего ты делаешь в процедуре - изврат какой то. докучи для читабельности всегда надо передавать параметр. да и вообще в памяти отложилось, что нехорошо изменять значение переменной, которую не передаешь в функции через varadd// Даже мой (кажущийся мне длинным код) не так ужасен как твой =D К тому же алерты у тебя странные =Р Мой код рабочий и короткий, учитывает все что можно вытащить из задачи )) так что зачем было столько мучиться да и еще паскаль запускать =Р я так все написал )))
voland Опубликовано 19 мая, 2011 Жалоба Опубликовано 19 мая, 2011 voland, да действительно, максимальное учитывается, но все же лишняя проверка (A<>M) =Р Ты всезнайка, который пишет такие умные вещи, вот нахер запусти и посмотри что получится без проверки (A<>M), чему будет приравнен VpV, без этого условия.Сколько раз говорить то!!!ну ты извращенец =D сейчас примерно глянул чего ты делаешь в процедуре - изврат какой то. докучи для читабельности всегда надо передавать параметр. да и вообще в памяти отложилось, что нехорошо изменять значение переменной, которую не передаешь в функции через var Ну во-первых, это не процедура а функция, а во-вторых, всё в ней нормально, функция для нахождения мин и макс, проверки массива на удовлетворение условию.Ну да... фактически я разорвал код на две части, тут можно и без функции обойтись, с этим я не спорю - это мои тараканы и они мне не мешают... это какая-то лаба, которую защитил и забыл, а не курсач, в котором надо оптимизировать код и показывать свои навыки, и т.д. Даже мой (кажущийся мне длинным код) не так ужасен как твой =D К тому же алерты у тебя странные =Р Мой код рабочий и короткий, учитывает все что можно вытащить из задачи )) так что зачем было столько мучиться да и еще паскаль запускать =Р я так все написал )))По идее мой первый код был и есть рабочий, только без проверок, а вот нахера ты свой написал...Версия 1.3 final - без тараканов)))uses crt;const n=20;var A:array[1..n] of integer; i,CP,CO:word; M,NiO,NiP,VpV:integer;BEGINclrscr;{-------------------------------------------------}randomize;for i:= 1 to n dobegin A[i]:=random(100)-50; write(A[i],' '); end;writeln;{-------------------------------------------------}M:=A[1]; NiO:=A[1]; CP:=0; CO:=0;for i:= 1 to n dobegin if (A[i]>0) then inc(CP); if (A[i]<0) then inc(CO); if (A[i]>M) then M:=A[i]; if (A[i]end;if ((CP>1)and(CO>1)) thenbegin VpV:=NiO; NiP:=M; for i:= 1 to n do begin if ((A[i]<>M)and(A[i]>VpV)) then VpV:=A[i]; if ((A[i]>0) and(A[i] if ((A[i]<0) and(A[i]>NiO)) then NiO:=A[i]; end; writeln('Второй по величине:',VpV); writeln('Наименьший из положительных:',NiP); write('Наибольший из отрицательных:',NiO);endelse write('Массив не подходит!'); readkey;END.
TolkienDRR Опубликовано 20 мая, 2011 Жалоба Опубликовано 20 мая, 2011 скопируй, вставь и запусти =Рconst n=20;var A:array[1..n] of integer; i:word; M,NiO,NiP,VpV:integer;BEGIN{-------------------------------------------------}clrscr;randomize;for i:= 1 to n dobegin A[i]:=random(100)-50; write(A[i],' '); end;writeln;readkey;{-------------------------------------------------}M:=A[1]; NiP:=32767; NiO:=-32768; VpV:=-32768;for i:= 1 to n dobegin if (i<>1) then if (A[i]>M) then begin VpV:=M; M:=A[i]; end else if (A[i]>VpV) then VpV:=A[i]; //удалил and(A[i]<>M) if (A[i]>0) then if (A[i] if (A[i]<0) then if (A[i]>NiO) then NiO:=A[i];end;writeln('Vtoroy po velichine:',VpV);writeln('Naimenshiy iz polojitelnih:',NiP);write('Naibolshiy iz otricatelnih:',NiO);readkey;END.uses crt;По идее мой первый код был и есть рабочий, только без проверок, а вот нахера ты свой написал...потому что мой рабочий и правильный (1ый в ветке) во всех случаях. а твои модификации я уже слабо смотрел, т.к. смысла не вижу разбираться в чужом, если с использованием 1 цикла мой верный. с использованием нескольких циклов задача вообще не имеет никакой сложности =)//add таки посмотрел последний твой код без тараканов:voland, если в массиве хотя бы одно положительное число или одно отрицательное число, то у тебя CP = 1 или CO = 1, тогда у тебя проверкаif ((CP>1)and(CO>1))не сработает и вообще скажет, что массив не подходит.хотя массив a: a[1]=-1, a[2]=1 не подойдет по условиям, хотяа) наибольший элемент из отрицательных; -1б) наименьший элемент из положительных; 1в) второй по величине элемент. -1да и в целом, даже если массив: а = [-1,2,3,4,5,6] у тебя вылезет ошибка.да и в целом некорректный код, если нет отрицательных чисел - то должна быть ошибка "нет отрицательных" и при этом решить остальные подпункты. а у тебя алерт вылазит, если хоть по одному условию неверно, да и еще проверка кривая =D
voland Опубликовано 20 мая, 2011 Жалоба Опубликовано 20 мая, 2011 voland, если в массиве хотя бы одно положительное число или одно отрицательное число, то у тебя CP = 1 или CO = 1, тогда у тебя проверкаif ((CP>1)and(CO>1))не сработает и вообще скажет, что массив не подходит. А так и должно быть!да и в целом, даже если массив: а = [-1,2,3,4,5,6] у тебя вылезет ошибка. Ну да всё правильно, как я понял надо чтобы было как минимум по 2 положительных и отрицательных, смысл тогда находить наименьшие и наибольшие из + и -да и в целом некорректный код, если нет отрицательных чисел - то должна быть ошибка "нет отрицательных" и при этом решить остальные подпункты. а у тебя алерт вылазит, если хоть по одному условию неверно, да и еще проверка кривая =DА смысл вообще это делать? ошибка да ошибка! пох какая, пусть сам соображает что исправить...После этих наездов на ифы и код, вот скажи вообще нахера пипи на код если ты его даже толком не смотрел, попипи решил?Только с нескольких заходов дошло зачем вообще нужно условие A<>M, и дошло ли вообще....
TolkienDRR Опубликовано 20 мая, 2011 Жалоба Опубликовано 20 мая, 2011 Ну да всё правильнохаха:Задан произвольный массив (n<100), выберите из него максимальное число. m, i, n: integer; a: array [1..99] of integer;begin write ('n = '); readln(n); if n = 1 then writeln('В массиве одно число и оно не может быть максимальным числом в массиве, ведь оно одно') else ...end.varизвини конечно, но чушь пишешь.Добавлено спустя 1 минуту 24 секунды:А смысл вообще это делать? ошибка да ошибка! пох какая, пусть сам соображает что исправитьможно вычислить - вычисляй, какой то нельзя - сообщи об этом. а не ломай все на корю. а у тебя какое то гавнокодерство.Добавлено спустя 2 минуты 28 секунд:Только с нескольких заходов дошло зачем вообще нужно условие A<>M, и дошло ли вообще....нет одинаковых чисел в массиве, при одном проходе максимальное число не может повториться в массиве, посему проверять на неравенство с максимальным смысла нет.
voland Опубликовано 20 мая, 2011 Жалоба Опубликовано 20 мая, 2011 Млооо... малость не понял про по-парно различный массив, вернее сказать неправильно понял, вся хрень из-за этого...
NoA.dohteM Опубликовано 22 мая, 2011 Автор Жалоба Опубликовано 22 мая, 2011 Них** себе.Версия 1.3 как я понял правильная?Добавлено спустя 48 секунд:Или ничего неверно?
TolkienDRR Опубликовано 22 мая, 2011 Жалоба Опубликовано 22 мая, 2011 NoA.dohteM, а угадай =D на кафедру СИ ж сдаваться будешь, вот и узнаю какую выбрал =D
voland Опубликовано 22 мая, 2011 Жалоба Опубликовано 22 мая, 2011 Них** себе.Версия 1.3 как я понял правильная?Добавлено спустя 48 секунд:Или ничего неверно?Да, ответ выдаст верный, но там пару условий и проверку надо изменить...
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти