Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Решение задач на Pascal. Форум 2
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ]
Модераторы: paradise, KMA
  

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

Эта тема закрыта, новые ответы не принимаются

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ]

Форум работает на скрипте © Ikonboard.com