Консультация № 139737
10.07.2008, 20:16
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты! так долго ждал, когда откроется портал. Сегодня несколько задач.
1. С клавиатуры вводятся пять различных целых чисел. Найдите медиану (среднее по величине число).
5 0 7 3 4
4
исправьте ошибку в коде (код в приложении).
2. С клавиатуры вводится натуральное число n. Напишите программу, которая рисует равнобедренный треугольник из звёздочек с высотой и основанием, равными n.
6
*
* *
* *
* *
* *
* * * * *
3. Дана последовательность чисел, заканчивающихся нулём. У каждого числа сначала записано количество цифр в этом числе, а потом через пробел - сами цифры. Выведите сначала количество чисел в последовательности, а потом сами числа.
3 4 7 3 2 8 9 3 5 0 5 0
3
473 89 505
4. С клавиатуры вводятся два натуральных числа a и b. Выведите все простые числа на отрезке [a, b] в порядке возрастания суммы цифр.
150 190
151 163 181 173 157 167 179
Заранее благодарен.

Приложение:
1. Var x: Array[1..5] Of Integer; t: Array[1..3] Of Integer; i, j, med, min, max, index: Integer;Procedure ReadData;Begin For i := 1 To 5 Do Begin Read(x[i]); End;End;Procedure WriteData;Begin WriteLn(med); ReadLn;End;Begin ReadData; min := x[1]; j := 1; For i := 1 To 5 Do Begin If (x[i] < min) Then Begin min := x[i]; index := i; End; End; x[index] := -32767; max := x[1]; For i := 1 To 5 Do Begin If (x[i] > max) Then Begin max := x[i]; index := i; End; End; x[index] := 32767; For i := 1 To 5 Do Begin If ((x[i] <> 32767) And (x[i] <> -32767)) Then Begin t[j] := x[i]; Inc(j); End; End; min := t[1]; For i := 1 To 3 Do Begin If (t[i] < min) Then Begin min := t[i]; index := i; End; End; t[index] := -32767; max := t[1]; For i := 1 To 3 Do Begin If (t[i] > max) Then Begin max := t[i]; index := i; End; End; t[index] := 32767; For i := 1 To 3 Do Begin If ((t[i] <> -32767) And (t[i] <> 32767)) Then Begin med := t[i]; End; End; WriteData;End.

Обсуждение

давно
Старший Модератор
31795
6196
14.07.2008, 16:04
общий
это ответ
Здравствуйте, Хощенко Артём Владимирович!

Первая и четвертая задачи в приложении.
Первую задачу переписал полностью, т.к. использование дополнительных массивов оправданно для маленьких значений количества элементов. Если количество элементов массива, к примеру больше 100 - уже запутывает весь алгоритм программы.
Такие программы можно решать двумя способами:
- отсортировать весь массив по возрастанию или убыванию, после этого медиана будет расположена по адресу <b>med:=n div2 + 1;</b> - для нечетного количества элементов;
- ищется минимальное и маскимальное значение элементов массива и после этого они меняются местами с последним и предпоследним элементами, а также уменьшаемся счетчик количества элементов массива(как бы вырезаются), так продолжается до тех пор пока текущее количество элементов массива больше двух. В приложении второй способ. Выводится весь массив(для наглядности), но медиана будет находится в в первом элементе массива.

Четвертая задача проходит указаный диапазон простых чисел дважды:
первый раз когда ищет минимальную и максимальную сумму цифр простых чисел;
второй раз когда выводить простые числа в порядке ворзастания сумм цифр.
Удачи!

Приложение:
{1}const n=5;var x:array[1..n]of integer; i,im,imax,imin,tm:integer;begin {генерируем массив чисел случайно и выводим} randomize; for i:=1 to n do begin x[i]:=random(2*n); write(x[i]:n); end; writeln; {начинаем цикл поиска медианы im- максимальное значение элементов массива} im:=n; while im>2 do begin imin:=1;{индекс минимального значения} imax:=1;{индекс максимального значения} for i:=1 to im do if x[i]>x[imax] then imax:=i{если нашли максимальное значение-запоминаем его индекс} else if x[i]<x[imin] then imin:=i;{если нашли минимальное значение-запоминаем его индекс} {меняем максимальное значение со значением на которое указавает im} tm:=x[imax]; x[imax]:=x[im]; x[im]:=tm; {меняем минимальное значение со значением на которое указавает im-1} tm:=x[imin]; x[imin]:=x[im-1]; x[im-1]:=tm; {уменьшаем количество элементов} dec(im,2); end; {выводим новое расположение всех элементов массива} for i:=1 to n do write(x[i]:n);end.{4}var a,b,c,d,e,minSumma,maxSumma:integer; {функция возвращает значение истина если число простое}function PrimeNumber(n:integer):boolean; var tmp:integer; begin tmp:=n-1; {цикл проерки простого числа} while ((n mod tmp)>0)and (tmp>1)do dec(tmp); {присваиваем результат} PrimeNumber:=tmp=1; end; {функция возвращает сумму всех цифр числа}function CheckSumm(n:integer):integer; var tmp:integer; begin tmp:=0; {в цикле суммируем все цифры числа} while n>0 do begin inc(tmp,n mod 10); n:=n div 10; end; {присваиваем результат работы функции} CheckSumm:=tmp; end;begin {вводим натуральное число А} repeat write(‘Enter A:‘); readln(a); until a>0; {вводим натуральное число В, большее чем А} repeat write(‘Enter B:‘); readln(b); until b>a; {начальные значения минимальной и максимальной суммы цифр числа} minSumma:=maxInt; maxSumma:=0; {в цикле проверяем весь диапазон натуральных чисел} for c:=a to b do if PrimeNumber(c) then begin if CheckSumm(c) > maxSumma then maxSumma:=CheckSumm(c); if CheckSumm(c) < minSumma then minSumma:=CheckSumm(c); end; {проверяем весь диапазон от минимальной суммы до максимальной} while minSumma<=maxSumma do begin {в цикле перебираем все простые числа} for c:=a to b do {если совпадают оба значения, то выводим число} if PrimeNumber(c) and (CheckSumm(c)=minSumma) then write(c:5); {увеличиваем возможную сумму цифр} inc(minSumma); end; writeln;end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа