Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Математика


Ответ
 
Опции темы Опции просмотра
Старый 27.01.2009, 21:08   #41 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Сегодня на курсах по информатике нам объясняли, как решать задачи типа С2 (из ЕГЭ). Вот одна из них:дан целый квадратный массив 10 на 10, описать алгоритм вычисления суммы максимальных элементов из каждой строки (в каждой строке только 1 такой элемент), напечатать значение суммы.

Program C2;
Var a:array [1..10,1..10]of integer;
i,j,m,S:integer;
BEGIN
For i:=1 to 10 do
begin
For j:=1 to 10 do a[i,j]:=random(1000);
end;

For i:=1 to 10 do
begin
For j:=1 to 10 do write(a[i,j],' ');
writeln;
end;

S:=0;
For i:=1 to 10 do
begin
m:=a[i,1];
For i:=1 to 10 do
If a[i,j]>m then m:=a[i,j];
S:=S+m;
end;
writeln('S=',S);
END.

Программа нормально работает, но преподаватель сказал, что это и это действия можно объединить в одно. Как это сделать?
ummasha вне форума   Ответить с цитированием
Старый 27.01.2009, 21:21   #42 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Полагаю, что так:

For i:=1 to 10 do
begin
For j:=1 to 10 do
begin
a[i,j]:=random(1000);
write(a[i,j],' ');
end;
writeln;
end;
Vladimir_S вне форума   Ответить с цитированием
Старый 27.01.2009, 21:29   #43 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Спасибо! А то преподаватель показал нам предыдущий вариант, а этот не стал: сказал, что не поймем и не запомним(((
ummasha вне форума   Ответить с цитированием
Старый 29.01.2009, 20:03   #44 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Возникла проблема со следующей задачей: дан двумерный массив 5 на 6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен произведению четных положительных элементов соответствующего столбца.
Решение:
Program K4_W1_1;
Var a:array[1..100,1..100] of integer;
b:array[1..100] of integer;
i,j,p,n,m:integer;
BEGIN
writeln;
randomize;
write('n=');readln(n);
write('m=');readln(m);
For i:=1 to n do
begin
For j:=1 to m do
begin
a[i,j]:=random(45)-22;
write(a[i,j]:4);
end;
writeln;
end;
For j:=1 to m do
begin
p:=1;
For i:=1 to n do
If (a[i,j]>0)and(a[i,j] mod 2=0) then
p:=p*a[i,j];
If p<>1 then
begin
writeln('столбец ',j,' p=',p);
b[j]:=p;
end
else
begin
writeln('в столбце ',j,' нет четных положительных чисел');
b[j]:=0;
end;
For i:=1 to n do
write(b[j],' ');
readln;
end;
END.

Получается все, кроме заполнения одномерного массива(((((

n=5
m=6
-11 5 -15 13 11 -14
8 -4 -17 -17 -4 -14
-5 -13 5 9 7 -8
11 -3 6 -22 -10 10
-14 -7 -15 8 20 -10
столбец 1 p=8
8 8 8 8 8 в столбце 2 нет четных положительных чисел
0 0 0 0 0 столбец 3 p=6
6 6 6 6 6 столбец 4 p=8
8 8 8 8 8 столбец 5 p=20
20 20 20 20 20 столбец 6 p=10
10 10 10 10 10

Подскажите, как это сделать.
ummasha вне форума   Ответить с цитированием
Старый 29.01.2009, 21:29   #45 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ummasha Посмотреть сообщение
Подскажите, как это сделать.
Да просто исправить ошибку в пятой строке снизу. Должно быть
For j:=1 to m do
а у Вас
For i:=1 to n do

Да, еще одно - end в предпоследней строке не на месте: его надо поставить ПЕРЕД последним циклом. Т.е. конец программы должен быть таким:

b[j]:=0;
end;
end;
For j:=1 to m do
write(b[j],' ');
readln;
END.

Последний раз редактировалось Vladimir_S; 29.01.2009 в 22:35 Причина: Уточнение
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 30.01.2009, 07:19   #46 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Спасибо большое за помощь! Опечатки в книге просто достали!
Программу изменила, и теперь она нормально работает!

Последний раз редактировалось ummasha; 30.01.2009 в 08:01
ummasha вне форума   Ответить с цитированием
Старый 09.02.2009, 07:21   #47 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Я попробовала написать программу на Паскале, похожую на "ЭКГ" ( http://www.tehnari.ru/showthread.php?t=18977 ), которая выводит в блокнот данные (имя, фамилия, год рождения и т.д.), но запуталась в незнакомых типах данных. Скажите, как сделать такую программу.
ummasha вне форума   Ответить с цитированием
Старый 09.02.2009, 10:14   #48 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ummasha Посмотреть сообщение
Я попробовала написать программу на Паскале, похожую на "ЭКГ" ( http://www.tehnari.ru/showthread.php?t=18977 ), которая выводит в блокнот данные (имя, фамилия, год рождения и т.д.), но запуталась в незнакомых типах данных. Скажите, как сделать такую программу.
Маша, опишите, пожалуйста, подробнее - что требуется? Что вводится, в каком виде Вы хотите вывести, в каких типах данных запутались?
Vladimir_S вне форума   Ответить с цитированием
Старый 09.02.2009, 15:17   #49 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Я бы очень хотела разобраться с типами данных "строка" и "символьный". Во-первых, их не объясняли в школе, во-вторых, данные таких типов есть в ЕГЭ, а в-третьих, я стала решать эти задачи из ЕГЭ, но ничего не получается((( Пробовала набирать программу как в книжке, а Паскаль выдает ошибку.
ummasha вне форума   Ответить с цитированием
Старый 09.02.2009, 15:53   #50 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Вот одна из задач, которые я пыталась решить:
http://www.tehnari.ru/picture.php?al...&pictureid=391

Вот решение, приведенное в книге и набранное мной в Паскале:
Program C4;
Var a:array[1..300] of record
Name:string;
Sum:integer;
end;
C:char;
i,j,S,m,n:integer;
BEGIN
readln(n);
For i:=1 to n do
begin
a[i].name:='';
repeat
read(C);
a[i].name:=a[i].name+c
until c='';
repeat
read(C);
a[i].name:=a[i].name+c
until c='';
S:=0;
For j:=1 to 3 do
begin
read(m);a[i].Sum:=m;
If a[i].Sum>=30 then S:=S+1;
end;
If S=3 then writeln(a[i].name);
readln;end;
END.

У меня возникло несколько вопросов:
1)Зачем здесь нужен end и почему перед ним не стоит begin;
2)Что за странное "приглашение";
3)Что требуется поставить здесь - кавычки или апострофы (в книге их вообще было 3 штуки, но программа указывала на ошибку).

Последний раз редактировалось ummasha; 09.02.2009 в 15:59
ummasha вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 11:48.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.