легкая программа с матрицами...но я не могу ее написать

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

09 янв 2007, 10:03

&quot писал(а):Все вроде просто, на Паскале я могу все это претворить в жизнь
Ну так в чем проблема, пиши на Паскале. А там посмотрим как оформить...
It's a long way to the top if you wanna rock'n'roll
Tre
Сообщения: 27
Зарегистрирован: 07 янв 2007, 23:26

09 янв 2007, 18:28

somewhere писал(а):Ну так в чем проблема, пиши на Паскале. А там посмотрим как оформить...
вот задачка.

program B182;
uses crt;
const n=10;
var i,min,k,s,a,b,j,m:integer;
br,ar:array [1..n] of integer;

begin
clrscr;
randomize;
for i:=1 to n do
begin
ar:=random(100)-50;
write (ar,' ');
end;
k:=1;
min:=abs(ar[1]); {a}
for i:=1 to n do
if abs(ar)< min then begin
min:=abs(ar);
k:=i;
end;
writeln;
writeln ('min элемент по модулю= ',min,' с индексом ',k);

s:=0; {b}
for i:=1 to n do
if ar<0 then begin
k:=i;
i:=n;
end;
for i:=k+1 to n do
s:=s+abs(ar);
writeln;
writeln ('сумма модулей элементов расположенных после первого отрицательного элемента* =',s);

writeln ('введите левую границу'); {преобразование матрицы}
readln (a);
writeln ('введите правую границу');
readln (b);
j:=1;
for i:=1 to n do
if (ar>a) and (ar<b) then begin
br[j]:=ar;
j:=j+1;
end;
m:=j;
for j:=1 to m-1 do
write (br[j],' ');
j:=m;
for i:=1 to n do
if (ar<a) or (ar[i]>b) then begin
br[j]:=ar[i];
j:=j+1;
end;
for j:=m to n do
write (br[j],' ');
readln
end.

Теперь ее надо в delphi и еще чтоб с руки ввод массива тоже был. И кстати в той задаче про двумерную матрицу, надо тоже ввод с рук организовать.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

09 янв 2007, 21:35

&quot писал(а):И кстати в той задаче про двумерную матрицу, надо тоже ввод с рук организовать.
Так я же писал, как. Разрешаешь для TStringGrid редактирование и все нормально с руки вводиться.

Теперь об этой задаче:
1. Для ввода одномерного массива тоже можно использовать TStringGrid, только строка у него будет всего одна.
2. Нужна кнопка для запуска этой программы.
3. Для вывода всей информации на экран можно использовать TMemo. У него есть свойство Lines. Lines - это грубо говоря массив из стрингов. У него методы есть: Clear, Add и т.д. Вот они и пригодятся. Т.е. заместо ClrScr; будет Memo.Lines.Clear; а заместо Writeln(s:String) memo.Lines.Add(s:String)
4. С учетом частого использования элементов одномерного массива в поиске, сравнениях и др. настоятельно рекомендую все-таки скопировать из StringGrid'a все элементы в этот массив, а потом с ним работать.

И попробуй пока сам, иначе какой смысл решать задачи мне. Меня это не научит, а вот чем больше времени ты сам будешь ей уделять - тем больше опыта и знаний ты получишь. Не забывай, что всегда есть Help который расскажет о каждом свойстве и методе любого объекта.
It's a long way to the top if you wanna rock'n'roll
Tre
Сообщения: 27
Зарегистрирован: 07 янв 2007, 23:26

09 янв 2007, 23:21

somewhere писал(а):И попробуй пока сам, иначе какой смысл решать задачи мне. Меня это не научит, а вот чем больше времени ты сам будешь ей уделять - тем больше опыта и знаний ты получишь. Не забывай, что всегда есть Help который расскажет о каждом свойстве и методе любого объекта.
тк, я бы сидел, но у меня времени совсем нет, а скоро уже сдавать 15 задач. Половина из них двумерные, половина одномерные. Ты мне дал код для двумерной, вот если дашь и для одномерного, для вот этой задачи, тогда я уж наверно и сам попробую посидеть. А так толку совсем нет, я попросту ниче не успею понять, а здесь будет хоть от чего отталкиваться. напиши мне решение для одномерного просто, только, ладно, не надо с clrscr, пусть будет все просто как с двумерной. Без фишек. Заранее благодарю
P.S. а когда организуешь ввод с рук эти строчки надо удалять?

procedure TForm1.BitBtn1Click(Sender: TObject);
var x, y: Integer;
begin
for x:=0 to sg.RowCount-1 do
for y:=0 to sg.ColCount-1 do
sg.Cells[y,x] := Inttostr(random(50)-25);
end;
а вместо них что-нибудь надо писать?
Я в Options у StringGrid поставил True. Значения ввожу но выходит ошибка, типа не целый тип переменная принимает. Что-то типа того. короче мне тяжело разобраться. Помоги
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

10 янв 2007, 10:10

А в чем проблема, там же все еще проще!
Например, есть двумерный массив mas2=array[1..m,1..n] of integer
Если мы хотим что-то сделать с каждым элементом массива - делаем два цикла (по горизонтали и вертикали) и мучаем элементы:
for i:=1 to m do
for j:=1 to n do
mas2[i,j]:= что-то там
А если одномерный - просто считай, что у тебя n тождественно равен 1.
Правда, такой код будет неудобен, поэтому можно второе измерение вообще выкинуть
mas1:array[1..m] of integer;
И тогда достаточно одного цикла
for i:=1 to m do
mas1:= что-то там
Что тут еще сложного?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

10 янв 2007, 10:21

Для ввода данных "с руки" в Дельфи служат объекты.
It's a long way to the top if you wanna rock'n'roll
foo
Сообщения: 2
Зарегистрирован: 10 янв 2007, 15:11

10 янв 2007, 15:17

somewhere писал(а):Для ввода данных "с руки" в Дельфи служат объекты.
Пробую на событие OnSelectCell, сделать ввод числа, в соответсвующий cell. Подскажешь куда смотреть?
foo
Сообщения: 2
Зарегистрирован: 10 янв 2007, 15:11

10 янв 2007, 15:36

Сделал Options GoEditing true. Ввод пошел. Спасибо, за ранний совет ;-)
Tre
Сообщения: 27
Зарегистрирован: 07 янв 2007, 23:26

10 янв 2007, 17:16

somewhere писал(а):Для ввода данных "с руки" в Дельфи служат объекты.
спасибо за задачу. Попробую разобраться
Tre
Сообщения: 27
Зарегистрирован: 07 янв 2007, 23:26

11 янв 2007, 16:14

Помнишь ты мне сделал задачу с одномерным массивом? Так вот, Я все задачи с одномерными сделал, но оказывается Преобразованный массив необходимо выводить в другом StringGride. Как это сделать? И сильно ли этот вывод отличается для задач с двумерными матрицами?
Ответить