Консультация № 130946
07.04.2008, 08:10
0.00 руб.
0 2 2
Здрасти, а помогите пож. с задачками=)))
1) Определить, во введенной строке есть десятичное число?
Сколько чисел было введено? Какое из них наибольшее?
2) В двумерном массиве переставить местами элементы первой и по-
следней строки.
3)Дана действительная матрица размера n*m, все элементы которой
различны. В каждой строке выбирается элемент с наименьшим зна-
чением. Затем среди этих чисел выбирается наибольшее, указать
индексы элемента с найденным значением. Отсортировать матрицу
по убыванию.
Спасибо=)))

Обсуждение

давно
Профессор
401888
1232
07.04.2008, 10:49
общий
это ответ
Здравствуйте, Осипова Анна Олеговна!
В приложениии решение второй и третьей задач. В первой задаче действительно нужно найти конкретно десятичные числа,т.е. в десятеричной системе счисления или это просто само собой разумется. Просто отличать числа десятичные от чисел в ситемах с меньшим основанием довольно трудно. Если сможете, уточните условие.
Комментарии ко второй задаче минимальны, там все ясно. К третьей задаче - более подробные, задача намногог сложнее. Удачи Вам!

Приложение:
Задача 2.program per_str;uses crt;var a:array[1..10,1..10] of integer; n,m,i,j,x:integer;beginclrscr;write(‘m= ‘);readln(m);write(‘n= ‘);readln(n);randomize;for i:=1 to m do begin for j:=1 to n do begin a[i,j]:=random(10); write(a[i,j]:3); end; writeln; end;readln;for j:=1 to n do begin {меняем местами элементы первой и последней строк} x:=a[1,j];a[1,j]:=a[m,j];a[m,j]:=x; end;for i:=1 to m do begin for j:=1 to n do write(a[i,j]:3); writeln; end;readln;end.Задача 3.uses crt;const n=5; m=6;var a:array[1..n,1..m]of integer; mn:set of byte; {множество используем для получения неповторяющихся чисел} b:array[1..n*m]of integer;{вспомогательный линейный массив для сортировки матрицы} i,j,min,max,imin,jmin,imax,jmax,k,x:integer;beginclrscr;mn:=[];randomize;writeln(‘Ishodnaia matrica:‘);for i:=1 to n do begin for j:=1 to m do begin {заполняем матрицу случайными неповторяющимися числами от 1 до 30} repeat a[i,j]:=random(n*m)+1; until not (a[i,j] in mn); include(mn,a[i,j]); write(a[i,j]:4); end; writeln; end;readln;{Поиск максимального среди минимальных в строках}max:=0;for i:=1 to n do begin min:=a[i,1];jmin:=1; for j:=1 to m do if a[i,j]<min then begin min:=a[i,j];{минимальный в строке} jmin:=j; end; if min>max then begin max:=min; {если в сл.строке мин >, то max присваиваем ему} imax:=i;{номер строки} jmax:=jmin; {номер столбца} end; end;writeln(‘max=‘,max,‘ imax=‘,imax,‘ jmax=‘,jmax);readln;{разворачиваем матрицу в линейный массив}k:=0;for i:=1 to n dofor j:=1 to m dobegink:=k+1;b[k]:=a[i,j];end;{Сортируем массив по убыванию}for i:=1 to k-1 dofor j:=1 to k-1 doif b[j]<b[j+1]then begin x:=b[j]; b[j]:=b[j+1]; b[j+1]:=x; end;{Сворачиваем массив обратно в матрицу в отсортированном виде}writeln(‘Sortironka:‘);for i:=1 to n do begin for j:=1 to m do begin a[i,j]:=b[j+m*(i-1)]; write(a[i,j]:3); end; writeln; end;readln;end.
Неизвестный
07.04.2008, 19:48
общий
это ответ

<i>Здравствуйте, <b>Осипова Анна Олеговна</b>!</i>

Пример решения первой задачи находится в приложении.
В данном примере ищутся все десятичные числа, даже если они являются частью слова (или, например, частью шестнадцатиричного числа), поскольку в задании не указано, что это запрещено (т.е. пользовался принципом: разрешено все, что не запрещено). Дополнительно в коде реализован поиск отрицательных десятичных чисел (начинающихся со знака "-").

<em>Успехов!</em>

Приложение:
program q130946_1;uses Crt; function isDigit(const ch: Char): Boolean;begin isDigit:= (ch in [‘0‘..‘9‘]);end;var {Количество найденных десятичных чисел} dcount: Integer; {Строка} aText: String; {Наибольшее десятичное число} dMax: LongInt; {Дополнительные переменные} dBuff: LongInt; zero, i, sL: Byte; prevIsDigit: Boolean; prevIsMinus: Boolean;begin {Очистка экрана} ClrScr; {Ввод текста} write(‘Text:‘); readln(aText); {Инициализация} dCount:= 0; zero:= ord(‘0‘); dBuff:= 0; sL:= Length(aText); prevIsDigit:= False; prevIsMinus:= False; {Перебор символов строки} for i:= 1 to sL do begin if (isDigit(aText[i])) then begin if prevIsMinus then dBuff:= (dBuff * 10) - (ord(aText[i]) - zero) else dBuff:= (dBuff * 10) + ord(aText[i]) - zero; prevIsDigit:= True; end else begin if prevIsDigit then begin Inc(dCount); if ((dBuff > dMax) or (dCount = 1)) then dMax:= dBuff; dBuff:= 0; prevIsDigit:= False; end; prevIsMinus:= (aText[i] = ‘-‘); end; end; if prevIsDigit then begin Inc(dCount); if ((dBuff > dMax) or (dCount = 1)) then dMax:= dBuff; end; {Вывод результата} writeln; if (dCount = 0) then writeln(‘Chisel ne obnaruzheno!‘) else Writeln(‘Naideno ‘, dCount, ‘ chisel, max = ‘, dMax); {Даем пользователю насладиться результатом} writeln; writeln(‘Press any key...‘); readln;end.
Форма ответа