Помощь - Поиск - Пользователи - Календарь
Полная версия: двумерный массив
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
KATYSHA
Помогите плиз,вообще не в зуб ногой mega_chok.gif ...............я скоро повешусь.Помогите пожалуйста решить задачу: дана матрица вещественных чисел.заменить максимальный элемент в каждой строке суммой положительных элементов,а минимальный-суммой отрицательных.

Заранеее ОГРОМНОЕ СПАСИБО give_rose.gif
volvo
Самый простой вариант:
const
m = 3; { число строк }
n = 4; { число столбцов }

var
a: array[1 .. m, 1 .. n] of real;
i_min, i_max, i, j: integer;
sum_plus, sum_minus: real;
begin
{ ввод матрицы }
for i := 1 to n do
for j := 1 to n do begin
write('a[', i:3, j:3, '] = '); readln(a[i, j]);
end;


for i := 1 to m do begin

sum_plus := 0; sum_minus := 0;
i_min := 1; i_max := 1;
for j := 1 to n do begin
if a[i, j] < a[i, i_min] then i_min := j;
if a[i, j] > a[i, i_max] then i_max := j;

if a[i, j] < 0 then sum_minus := sum_minus + a[i, j]
else sum_plus := sum_plus + a[i, j];
end;
a[i, i_min] := sum_minus;
a[i, i_max] := sum_plus;

end;

{ вывод матрицы }
for i := 1 to n do begin
for j := 1 to n do
write(a[i, j]:6:2);
writeln;
end;

end.
KATYSHA
Цитата(volvo @ 16.11.2005 19:27)
Самый простой вариант:


Спасибо огромное!!! !priva1.gif
KATYSHA
А как со сроками сделать и файлами?Помоги ещё разок пожалуйста. blush.gif
1.
Дана строка символов.Группы символов,разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя,будем называть словами.получить логический вектор,элемент которого истина,если в слове четное кол-во символов и ложь-впротивном случае.
2.
Дан файл вещественных чисел.Если среднее арифметическое его компонент превышает значение максимального эл-та файла,удалить из него все отрицательные эл-ты,в противном случае- удалить все положительные.

ЗАРАНЕЕ СПАСИБО ОГРОМНОЕ ПРЕОГОРОМНОЕ!!!!! !flowers.gif
klem4
Эхх, я тут посмотрел, на форуме начались дни добрых дел и выкладывания полных решений, так что держи :
lol.gif
про строки
uses crt;

const

limits = [#0..#32,'.',',',':',';','!','?','"'];
type

TWords = array[1..40] of string;
TLogic = array[1..40] of boolean;

var
text : string;
words : TWords;
logic : TLogic;

function GetWords(s : string; var w : TWords; var L : TLogic) : byte;
var
i,back,n : byte;
begin
i := 1;
n := 0;
while(i<=length(s)) do begin
while(i<=length(s)) and (s[i] in limits) do
inc(i);
if i<=length(s) then begin
back := i;
while(i<=length(s)) and not(s[i] in limits) do
inc(i);
inc(n);
w[n] := copy(s, back, i-back);
L[n] := not(odd(length(w[n])));
end;
end;

GetWords := n;
end;

var
i,j : byte;

begin

clrscr;

write('text = '); readln(text);

j := GetWords(text, words, logic);

for i := 1 to j do writeln(words[i],' ', logic[i]:10);

readln;

end.
hiv
Цитата(KATYSHA @ 16.11.2005 21:57)
2. Дан файл вещественных чисел.Если среднее арифметическое его компонент превышает значение максимального эл-та файла,удалить из него все отрицательные эл-ты,в противном случае- удалить все положительные.

Cреднее арифметическое компонентов файла всегда будет меньше или равно значению максимального эл-та файла. Может имелось в виду последнего элемента файла?
KATYSHA
Спасибо огромное!!!! give_rose.gif А можно узнать кем ты работаешь??? kiss2.gif

Добавлено (через 4 минуты):
Цитата(hiv @ 17.11.2005 8:23)
Cреднее арифметическое компонентов файла всегда будет меньше или равно значению максимального эл-та файла. Может имелось в виду последнего элемента файла?


Я переписала задание как есть wacko.gif
klem4
Цитата
Я переписала задание как есть


Тогда решение будет бессмысленно ... Уточни задание у препода.
KATYSHA
препод говорит,что всё правильно и думать надо blink.gif
volvo
KATYSHA, это невозможно...
Когда среднее арифметическое N элементов максимально? Когда все эти элементы одинаковы, так?

Допустим, все элементы одинаковы и равны "Х", тогда и среднее арифметическое равно "X". РАВНО, но не БОЛЬШЕ !!! Увеличим один элемент на значение "Y", тогда ср. арифметическое увеличится на Y/N, что заведомо меньше чем Y... Так что ср. арифметическое просто НЕ МОЖЕТ быть больше макс. элемента массива...

Так что пускай твой препод сам пошевелит тем, что у него вместо мозгов, и даст другое задание или переформулирует это...
KATYSHA
Кстати,эта программка не работает,klim4(которую ты вначале писал мне) nea.gif Когда вводишь значения,они как бы по кругу идут...............что-то там не то.И объясни,пли з,что за строка вначале limits и почему там в скобках с решеткой числа???
volvo
To: KATYSHA
Пример значений, которые вводишь, приведи... Ненадо просто так говорить, что программа "не работает"... Тестируем мы программы все-таки... dry.gif
KATYSHA
Ну программа то работает,но как-то неправильно.там не должно быть столько значений,когда запускаешь её.Там появляется очень много векторов
volvo
Замени основную программу вот на такую:
begin
clrscr;
write('text = '); readln(text);
j := GetWords(text, words, logic);
for i := 1 to j do write(logic[i]:6);
writeln;

readln;
end.

получишь распечатку только "логического" вектора...
KATYSHA
Спасибо,попробую.Если не так я скажу или покажу примерную программу,потому что я просто не могу объяснить как именно она должна выглядеть. wink.gif
KATYSHA
Цитата(klem4 @ 17.11.2005 8:05)
Эхх, я тут посмотрел, на форуме начались дни добрых дел и выкладывания полных решений, так что держи :
lol.gif
про строки
uses crt;

const

limits = [#0..#32,'.',',',':',';','!','?','"'];
type



Обьясни пожалуйста что за строка такая limits ???? wacko.gif можно как нибудь обойтись в программе без этого limits ну или хотя бы заменить как-нибудь её?

wink.gif
volvo
KATYSHA, это список символов, которыми могут разделяться слова. Следовательно, обойтись без этого можно ТОЛЬКО тогда, когда ты на 100% уверена, что ничего кроме пробелов для разделения слов во введенной тобой строке использоваться НЕ будет...
Тогда поменяй в функции вот так:
   while(i<=length(s)) do begin
while(i<=length(s)) and (s[i] = ' ') do inc(i);
if i<=length(s) then begin
back := i;
while(i<=length(s)) and (s[i] <> ' ') do inc(i);
inc(n);
w[n] := copy(s, back, i-back);
L[n] := not(odd(length(w[n])));
end;
end;
KATYSHA
Это вначале поменять вместо той строки?или это по-моему в середине где-то должно быть кажись rolleyes.gif
arhimag
Я думаю что гдето в середине!
volvo
Цитата
Я думаю что гдето в середине!

yes2.gif В середине... Вместо почти аналогичного куска в программе klem4
Вот так будет выглядеть измененная функция GetWords полностью:

function GetWords(s : string; var w : TWords; var L : TLogic) : byte;
var
i,back,n : byte;
begin
i := 1;
n := 0;
while(i<=length(s)) do begin
while(i<=length(s)) and (s[i] = ' ') do inc(i);
if i<=length(s) then begin
back := i;
while(i<=length(s)) and (s[i] <> ' ') do inc(i);
inc(n);
w[n] := copy(s, back, i-back);
L[n] := not(odd(length(w[n])));
end;
end;

GetWords := n;
end;
KATYSHA
Цитата(volvo @ 16.11.2005 19:27)
Самый простой вариант:

volvo здесь что-то не то, там числа по кругу идут, когда проверяешь. wacko.gif Посмотри пожалуйста smile.gif
volvo
To: KATYSHA
Я десятый раз повторять не буду... Пока ты не приведешь те данные, которые вводишь, претензии не принимаются...
KATYSHA
Цитата(volvo @ 19.11.2005 14:52)
To: KATYSHA
Я десятый раз повторять не буду... Пока ты не приведешь те данные, которые вводишь, претензии не принимаются...


Да просто числа вводила,а они не кончаются unsure.gif .................вводишь,вводишь,а птом опять они повторяются .Приходится нажимать break+ctrl :-(
volvo
Ну, хорошо, что ты хочешь чтобы тебе сказали? Ты ж не говоришь, что ты вводишь, это тайна, покрытая мраком... Ну, разбирайся сама... Если что-то не сработало, значит программу меняла... Я спорить с тобой не намерен. Еще раз повторяю - ВСЕ мои программы тестируются, раз я выложил, значит, это отработало... Могу привести данные, для которых все работает...

Хотя, зачем это МНЕ нужно? Тебе нужна программа, а ты молчишь... Ну, молчи ...
KATYSHA
Цитата(volvo @ 22.11.2005 17:11)
Тебе нужна программа, а ты молчишь...

smile.gif да я ж не молчу.Я говорю,ввожу просто от балды любые числа,а программу я не меняла

Добавлено (через 1 час):
Цитата(klem4 @ 17.11.2005 8:05)
Эхх, я тут посмотрел, на форуме начались дни добрых дел и выкладывания полных решений, так что держи :

А что тут должна делать программа? я ввожу текст, нажимаю ентер и ничего нет, и дальше тоже не пишется. Объясни плиз blink.gif

Добавлено (через 3 часа):
Цитата(volvo @ 16.11.2005 19:27)
Самый простой вариант:

Здесь всё правильно!!!! good.gif просто я тормоз. Извини !mol1.gif

kiss2.gifkiss2.gifkiss2.gif
KATYSHA
Извините конечно меня за назойливость,но в задании нужно заменить максимальный эл-т суммой положительных,а не максимальных.ну это можно переделать типа if a[i, j] <0 then i_min := j;и т.д.Но тут ещё он заменяет не сам максимальный эл-т,а другой,а сам остается таким,каким он был введён(такая же ситуация и с минимальным).Помогите пожалуйста доделать эту программку.Очень признательна give_rose.gif
volvo
Цитата
в задании нужно заменить максимальный эл-т суммой положительных,а не максимальных. ну это можно переделать

Да не нужно ничего переделывать !!! Ты на программу-то смотрела? Что по-твоему, будет после этого цикла в sum_plus и sum_minus ???

    for j := 1 to n do begin
if a[i, j] < a[i, i_min] then i_min := j;
if a[i, j] > a[i, i_max] then i_max := j;

if a[i, j] < 0 then sum_minus := sum_minus + a[i, j]
else sum_plus := sum_plus + a[i, j];
end;

Цитата
Но тут ещё он заменяет не сам максимальный эл-т,а другой

Правда? И какой же, интересно, если не максимальный/минимальный?
KATYSHA
Цитата(volvo @ 30.11.2005 14:25)
Да не нужно ничего переделывать !!! Ты на программу-то смотрела? Что по-твоему, будет после этого цикла в sum_plus и sum_minus ???

    for j := 1 to n do begin
if a[i, j] < a[i, i_min] then i_min := j;
if a[i, j] > a[i, i_max] then i_max := j;

if a[i, j] < 0 then sum_minus := sum_minus + a[i, j]
else sum_plus := sum_plus + a[i, j];
end;


Правда? И какой же, интересно, если не максимальный/минимальный?



!mol1.gif да просто я ничего походу не понимаю,но ведь и одногруппница сказала,что там не то что-то.ну ладно,спасибо за программку. !flowers.gif
KATYSHA
Цитата(klem4 @ 17.11.2005 8:05)
Эхх, я тут посмотрел, на форуме начались дни добрых дел и выкладывания полных решений, так что держи :

здесь как я Enter нажимаю, вылетает. rolleyes.gif Что делать? там должно ведь писаться что там ложь или истина give_rose.gif
volvo
Цитата
здесь как я Enter нажимаю,вылетает

Я уже устал говорить тебе... ПРИМЕР ВВОДА ПРИВЕДИ !!! Вот мой ввод - ничего не вылетает, как видишь:
Цитата(Console)
text = start finish end begin
start      FALSE
finish      TRUE
end      FALSE
begin      FALSE
KATYSHA
Цитата(volvo @ 30.11.2005 16:23)
Я уже устал говорить тебе... ПРИМЕР ВВОДА ПРИВЕДИ !!! Вот мой ввод - ничего не вылетает, как видишь:
Цитата(Console)
text = start finish end begin
start      FALSE
finish       TRUE
end      FALSE
begin      FALSE



ааааа,а я просто от балды писала.Например:gjndghs lixguhtg giru smile.gif .теперь понятно,он оказывается различает,что пишу)))
KATYSHA
Цитата(volvo @ 30.11.2005 16:23)
Я уже устал говорить тебе... ПРИМЕР ВВОДА ПРИВЕДИ !!! Вот мой ввод - ничего не вылетает, как видишь:
Цитата(Console)
text = start finish end begin
start      FALSE
finish       TRUE
end      FALSE
begin      FALSE




volvo,слушай,а ты наверно программку проверял со строкой limits?!да?а я делаю программу,без этой строки и вставила то,что ты написал выше rolleyes.gif
KATYSHA
Цитата(volvo @ 17.11.2005 16:25)
KATYSHA, это невозможно...
Когда среднее арифметическое N элементов максимально? Когда все эти элементы одинаковы, так?

Допустим, все элементы одинаковы и равны "Х", тогда и среднее арифметическое равно "X". РАВНО, но не БОЛЬШЕ !!! Увеличим один элемент на значение "Y", тогда ср. арифметическое увеличится на Y/N, что заведомо меньше чем Y... Так что ср. арифметическое просто НЕ МОЖЕТ быть больше макс. элемента массива...

Так что пускай твой препод сам пошевелит тем, что у него вместо мозгов, и даст другое задание или переформулирует это...



Да не меняет он задание.Напишите плиз как тут программку писать,пусть даже и бессмыслено будет решение smile.gif
volvo
Цитата
Дан файл вещественных чисел. Если среднее арифметическое его компонент превышает значение максимального эл-та файла,удалить из него все отрицательные эл-ты,в противном случае- удалить все положительные.


Алгоритм примерно такой:
var
arr: array[1000] of real;
...
Reset(f);
max := -10000;
aver := 0; n := 0;
while not eof(f) do begin
read(f, X);
if X > max then max := X;
aver := aver + X;
inc(n); arr[n] := X;
end;
aver := aver / filesize(f);

i := 1;
while i <= n do begin
if (arr[i] < 0) = (aver < max) then begin
for j := i to pred(n) do arr[j] := arr[j+1]
dec(n);
end
else inc(i);
end;

reset(f);
for i := 1 to n do write(f, arr[i]);
truncate(f);
close(f);
KATYSHA
А как именно?напиши плиз полностью give_rose.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.