Электростальский форум
Hi-Tech => Компьютеры, периферия, мультимедиа и ПО => Тема начата: GerM от 21.01.07, 22:14:18
-
Не знаю в том ли разделе я создал тему...ну да ладно, помогите пожалуйста с Паскалем, одному хорошему человеку, очень просил...вот задачка, просто надо написать программу в Паскале...
В квадратной таблице обменяйте местами элементы строки и столбца на пересечении которых ноходится минимальный из положит элементов.
Заранее спасибо...
МОдераторы, сорри, но очень надо... <:/
-
Могу помочь с таким на Бейсике, но если обязательно Паскаль - http://forum.codenet.ru/forumdisplay.php?f=27 (http://forum.codenet.ru/forumdisplay.php?f=27)
-
Нате =)
Сеня ночью что-то не клеилось...переделал - получилось =)
uses Crt;
var
a,b:array [1..10,1..10] of Integer;
i,j,im,jm:Byte;
m:Integer;
begin
ClrScr;
randomize;
m:=101;
{/////////////////////////////////////////////////////////////////}
for i:=1 to 10 do begin
for j:=1 to 10 do begin
a[i,j]:=random(100);
if (a[i,j]>0) and (a[i,j]<m) then
begin
m:=a[i,j];
im:=i;jm:=j;
end;
end;
end;
{/////////////////////////////////////////////////////////////////}
for i:=1 to 10 do begin
for j:=1 to 10 do begin
b[i,j]:=a[i,j];
b[im,j]:=a[j,jm];
b[j,jm]:=a[im,j];
Write(a[i,j]:3);
end;
writeln;
end;
writeln;
for i:=1 to 10 do begin
for j:=1 to 10 do begin
Write(b[i,j]:3);
end;
writeln;
end;
WriteLn(m,' || ',im,':',jm);
ReadKey;
end.
-
Ты проверял свою прогу? [[cool4]]
Если да, то ты должен был заметить, что всё получается криво, если этот элемент лежит на перечесечии какой-нить 2ой строки и 3-ого столбца.. И получается всё норм, когда элемент лежит на диагоналях матрицы.
+ я не понял, зачем ты при переборе всех элементов делаешь это:" a[i,j] :=a [j,i]" ?
Вот посмотри мой текст. Я только беру минимальный полож не всей матрицы, а именно из тех элементов, которые лежат на диагоналях.(i=j или i+j=n+1, где nxn -размер массива.)
-
Ты проверял свою прогу? [[cool4]]
Если да, то ты должен был заметить, что всё получается криво, если этот элемент лежит на перечесечии какой-нить 2ой строки и 3-ого столбца.. И получается всё норм, когда элемент лежит на диагоналях матрицы.
+ я не понял, зачем ты при переборе всех элементов делаешь это:" a[i,j] :=a [j,i]" ?
Вот посмотри мой текст. Я только беру минимальный полож не всей матрицы, а именно из тех элементов, которые лежат на диагоналях.(i=j или i+j=n+1, где nxn -размер массива.)
Да, я проверял свою прогу
Где это я a[i,j] :=a [j,i] делаю? О_о о_О
Вот посмотри мой текст. Я только беру минимальный полож не всей матрицы, а именно из тех элементов, которые лежат на диагоналях.(i=j или i+j=n+1, где nxn -размер массива.)
Посмотрел=) Лучше бы не смотрел=)
1. Ты задание читал? ПОчему ты говоришь, "Я только беру минимальный полож не всей матрицы, а именно из тех элементов, которые лежат на диагоналях", хотя в задании просят: "В квадратной таблице обменяйте местами элементы строки и столбца на пересечении которых ноходится минимальный из положит элементов."
Я что-то не вижу ни слова про диагонали=)))
2. i+j=n+1, где nxn -размер массива --- я мож чего не понимаю...но если i,j - счетчики строк и столбцов, то условие i+j=n+1 не выполнимо=)))
Для примера - матрица 2х2, значит n=2, исзодя из этого i+j=3, исходя из этого i<>j ну никак=) Да и вообще чушь какая-то=)
3. Посмотрим скрин =)
3.1. Во-первых, по правилам записи номера элемента - первым числом записывается номер строки, а не столбца=) Ну да лана=)
3.2. Смотрим скрин =) У тебя прога нашла минимальный элемент=11, а как же первая строка?? А 9 вроде меньше 11 =)))) Ну да лана, опустим и это =)
То, что строки и столбцы не совсем совпадают - это коллизия из-за самой постановки задачи, опустим=) НО, столбец на строку намана заменился, а вот строка на столбец...НЕА=) посмотри в 3-ей строке выделил жОлтым=) У нас 21, а должно быть 11 =) Хотя может из первой таблицы эта 21 как-то закралась (не смотрел ещё код, потому не совсем понимаю почему;) )
ГОСПОДИ, не, я на этот ужас смотреть не могу=) ЗАЧЕМ МУДРИТЬ!?:)))))))
ИМХО, алгоритм:
1. Находим мин. эл-т в матрице
2. Запоминаем координаты этого эл-та
3. Формируем новую матрицу = первичной
4. В новой матрице за константу ставим строку(например, не помню что я на что менял в проге)))))))) ) и цикл по столбцам и приравниваем к столбцу из первичной матрицы, путем прогона по тому же циклу, только константа будет уже столбец, а строка идет по циклу. Константы - это координаты минимального элемента в матрице.
Точно так же меняем и столбец на строку.
5. вывод новой матрицы
Собссно, зачем такой код жуткий как у тебя - не понимаю. Зачем так много переменных? Когда надо всего 2 массива, 4 счетчика и 1 временная переменная для нахождения мин. элемента (пузырек ;) )
ПыСы. По существу про глюки моей проги выслушаю =) Желательно с картинками =)
ПыПыСы. Не претендую на супер-программера, но меня учили оптимизировать код. Чем проще система - тем стабильнее работа ;)
-
Да, текст и впрям большой у мну.. просто последние ДЗ заставляли работать без введения новых массивов(привычка) =) + я рассматриваю все условия, которые могут привести к ошибке.
Вот исправил текст, была нелепая ошибка ("<>" не там поставил).
Дык, товарисц, вы моё сообщение даже , видимо, не дочитали, раз задаёте такие вопросы, ответы на которые лежат в предыдущем посту.
Да, кстати, можно даже задать условие, что если минимальный элемент лежит не на диагоналях, то поменять местами строку и столбец НЕЛЬЗЯ.
Поентому я просто ищу ОСОБЫЙ минимальный элемент.
Напишите ответ , если дана такая матрица:
213
456
789
ответ=?? :D
п.с. проверьте свою прогу ещё раз и посмотриче что у вас порядок элементов меняеца в этих строке и столбце.
п.с.2 А в условии сказано, что массив 10х10? []>0
-
Не вижу причин создавать второй массив ... имхо это антиоптимизация [[curtain]]
Проще надо быть ... проще ... если у нас есть im и jm хранящие строку и столбец с минимальным элементом то обмен строки и столбца выполняется за один проход цикла:
for i=1 to 10 do
begin
m := a[i, jm];
a[i, jm] := a[im, i];
a[im, i] := m;
end;
при этом удачно используется имеющаяся переменная m и это действительно начинает напоминать оптимизацию ...
-
Да, текст и впрям большой у мну.. просто последние ДЗ заставляли работать без введения новых массивов(привычка) =) + я рассматриваю все условия, которые могут привести к ошибке.
Вот исправил текст, была нелепая ошибка ("<>" не там поставил).
Дык, товарисц, вы моё сообщение даже , видимо, не дочитали, раз задаёте такие вопросы, ответы на которые лежат в предыдущем посту.
Да, кстати, можно даже задать условие, что если минимальный элемент лежит не на диагоналях, то поменять местами строку и столбец НЕЛЬЗЯ.
Поентому я просто ищу ОСОБЫЙ минимальный элемент.
Напишите ответ , если дана такая матрица:
213
456
789
ответ=?? :D
п.с. проверьте свою прогу ещё раз и посмотриче что у вас порядок элементов меняеца в этих строке и столбце.
п.с.2 А в условии сказано, что массив 10х10? []>0
ПОЧЕМУ нельзя менять местами? В условии нигде не сказано, что минимальный элемент должен остаться на своем месте ;) Не сказано и про идентичность. Так что это личные выводы и просто придирчивость.
По поводу размерности матрицы - если лень ручками поменять, можно использовать переменную, без проблем=) А ещё можно работать с открытыми массивами и вводить размерность с клавиатуры. Но зачем усложнять?
2exBoMBeR, хорошая идея, полностью согласен =)
-
Нужен програмист на один день... Есть 2 задачи, которые нужно решить....но без обьяснения это не получиться... Поэтому, у кого есть время...в личку!
-
Люди.. а мне случаем не поможите? а то чет ни как не вьеду:
мож увидев готовую картину ченить и пойму.
вобщем задача такая:
"Дана матрица А(ввод элементов матрицы осуществляется с клавиатуры). Вывести на экран строку, сумма элементов которой больше."
-
Привет участникам темы
Случайно натолкнулся на эту тему.
Дана задача:
В квадратной таблице обменяйте местами элементы строки и столбца
на пересечении которых ноходится минимальный из положительных элементов.
Задачка не такая уж и сложная. GERM имел ввиду под квадратной таблицей - квадратную матрицу. Необязательно сначала применять RANDOM и RANDOMIZE. Дайте человеку понять саму матрицу, рассмотреть ее и на основе поставленной задачи даже взглядом определить минимальное положительное число в ней. Пусть он поймет и обоснует сначала на примере как это надо
сделать, а уж потом применяет автоматическое построение матрицы любой N величины.
И еще в условии задачи бы сказано про квадратную таблицу (квадратную матрицу). Могу напомнить, что такое вообще матрица и в частности квадратная матрица.
Так вот МАТРИЦА - прямоугольная таблица составленная из m-n чисел, называется
матрицей из m строк и n столбцов или матрицей размера m*n, а также еще m*n -
матрицей.
|A11 A12 A13 ... A1n|
|A21 A22 A23 ... A2n| (1)
|A31 A32 A33 ... A3n|
Числа Aij(i=1,2,...,m; j=1,2,...,n) называются элементами матрицы;
первый индекс i элемента указывает номер строки, в которой стоит элемент матрицы, а второй индекс j - номер столбца.
Матрица (1) может обозначаться также
||Aij||, i=1,2,...,m; j=1,2,2,...,n
Кроме того, для матриц используются обозначения
(Aij) и [Aij]
Квадратная матрица(порядка n) - это когда число строк матрицы равно числу
ее столбцов ( и равно n)
Я даю наглядное решение этой задачи:
Пусть есть квадратная матрица массивом 3x3
3 -5 1
2 6 4
-4 8 7
Наименьшее положительное число здесь 1
Тогда в этом случае строка матрицы массива 3x3, где находится число 1
3,-5,1
Столбец 1,4,7
Необходимо заменить столбец на строку или строку на столбец(разницы нет)
При замене строка - 7,4,1 а столбец 1,-5,3
Причем не должна переставляться только 1(наименьший полож.элемент), а остальные элементы заменяемых строк и столбцов могут переставляться как угодно, т.е. 4,7,1 а столбец 1,3,-5
В этом суть не меняется исходя из условия задачи. Там в какой последовательности должны идти переменные - не указано.
Можно устанавливать наименьшее положительное число в любую ячейку.
При расчете это число должно находиться где бы оно не стояло и от него начинался отсчет замены.
И так можно решить другие квадратные матрицы любого объема.
Частный случай(пример 1):
uses crt;
const
(*Не ставьте только n=1 и по 1 элементу. В программе можно сделать на это защиту.*)
n=3; {Кол.элементов последовательности}
Matrix:array[1..3,1..3] of integer=((3,-5,1),(2,6,4),(-4,8,7));
var
i,j,ii,jj: integer; {счетчики}
Min:integer; {минимальный положительный элемент в массиве}
stolb,strok:integer; {столбец и строка}
strMas:array[1..n] of integer; {элементы массива строки}
stbMas:array[1..n] of integer; {элементы массива столбца}
kolstb,kolstr:integer; {кол. столбцов и строк в матрице}
obmen:integer; {переменная обмена}
BEGIN
ClrScr;
Min:=0;
for i:=1 to n do begin
for j:=1 to n do begin
if (Matrix[i,j]<>0) and (Matrix[i,j]>0) then begin
Min:=Matrix[i,j];
end;
end;
end;
if Min=0 then begin
writeln('Элементы массива - отрицательные!');
readln;
halt;
end;
writeln(' ':10,'Матрица');
{===== Выводим матрицу и находим наименьший положительный ее элемент}
for i:=1 to n do begin
for j:=1 to n do begin
if (Min>=Matrix[i,j]) and (Matrix[i,j]>0) then begin
Min:=Matrix[i,j];
strok:=i;
stolb:=j;
end;
write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
end;
writeln
end;
{readln;}
writeln('Минимальное положительное в матрице число -> ',Min);
writeln('Строка при мини. положительном числе -> ',strok);
writeln('Столбец при мини. положительном числе -> ',stolb);
writeln(' ---------------------------');
for i:=1 to n do begin
for j:=1 to n do begin
{================= Определяем и записываем строки}
if i=strok then begin
inc(ii);
strMas[ii]:=Matrix[strok,j];
end;
{================= Определяем и записываем столбцы}
if j=stolb then begin
inc(jj);
stbMas[jj]:=Matrix[i,stolb];
end;
end;
end;
kolstb:=n;
kolstr:=n;
writeln('Количество строк -> ',kolstr);
writeln('Количество столбцов -> ',kolstb);
{===============================================}
write('Было - строка: ');
for ii:=1 to n do begin
write(strMas[ii],' ');
end;
writeln;
{======================= Показ столбцов ==============}
write('Было - столбец: ');
for jj:=1 to n do begin
write(stbMas[jj],' ');
end;
writeln;
writeln(' ---------------------------');
{=====================================================}
{===================== Обмен строк =========}
for ii:=1 to n do begin
if ii=stolb then begin
obmen:=strMas[strok];
strMas[strok]:=strMas[ii];
strMas[ii]:=obmen;
end;
end;
{===================== Обмен столбцов =========}
for jj:=1 to n do begin
if jj=strok then begin
obmen:=stbMas[stolb];
stbMas[stolb]:=stbMas[jj];
stbMas[jj]:=obmen;
end;
end;
{========================= Показ столбцов ======================}
write('Стало - столбец: ');
for ii:=1 to n do begin
write(strMas[ii],' ');
end;
writeln;
{======================= Показ строк ==============}
write('Стало - строка: ');
for jj:=1 to n do begin
write(stbMas[jj],' ');
end;
writeln;
writeln(' ---------------------------');
{=====================================================}
for i:=1 to n do begin
for j:=1 to n do begin
if i=strok then begin
Matrix[strok,j]:=stbMas[j];
end;
if j=stolb then begin
Matrix[i,stolb]:=strMas; {здесь пишется strMas(i) - только скобки квадратные }
end; {тег i не дает их писать}
end;
end;
for i:=1 to n do begin
for j:=1 to n do begin
write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
end;
writeln
end;
writeln('Продолжение - ENTER(ВВОД)');
readln;
END.
Можно увеличить статический массив. Можно переставить элементы массива.
При увеличение нужно добавить в массив еще элементы и изменить n
Даю пример расчета - полученный результат.
-
А вот теперь когда алгоритм ясен можно сделать и автоматическое построение матрицы
Создание алгоритма не вызывает проблем.
Не ставьте только n1=1, хотя в программе можно сделать на это защиту.
Пример 2
uses crt;
const
n1=9;
{ где n1 =4,9,25,36,49 и т.д. квадраты}
var
n:integer;
i,j,ii,jj,m: integer; {счетчики}
Min:integer; {минимальный положительный элемент в массиве}
stolb,strok:integer; {столбец и строка}
strMas:array[1..100] of integer; {элементы массива строки}
stbMas:array[1..100] of integer; {элементы массива столбца}
kolstb,kolstr:integer; {кол. столбцов и строк в матрице}
obmen:integer; {переменная обмена}
kor:integer; {целое число из корня n1}
k:array[1..n1] of integer; {Массив случайных чисел}
Matrix:array[1..100,1..100] of integer; {Массив матрицы - можно взять и больше}
BEGIN
ClrScr;
if Trunc(sqrt(n1))<>sqrt(n1) then begin
writeln('Вводите целое число и т.д 4,9,25,36,49 ');
readln;
halt
end;
{==================== Находим корень =============}
kor:=TRUNC(sqrt(n1));
n:=kor;
writeln('Дана последовательность ',n1,' чисел');
(* RANDOMIZE; {Менять последовательность}*) {можно разремачить}
Min:=0;
for m:=1 to n1 do begin
k[m]:=RANDOM(-m);
k[m]:=k[m] div 1000;
if (k[m]<>0) and (k[m]>0) then Min:=k[m];
write(k[m],' ')
end;
if Min=0 then begin
writeln('Элементы массива - отрицательные!');
readln;
halt;
end;
{========== Создаем матрицу исходя из получ. квадр. корня ================}
i:=1;
j:=0;
for m:=1 to n1 do begin
if j=kor then begin
j:=0;
i:=i+1
end;
j:=j+1;
Matrix[i,j]:=k[m];
end;
writeln;
{===== Выводим матрицу и находим наименьший положительный ее элемент}
writeln(' ':10,'Матрица');
for i:=1 to n do begin
for j:=1 to n do begin
if (Min>=Matrix[i,j]) and (Matrix[i,j]>0) then begin
Min:=Matrix[i,j];
strok:=i;
stolb:=j;
end;
write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
end;
writeln
end;
readln;
writeln('Минимальное положительное в матрице число -> ',Min);
writeln('Строка при мини. положительном числе -> ',strok);
writeln('Столбец при мини. положительном числе -> ',stolb);
writeln(' ---------------------------');
for i:=1 to n do begin
for j:=1 to n do begin
{================= Определяем и записываем строки}
if i=strok then begin
inc(ii);
strMas[ii]:=Matrix[strok,j];
end;
{================= Определяем и записываем столбцы}
if j=stolb then begin
inc(jj);
stbMas[jj]:=Matrix[i,stolb];
end;
end;
end;
kolstb:=n;
kolstr:=n;
writeln('Количество строк -> ',kolstr);
writeln('Количество столбцов -> ',kolstb);
{===============================================}
write('Было - строка: ');
for ii:=1 to n do begin
write(strMas[ii],' ');
end;
writeln;
{======================= Показ столбцов ==============}
write('Было - столбец: ');
for jj:=1 to n do begin
write(stbMas[jj],' ');
end;
writeln;
writeln(' ---------------------------');
{=====================================================}
{===================== Обмен строк =========}
for ii:=1 to n do begin
if ii=stolb then begin
obmen:=strMas[strok];
strMas[strok]:=strMas[ii];
strMas[ii]:=obmen;
end;
end;
{===================== Обмен столбцов =========}
for jj:=1 to n do begin
if jj=strok then begin
obmen:=stbMas[stolb];
stbMas[stolb]:=stbMas[jj];
stbMas[jj]:=obmen;
end;
end;
{========================= Показ столбцов ======================}
write('Стало - столбец: ');
for ii:=1 to n do begin
write(strMas[ii],' ');
end;
writeln;
{======================= Показ строк ==============}
write('Стало - строка: ');
for jj:=1 to n do begin
write(stbMas[jj],' ');
end;
writeln;
writeln(' ---------------------------');
{=====================================================}
for i:=1 to n do begin
for j:=1 to n do begin
if i=strok then begin
Matrix[strok,j]:=stbMas[j];
end;
if j=stolb then begin
Matrix[i,stolb]:=strMas; {здесь пишется strMas(i) - только скобки квадратные }
end; {тег i не дает их писать}
end;
end;
for i:=1 to n do begin
for j:=1 to n do begin
write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
end;
writeln
end;
writeln('Продолжение - ENTER(ВВОД)');
readln;
END.
Алгоритм можно применить и не только для квадратных матриц
В частном(примере 1) можно варьировать кол. элементов и n
Даю примеры расчета - данные результата.
Ну вот и все.
С уважением к участникам ТЕМЫ
LEND
-
Люди.. а мне случаем не поможите? а то чет ни как не вьеду:
мож увидев готовую картину ченить и пойму.
вобщем задача такая:
"Дана матрица А(ввод элементов матрицы осуществляется с клавиатуры). Вывести на экран строку, сумма элементов которой больше."
считаете сумму элементов каждой строки и смотрите кто больше, например:
a(mxn) - исходный массив
b(1xn) - искомая строка
smax = 0; - сумма элементов искомой строки
for i = 1 to m
{
s = 0;
for ii = 1 to n
{
s = s + a(i, ii);
}
if s > smax then
{
smax = s;
for q= 1 to n
{
b(1, q) = a(i, q)
}
}
}
вы, правда, не сказали на каком языке надо, но основная идея такая...
-
Люди.. а мне случаем не поможите? а то чет ни как не вьеду:
мож увидев готовую картину ченить и пойму.
вобщем задача такая:
"Дана матрица А(ввод элементов матрицы осуществляется с клавиатуры). Вывести на экран строку, сумма элементов которой больше."
считаете сумму элементов каждой строки и смотрите кто больше, например:
a(mxn) - исходный массив
b(1xn) - искомая строка
smax = 0; - сумма элементов искомой строки
for i = 1 to m
{
s = 0;
for ii = 1 to n
{
s = s + a(i, ii);
}
if s > smax then
{
smax = s;
for q= 1 to n
{
b(1, q) = a(i, q)
}
}
}
вы, правда, не сказали на каком языке надо, но основная идея такая...
Идею я понял.. язык - турбопаскаль.. а вот как эту идею в жизнь воплотить?
-
2Lend,доброго времени суток и Вам. Можно немного критики и обсуждения касаемо предложенного кода?
1.
Min:=0;
for i:=1 to n do begin
for j:=1 to n do begin
if (Matrix[i,j]<>0) and (Matrix[i,j]>0) then begin
Min:=Matrix[i,j];
end;
end;
end;
if Min=0 then begin
writeln('Элементы массива - отрицательные!');
readln;
halt;
end;
writeln(' ':10,'Матрица');
{===== Выводим матрицу и находим наименьший положительный ее элемент}
for i:=1 to n do begin
for j:=1 to n do begin
if (Min>=Matrix[i,j]) and (Matrix[i,j]>0) then begin
Min:=Matrix[i,j];
strok:=i;
stolb:=j;
end;
>>>>Зачем разделять проверку на наличие элемента больше 0 и нахождение наименьшего из найденных элементов больше 0??? Лишние строки кода, ибо можно было сделать так:
{===== Выводим матрицу и находим наименьший положительный ее элемент}
for i:=1 to n do begin
for j:=1 to n do begin
if (Min>=Matrix[i,j]) and (Matrix[i,j]>0) then begin
Min:=Matrix[i,j];
strok:=i;
stolb:=j;
end;
if Min=0 then begin
writeln('Элементы массива - отрицательные!');
readln;
halt;
end;
__________________________________________________
for i:=1 to n do begin
for j:=1 to n do begin
if (Matrix[i,j]<>0) and (Matrix[i,j]>0) then begin
Min:=Matrix[i,j];
end;
end;
end;
__________________________________________________
ИМХО - лишнее.
2.
for i:=1 to n do begin
for j:=1 to n do begin
{================= Определяем и записываем строки}
if i=strok then begin
inc(ii);
strMas[ii]:=Matrix[strok,j];
end;
{================= Определяем и записываем столбцы}
if j=stolb then begin
inc(jj);
stbMas[jj]:=Matrix[i,stolb];
end;
end;
end;
>>>>А зачем инкапсуляция? (вернее даже вообще нужно использование ii???) И зачем делать ставить условие на равенство i и strok,stolb? Мы уж знаем индексы элемента. Лишнее действие...
3. При включеном randomize; числа при генерации будут ВСЕГДА разными. Если randomize не прописан, то числа одинаковые при каждом запуске программы ;) Зачем вообще код такой по генерации? Зачем изобретать велосипед? Вот эти операции с корнями и проч.... не понимаю...
СОББСНО, ВОПРОС КО ВСЕМ: ПОЧЕМУ НЕ УСТРОИЛ КОД МОЕЙ ПРОГРАММЫ?:) Где в нем ошибка и зачем такое бессмысленное количество строк кода? Все просто и не надо усложнять жизнь ;)
Пису пис ;)
-
Идею я понял.. язык - турбопаскаль.. а вот как эту идею в жизнь воплотить?
uses Crt;
var
a:array[1..10,1..10] of Integer;
im,i,j:Byte;
mm,m:Integer;
begin
ClrScr;
for i:=1 to 10 do
for j:=1 to 10 do
begin
Write('Введите элемент массива ',i,',',j,': ');
Read(a[i,j]);
end;
for i:=1 to 10 do begin
m:=0;
for j:=1 to 10 do
begin
m:=m+a[i,j];
end;
if m>mm then begin
mm:=m;
im:=i;
end;
end;
WriteLn('Сумма элементов: ', m);
WriteLn('Номер строки: ',im);
for j:=1 to 10 do Write(a[im,j]:3);
ReadKey;
end.
ПыСы. Чот я жоско так 10х10 массив забил [[china]] <:/
-
Спасибо , Faust! теперь врубился..
-
Спасибо , Faust! теперь врубился..
Не за что =)
-
Faust
Я сейчас перепесал и запустил твой код
и вот что получил.
Твой код указан в твоем посту. Я его и взял.
================== Трехмерная матрица ================
1 пример
51 3 72
71 33 71 Наименьшее число 3 1строка, 2 столбец
72 44 30 1 строка - 51 3 72
2 столбец - 3 33 44
3 33 44
71 3 71 Должно быть
72 72 30 по строке - 33 3 44
3 || 1:2 по столбцу - 3 51 72
Получаем при замене
по строке - 3 33 44 - это правильно
а по столбцу 33 3 72
где число 51
Причем если ты не оставляешь на месте
наименьшее число - значит затираешь цифру
2 пример
95 85 22
15 75 10 Наименьшее число 10 2строка, 3 столбец
27 60 62 2 строка - 15 75 10
3 столбец - 22 10 62
95 85 15
22 10 62 Должно быть
27 60 10 по строке - 15 10 75
10 || 2:3 по столбцу - 22 62 10
Получаем при замене
по строке - 22 10 62 - это правильно
а по столбцу 15 62 10
где число 75
Опять же если ты не оставляешь на месте
наименьшее число - значит затираешь цифру
================== Четырехмерная матрица ================
64 30 95 89
78 25 44 59
3 62 54 23
29 89 63 41
Наименьшее число 3 3строка, 1 столбец
3 30 95 89 3 строка - 3 62 52 23
62 25 44 59 1 столбец - 64 78 3 29
54 78 3 29
23 89 63 41 Должно быть
3 || 3:1 по строке - 3 64 78 29
по столбцу - 62 54 3 23
Получаем при замене
по строке - 54 78 3 29
а по столбцу 3 62 54 23
где число 64
Опять же если ты не оставляешь на месте
наименьшее число - значит затираешь цифру
49 31 42 60
98 2 35 93
1 6 59 82
9 42 77 39
1 31 42 60
6 2 35 93
59 98 1 9
82 42 77 39
1 || 3:1
И так большинство матриц
Я не проверял выше, но думаю что то же так будет.
И как ты думаешь?
Но в матрице вместе с положительными цифрами могут быть и отрицательные.
И как ты на это смотришь.
Но ты сделал работу. Ты должен сам разобраться в своем коде. Скажу только одно. Твоя ошибка заключается в том, что ты не понял что наименьшее положительное число не должно перемещаться, а должно находится на том же месте.
Поэтому твой код неверен, где - должен разобраться сам. Посиди и подумай.
Но я знаю - ты парень граммотный и решишь эту задачу. Я уверен что ты с этим справишься.
И у меня не всегда получается. Поэтому прежде чем показывать код, я его тщательно проверяю.
А насчет критики - каждый пишет так как может, лишь бы результаты были верны.
С уважением
LEND
2Sht?ih(S_РФ)
Я также предлагаю свое решение задачи
Вчера эту задачу не увидел, т.к. прочитал не все посты в этой ТЕМЕ.
Заметил только сейчас. Сел и написал тем боле что задачка уж очень легкая.
Я написал 3 способа решения, но так Faust уже дал решение я приведу один из них
uses crt;
const
nstr=2; {Кол. строк в матрице}
nstb=3; {Кол. столбцов в матрице}
var
i,j: integer; {счетчики}
Max:integer; {Максимальная сумма в матрице по строкам}
s,st:integer; {s-сумма по строке, st - строка}
Matrix:array[1..nstr,1..nstb] of integer; {Массив матрицы A}
BEGIN
ClrScr;
if (nstr=1) or (nstb=1) then begin
writeln('Недопустимое число для составления матрицы');
halt;
end;
{=========== Ручной ввод с клавиатуры в матрицу A(nstr,nstb) ==========}
writeln(' ':10,'Матрица A');
for i:=1 to nstr do begin
for j:=1 to nstb do begin
write('Введите элементы строки ',i,' в матрицу A(',nstr,',',nstb,') ->');
read(Matrix[i,j]);
end;
end;
writeln('Продолжение - ENTER(ВВОД)');
readln;
{=== Вывод элементов матрицы на дисплей =========}
for i:=1 to nstr do begin
for j:=1 to nstb do begin
write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
end;
writeln;
end;
writeln('Количество строк -> ',nstr);
writeln('Количество столбцов -> ',nstb);
writeln(' ---------------------------');
{=== Запись Максимальной суммы и строки ======}
for i:=1 to nstr do begin
s:=0;
for j:=1 to nstb do begin
s:=s+Matrix[i,j];
end;
writeln('Строка матрицы -> ',i,' сумма по строке -> ',s);
if i=1 then begin
Max:=s;
st:=i;
end
else begin
if Max<s then begin
Max:=s; {Максимальная сумма в матрице по строке}
st:=i; {Строка матрицы где найдена максимальная сумма}
end;
end;
end;
writeln('Максимальная сумма матрицы A=',Max,' находится в строке ',st);
writeln('Продолжение - ENTER(ВВОД)');
readln;
END.
-
2LEND, те пропадающие элементы пропадают по той причине, что сначала я забиваю в новой матрице столбец, а потом строку=) Если сделать наоборот - теряться будет элемент из строки первичной матрицы =) В задании указано поменять местами, про сохранение элемента ничего не сказано. Как вариант - подставлять по уже имеющимся координатам минимального элемента сам этот элемент, то есть возвращать его на место И ВСЕ РАВНО=) Будем терять элементы. А почему? А потому что при такой замене адресация тоже меняется и i <> j. Не потерять ни одного элемента можно лишь тогда, когда эти элементы лежат на главной и побочной диагонали, о чем писал mr Doctor ...
По поводу задачи 2, что-то не учел, что матрица может быть и не квадратной=)
ПыСы. Приятно пообщаться с адекватным, грамотным человеком=)
-
уххх скоко темка не обновлялась....
прощу помощи! на ночь глядя:
надо пощитать y=(ctg|a|)^(1/7)
знаю что где-то тупо накосячил,но изза того что точно не знаю функцию экспоненты,разобрацо не могу...
program lab;
var x,y,a:real;
begin
writeln('Вводим число');
readln(x);
a:=(x/2)+(x*x/4)+(x*x*x/8);
y:=EXP(Ln (cos(abs(a)))/(sin(abs(a))))*7);
writeln(y);
readln;
end.
если добавить библиотеку crt то изначально выдает деление на ноль...
а так вроде считает но только с целыми значениями,хотя интежер не стоят...
есть мысль дописать еще условие if (a>0) then y:=EXP(ln(ctg(a))*7)
тогда еще раз присвоение делать...
скажите точно мне синтаксис эспоненты мб там деление...=\
надеюсь на Вашу помощь,спасибо:)
-
Насколько мне помнится, в библиотеке CRT бага деления на ноль в турбопаскале возникает на всех компах быстрее 486. Посмотри вот здесь (http://www.i2r.ru/static/376/out_10922.shtml)
-
прощу помощи! на ночь глядя:
надо пощитать y=(ctg|a|)^(1/7)
a:=(x/2)+(x*x/4)+(x*x*x/8);
y:=EXP(Ln (cos(abs(a)))/(sin(abs(a))))*7);
скажите точно мне синтаксис эспоненты мб там деление...=\
Умножение там. Но степень 1/7, значит надо умножать на 1/7 или делить на 7! Да и со скобками непорядок (лишние)
Т.е.
y:=exp(ln(cos(abs(a))/sin(abs(a)))/7);
Проверку на а<0 не нужно, там abs есть, а на а=0 сделать можно - там у функции разрыв.
-
ONLINE
y=(ctg|a|)^(1/7)
Это степенная функция.
Функция возвращает значение ctg|a| в степени 1/7 при ctg|a|
или EXP((1/7)*Ln(ctg|a|)
или EXP((1/7)*Ln(cos|a|/sin|a|)
Правильно ОНА пишется программно на ПАСКАЛЕ
y:=EXP((1/7)*Ln(cos(abs(a))/sin(abs(a))));
А вот тут WIZARD правильно написал:
Проверку на а<0 не нужно, там abs есть, а на а=0 сделать
можно - там у функции разрыв.
Возникает ошибка 200(Divizion by zero) - деление на нуль
Программа выглядит так:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
program lab;
{uses crt;}
var x,y,a:real;
begin
writeln('Вводим число');
readln(x);
a:=(x/2)+(x*x/4)+(x*x*x/8);
a:=(x/2)+EXP(2*ln(x))/4+EXP(3*ln(x))/8; {Можно так}
(*a:=0 {Если хочешь разделить на ноль и УВИДЕТЬ номер ошибки 200 и сообщение}*)
(*y:=EXP(Ln(cos(abs(a)))/(sin(abs(a))))*7); {Неправильно}*)
y:=EXP( (1/7)* Ln( cos(abs(a))/sin(abs(a)) )); {Правильно}
writeln(y:10:5);
readln;
end.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Без CRT
При
10 - 0.92000
11 - 0.91965
12 - 1.13570
14 - 1.77897
..........
20 - 0.93339
с CRT то же самое
При некоторых значениях ВВОДА x
возникает ошибка 207(Invalid floating point operation)
Недопустимая операция с плавающей запятой
Возможна причина:
Аргумент функции LN(логарифм) равен нулю или имеет отрицательное значение
-
LEND , Wizard и _Atheist_ ОГРОМНЕЙШЕЕ СПАСИБО!
разобрался вроде :-:)
-
Люди добрые помогите решить задачку.
Текст задачки в прикрепленом файле
-
Люди добрые помогите решить задачку.
Текст задачки в прикрепленом файле
Задачу та сделать можно. Но вот странно. У тебя "а" начинается с индексом 0 и заканчивается 0... Хотя ты уменьшаешь n на -1. И от куда брять значения q и S? Я так понимаю это геометрическая последовательность?
-
Люди добрые помогите решить задачку.
Текст задачки в прикрепленом файле
Задачу та сделать можно. Но вот странно. У тебя "а" начинается с индексом 0 и заканчивается 0... Хотя ты уменьшаешь n на -1. И от куда брять значения q и S? Я так понимаю это геометрическая последовательность?
тоже смутило это обстоятельство,завтра подойжу-узнаю точно, а q и S вводить с клавиатуры
-
прояснил ситуацию, как мне сказали "а" нулевое в конце получается путем "а" с индексом n-n, а это 0
-
ну хто поможет, к завтра нуна
-
Очень прошу помогите решить задачу...
-
Ну вроде работает. Задача для Оператора007. Кстати, не вводи "к" больше 100... Там массивы всего на 100 элементов.
program Z1;
uses CRT;
var
a,b: array [1..100] of real;
q,s,j, sum: real;
k1,k2: integer;
begin
clrscr;
write('Введите S: ');
readln(s);
write('Введите j: ');
readln(j);
write('Введите q: ');
readln(q);
write('Введите количество эдементов (k): ');
readln(k1);
writeln;
k2:=1;
a[k2]:=1;
b[k2]:=1;
repeat
k2:=k2+1;
a[k2]:=q*sin(b[k2-1])+s*cos(a[k2-1]);
b[k2]:=j*sqr(a[k2-1])+b[k2-1];
until k2>k1;
k2:=1;
sum:=sum+a[k1]*b[k2];
repeat
k1:=k1-1;
k2:=k2+1;
sum:=sum+a[k1]*b[k2];
until k1=0;
writeln;
writeln ('Сумма: ',sum:4:2);
readln;
end.
-
Ну вроде работает. Это первая задача.
спасибо большое=) у мя походу паскаль глюченый ошибку выдает Range chek error :'(
-
Ну вроде работает. Это первая задача.
спасибо большое=) у мя походу паскаль глюченый ошибку выдает Range chek error :'(
Не знаю че у тебя за косяк, но я задачу прямо с форума в паскаль засунул, все работает, косяк только с кодировкой русского теста.
-
Очень прошу помогите решить задачу...
тут вообщем то не сложно..главное формулы помнить..а я позабыл :-o
недавно что-то типо того решал...
-
Поздно приеду сегодня! Лови ответ!
program Project1;
const
x=2828.4E-3;
y=4.1093;
z=-7*sqrt(pi)/9.5;
var
a,b,q:real;
begin
//x^y=exp(y*ln(x));
//Arccos(z)=-i*Ln(z+sqrt(z^2-1));
a:=(1+y)*(x*exp(1/2.5*ln(x+3))+(y/(x*x+4)))/(exp(-x-2)+1/(x*x+4));
b:=(1+cos(a+2))/(x*x*x*x/2+sqr(sin(z)));
q:=ln(abs(a+sqrt(b)));
q:=ln(q+sqrt(q*q-1));
writeln('-i *',q);
end.
-
Насколько мне помнится, в библиотеке CRT бага деления на ноль в турбопаскале возникает на всех компах быстрее 486. Посмотри вот здесь (http://www.i2r.ru/static/376/out_10922.shtml)
только до целиков... можно использовать double тогда нормально пашет)
-
помогите пожалуйста с задачками
в задачах (кроме номера 8 ) сначала дается общее условие, а в конце уже конкретная задача.
-
помогите пожалуйста с задачками
в задачах (кроме номера 8 ) сначала дается общее условие, а в конце уже конкретная задача.
помогите, плииз, хотя бы по одной с каждого листа.. или просто одну
А теперь красавицы, напишите хотя бы по одной задачи с каждого листа печатным текстом... А то трудно подобрать ключ расшифровки к вашиму шрифту.
-
Составить подпрограмму, вычисляющую значение TRUE,если количество положительных элементов исходного одномерного массива больше количества его отрицательных элементов и значение FALSE в противном случае.
Если количество положительных элементов в заданном массиве В больше, чем отрицательных, подсчитать сумму индексов положительных элементов, иначе определить сумму отрицательных элементов
В=(2,5; -0,006; 45,92; 0; 2,74; -15; 51,7)
Задача 8
Создать функцию, вычисляющую количество строк матрицы А, состоящей из m строк и n столбцов, сумма элементов каждой из которых меньше нуля. Использовать функцию для вычисления указанных величин в следующих 2х матрицах: матрице С из 4х строк и 5 столбцов и матрице D из 5 строк и 3 столбцов
Задача 9
Составить процедуру, формальными параметрами которой являются 2 массива В1,В2,?Вn;С1,С2,Сm либо один из них, или матрица А из n строк и n столбцов.
Составленную процедуру использовать в основной части программы для обработки фактических массивов или матрицы.
Массив Р1,Р2,?Рn Рi=1,если в i-той строке матрицы А положительных элементов больше, чем отрицательных, иначе Рi=0
Задача 10
Разработайте программу, создав предварительно функцию или процедуру по условию задачи. Приведенные числа используйте для задания, типов данных и размеров массивов при вводе-выводе
Составить подпрограмму нахождения индексов максимального элемента матрицы. Используя такую подпрограмму найти скалярное произведение строки на столбец заданной квадратной матрицы В с номерами, соответственно равными индексам ее максимального элемента
-0,0004 2,5 6,21
В= 19 -45,1 0
-2,75 5,7 12,9
Составить процедуру, формальными параметрами которой являются 2 массива В1,В2,?Вn;С1,С2,Сm либо один из них, или матрица А из n строк и n столбцов.
Составленную процедуру использовать в основной части программы для обработки фактических массивов или матрицы.
Массив Р12,Р2,?Рm полученный из массива С1,С2,?Сm по правилу (формула с суммой на первом листе, хз как напечатать)
-
Сама первая задача для Дюны.
-
Знаю,что элементарщина,но в паскале 0 [[0]]
1)Известен процент преступлений за предыдущий и последующие годы. За предыдущий год процент колеблется от 5 до 20,а последующий от 10 до 25. Вывести на экран город с наименьшим количеством преступлений и с наибольшим
2)Известны данные о выпуске продукции 5 предприятий за 10 лет. У какого предприятия максимальный выпуск продукции за 10 лет. В каком году у каждого предприятия был максимальный выпуск продукции (интервал от [30..80]
Зы: Хотя бы 1 до вторника :-\
-
Задаяа ?2 для Wait. Вроде работает.
-
(Раз тема не закрыта. Продолжу.)
Помогите пожалуйста. Чтобы сдать экзамен надо решить задачу в ТП :(
Сама в этом плохо разбираюсь.
Вот условие задачи:
Задача 3 ?Автомобиль преступников?.
Брауну, Джонсу и Смиту предъявлено обвинение в соучастии в ограблении банка. Похитители скрылись на поджидавшем их автомобиле. На следствии Браун показал, что преступники скрылись на синем ?Бьюике?; Джонс сказал, что это был чёрный ?Крайслер?; Смит утверждал, что это был ?Форд Мустанг?, но ни с коем случае не синий. Стало известно, что, желая запутать следствие, каждый из них указал правильно либо марку автомобиля, либо её цвет. Какой марки и какого цвета был автомобиль?
-
(Раз тема не закрыта. Продолжу.)
Помогите пожалуйста. Чтобы сдать экзамен надо решить задачу в ТП :(
Сама в этом плохо разбираюсь.
Вот условие задачи:
Задача 3 ?Автомобиль преступников?.
Брауну, Джонсу и Смиту предъявлено обвинение в соучастии в ограблении банка. Похитители скрылись на поджидавшем их автомобиле. На следствии Браун показал, что преступники скрылись на синем ?Бьюике?; Джонс сказал, что это был чёрный ?Крайслер?; Смит утверждал, что это был ?Форд Мустанг?, но ни с коем случае не синий. Стало известно, что, желая запутать следствие, каждый из них указал правильно либо марку автомобиля, либо её цвет. Какой марки и какого цвета был автомобиль?
Я чего то не особо пойму причем тут эта задача и турбо паскаль?
-
если Смит сказал, что машина была не синяя, и Джонс сказал, что она черная, т.е. тоже не синяя, значит Браун нагнал про синий цвет. (т.е. авто было черное, т.к. других цветов в задаче не дано), а т.к. он нагнал про цвет, то значит назвал правильную марку. т.е. Бьюик.
вот такая картинка пришла в голову (буквы по строчкам - авто, по столбцам - цвет)
Б К М
С СБ СК СМ
Ч ЧБ ЧК ЧМ
Ч ЧБ ЧК ЧМ
не знаю зачем, правда... ))
в общем элементы по диагонали однозначно не подходят по условию.
А похдодит тот, который отличается от любого диагонального 1 буквой, и только одной.
т.о. делаем полный перебор (2 вложенных цикла), и в теле вложенного цикла смотрим, насколько элемент отличается от каждого диагонального. если отличие только одно - решение найдено. [[happy]]
... эх... Сказал бы Смит, что мустанг был красный, гугляли бы все трое на свободе)))
-
если Смит сказал, что машина была не синяя, и Джонс сказал, что она черная, т.е. тоже не синяя, значит Браун нагнал про синий цвет. (т.е. авто было черное, т.к. других цветов в задаче не дано), а т.к. он нагнал про цвет, то значит назвал правильную марку. т.е. Бьюик.
вот такая картинка пришла в голову (буквы по строчкам - авто, по столбцам - цвет)
Б К М
С СБ СК СМ
Ч ЧБ ЧК ЧМ
Ч ЧБ ЧК ЧМ
не знаю зачем, правда... ))
в общем элементы по диагонали однозначно не подходят по условию.
А похдодит тот, который отличается от любого диагонального 1 буквой, и только одной.
т.о. делаем полный перебор (2 вложенных цикла), и в теле вложенного цикла смотрим, насколько элемент отличается от каждого диагонального. если отличие только одно - решение найдено. [[happy]]
... эх... Сказал бы Смит, что мустанг был красный, гугляли бы все трое на свободе)))
Там надо написать типа: если СИНИЙ-то не Бьюик, если Черный- то не Крайслер, если синий -то мустанг ( что-то такое кажется).
как это записать в програме, чтобы она выдавала правильный ответ....