Dale
Участник
|

azale4ka 1)Загуглите "сортировка массива пузырьком" 2)Была уже почти аналогичная задачка ( НайтиМаксимальный элемент в заданной группе соседних строк матрицы с использованием функций. ) http://exir.ru/cgi-bin/ikonboard/topic.cgi?forum=3&topic=242&start=620 Только вам нужен номер а не число, поэтому в функции вместо if max<matr[HOMEP_CTPOKU,i] then max:=matr[HOMEP_CTPOKU,i]; надо if max<matr[HOMEP_CTPOKU,i] then max:=i; Изм. тело программы: 1)появится переменная EEE, и собственно замена местами будет выглядеть так: for j:= 1 to gr1 do begin EEE:=matr[j,nouck(j)]; matr[j,nouck(j)]:=matr[j,j]; matr[j,j]:=EEE; end; ___ 2)Вывод матрицы выгл. так: _________ writeln('Вот наша матрица:'); For i := 1 to gr1 do begin writeln; For j := 1 to gr2 do write(matr[i,j],' '); end; _____________ 3) Ван надо стереть везде gr1, gr2, BEPX,HU3 за ненадобностью, и вместо gr1 и gr2 поставить цифру 10. ЗАД.3 Примерно так col:=0; for a:=1 to M do begin sum:=0; b:=a; while b>0 do begin sum:=sum+b mod 10; b:=b div 10; end; if sqr(sum)=X then col:=col+1; end;
|
Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 8 июня 2009 1:52 | IP
|
|
Dale
Участник
|

Цитата: azale4ka написал 3 июня 2009 14:31 Приветик!!! Помогите пожалуйста решить задачу.Вообще не понимаю как их решить. Вычислите количсетво ненулевых элементов массива С (40) и их порядковые номера. Заранее большое спасибо. (Сообщение отредактировал azale4ka 3 июня 2009 15:32) (Сообщение отредактировал azale4ka 3 июня 2009 15:51)
col:=0; for i:=1 to 40 do if c[ i]<>0 then begin col:=col+1; writeln(i); end; writeln(col); (Сообщение отредактировал Dale 10 июня 2009 1:55)
|
Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 8 июня 2009 1:56 | IP
|
|
Dale
Участник
|

xjmx На эти задачи вы бы потратили 2 часа и то если вы полный нуб. Есть ли необходимость в их решении в данный момент?
|
Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 8 июня 2009 2:00 | IP
|
|
olga b
Новичок
|
Прошу помощи в составлении программы подсчета числа минимальных по модулю элементов в одномерном массиве.
|
Всего сообщений: 22 | Присоединился: февраль 2009 | Отправлено: 9 июня 2009 19:34 | IP
|
|
Nyta
Новичок
|

Спасибо, Dale!!!но что-то у меня все равно не получается...
|
Всего сообщений: 5 | Присоединился: июнь 2009 | Отправлено: 9 июня 2009 22:11 | IP
|
|
Dale
Участник
|

Цитата: Nyta написал 9 июня 2009 22:11 Спасибо, Dale!!!но что-то у меня все равно не получается...
Да ну... Попытаюсь объяснить решение этих задач. Задача номер 1 В первую очередь делаем ввод с клавиатуры количества дней (n) и сколько цифр должно быть в строке(m). Далее Вопрос: как узнать, что надо выводить цифры со следующей строки? Очень просто - если мы уже вывели столько цифр, что их количество делится без остатка на m, то это значит, что пора выводить на следующей строке. Поэтому у нас есть: 1) Переменная с - счетчик, который будет считать, сколько цифр выведено. Сначала мы его обнуляем: c:=0; Сразу после вывода writeln(i); проверяем, делится ли с на m без остатка и если да, то переходим на следующую строчку с пом. процедуры writeln if (c mod m)=0 then writeln; Что такое mod? A mod B вычисляет остаток от деления, и если он равен нулю, то значит, что A делится на И без остатка, что нам и требуется. Почему и зачем в программе два цикла? Все очень просто. Если бы мы написали так foк i:=1 to do n do begin c:=c+1; write(i); if (c mod m)=0 then writeln; end; то получилось бы, что в любой из дней Незнайка писал бы только по одному числу: в первый - 1, во второй - 2 и т.д. Получилось бы 123456... А нам нужно, чтобы было 122333444455555666666 Итак, n - количество дней, переменная i изменяется изо дня в день. В первый день она равна 1, во второй - 2 и т.д. Вывод: нам надо выводить число i раз. Как сделать, чтобы одно и то же произошло несколько раз? Ну конечно же с помощью цикла for! Я не поленился и написал все на паскале и выложил внешняя ссылка удалена __________________________ c:=0; foк i:=1 to do n do begin for j:=1 to i do begin c:=c+1; write(i); if (c mod m)=0 then writeln; end; end; end; внешняя ссылка удалена
|
Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 10 июня 2009 1:26 | IP
|
|
Dale
Участник
|

Цитата: Nyta написал 9 июня 2009 22:11 Спасибо, Dale!!!но что-то у меня все равно не получается...
Наверняка объяснения задач покажутся вам путанными, но я же не писатель, так что если есть вопросы - задавайте. Задача 2 Не буду рассказывать, как вводить или вводить массивы на экран: наверняка у вас есть какой-нибудь конспект, где все это есть. Итак. f - переменная типа boolean, то есть логического типа. Она может принимать два значения: false и true. В данной задаче переменная используется в качестве "флажка". Мы перебираем по очереди элементы двух массивов - X и Y . В случае, если хотя бы один элемент второго массива превосходит соответствующий элемент первого, мы поднимаем флажок: if x[i ]<y[i ] then f:=true; Таким образом, f останется в значении false, если все элементы первого массива не превосходят соотв. элементы второго. Чтобы не вдаваться в подробные разъяснения, скажу лишь, что строка if f then writeln('не все') else writeln('все'); может быть заменена строкой if f=true then writeln('не все') else writeln('все'); Примечание Поначалу я упустил из виду ситуацию с квадратными скобками и поэтому все что в них было не отобразилось решение задачи внешняя ссылка удалена
|
Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 10 июня 2009 1:54 | IP
|
|
Nyta
Новичок
|

Dale!!!Спасибо огромное!!!!!Я все поняла!!!Ты оч хорошо объясняешь!!!Если бы мне в универе так объясняли!!!Я бы наврное решала бы сама!!!у меня еще вопросик.. точнее задача..Поменять местами минимальный и максимальный элементы массива размера 10. вот что у меня получилось..но работает не правильно... uses crt; const n=10; type tmas=array[1..n]; var i,min,max:integer;var i.min,max:integer; procedure genMas(a,b: integer; var mas:tmas); begin randomize; for i:=1 to n do mas:=random(b-a); end; procedure printMas(mas:Tmas); begin for i:=1 to n do write(mas.''); end; procedure minMas(mas:Tmas;var mn,mx: integer); begin mn:=mas[1]; mx:=mas[1]; for i:=2 to n do if mn>mas then mn:=mas; if mx<mas then mx:=mas; end; begin clrscr; genMas(-10,10,K); printMas(K); minMax(K,min,max); writeln; writeln('min - ',max); writeln('max - ',min); end.
|
Всего сообщений: 5 | Присоединился: июнь 2009 | Отправлено: 10 июня 2009 19:45 | IP
|
|
Lucky
Новичок
|
Имею пару задач по Turbo pascal! помогите плз решить а то я чот не догоняю и мне срочно надо: 1)Анімация. Чайка летит над морем; 2)Область значения и график функции y=1\x*x; 3)Ввести массив записей. каждий содержить ведомости про фамалию автора и название книги. Создать новий массив записей, что имеет дополнительно ведомости про год издания. Год издательства береться из масива записей, что содержит название книги и год. Зарание спасибо!!! (Сообщение отредактировал Lucky 10 июня 2009 21:50)
|
Всего сообщений: 2 | Присоединился: июнь 2009 | Отправлено: 10 июня 2009 21:28 | IP
|
|
Dale
Участник
|

Nyta Во-первых, у вас в процедуре minmas в цикле for не хватает begin и end; Во-вторых, выведя writeln('min - ',max); writeln('max - ',min); вы не поменяете элементы массива местами. Для этого вам нужно знать индексы максимального и минимального элементов. Это значит, что вместо mn:=mas[1]; mx:=mas[1]; for i:=2 to n do begin if mn>mas[i ] then mn:=mas[i ]; if mx<mas[i ] then mx:=mas[i ]; end; вам нужно написать mn:=1; mx:=1; for i:=2 to n do begin if mn>mas[i ] then mn:=i; if mx<mas[i ] then mx:=i; end; Таким образом вы получите нужные индексы, и вам будет легко поменять местами макс. и мин. элементы: begin clrscr; genMas(-10,10,K); writeln('Массив до замены местами'); printMas(K); minMax(K,min,max); ABDA:= K[min]; K[min]:=K[max]; k[max]:=ABDA; writeln('Массив после замены местами'); printMas(K); writeln; writeln('max- ',k[max]); writeln('min- ',k[min]); end. (Сообщение отредактировал Dale 11 июня 2009 1:13)
|
Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 11 июня 2009 1:10 | IP
|
|
|