Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц, летом дешевле!

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2009, 19:14   #1
Павел Я
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 13
Радость 2 задачи по Паскалю

Задача 1 С помощью генератора случайных значений сформировать три массива A, B, C вещественных значений, в каждом из которых не более 20 элементов. Значения элементов массивов формируются в диапазоне [-3m, 2m], где значение m>5 вводится с клавиатуры. Написать программу, в которой вывести на экран три сформированных вектора и затем вывести имя (имена) массива(ов) с максимальной суммой положительных элементов. Задача 2. С помощью генератора случайных значений сформировать 4 вектора V1, V2, V3, V4, каждый из которых содержит m (где m<=24) целочисленных значений. Элементы векторов формируются в диапазоне [-2k, 3k], где значение k>4 вводится с клавиатуры. Написать программу, в которой вывести на экран все сформированные векторы, и предусмотреть функцию, с помощью которой затем вывести сумму элементов кратных 7 в каждом векторе. Спасибо
Павел Я вне форума Ответить с цитированием
Старый 11.03.2009, 19:30   #2
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

Сами пробовали решить?
Задавать элементы массива в диапазоне можно так:
Код:
A[i]:=random(2*m+1+3*m)-3*m
Во втором случае - аналогично. Ну а сумму элементов - просто находить в цикле по всем элементам массива, при условии, что элемент положительный, или кратен 7.
Исходя из этого напишите свой вариант решения, а мы тут подправим, если что.
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Старый 11.03.2009, 19:41   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
A[i]:=random(2*m+1+3*m)-3*m
Это будут целые числа.
А вещественные можно так A[i]:=5*m*random)-3*m
puporev вне форума Ответить с цитированием
Старый 11.03.2009, 21:56   #4
Павел Я
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 13
По умолчанию

Для 1-й задачи
var
A:array[1..20] of real;
m,sumpl:real;
k,i:byte;
begin
write('Введите значение m>5:'); readln(m);
write('Введите значение k<=20; readln(k);
randomize;
sumpl:=0;
for i:=1 to k do begin
A[i]:=5*m*random-3*m;
if A[i]>0 then sumpl:=sumpl+A[i]

То же делаем для массива B и C. Как выбрать максимальную сумму и вывести имя массива???
Павел Я вне форума Ответить с цитированием
Старый 12.03.2009, 17:08   #5
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

вместо sumpl использовать массив
Код:
 sumpl:array[1..3] of summax
где
Код:
type
 summax=record
 name:string;
 value:real;
 end;
sumpl[1].name:=А - для массива А, sumpl[1].value:= сумме положительных элементов

Затем сортируем массив sumpl любым известным методом по значению value и выводим имя массива
Код:
if (sumpl[1].value=sumpl[2].value) and (sumpl[1].value=sumpl[3].value) then
   write('максимальная сумма положительных элементов в массивах А,В,С') 
   else
     if (sumpl[1].value=sumpl[2].value) then
       write('максимальная сумма положительных элементов в массивах '+ sumpl[1].name+','+sumpl[2].name) 
     else
     write('максимальная сумма положительных элементов в массиве '+ sumpl[1].name);
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Старый 14.03.2009, 15:02   #6
Павел Я
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 13
По умолчанию

ПРобывал я разобрать то что вы написали. Но я не могу понять!!! Что за типы record,string. Что такое value, что написанно дальше - труба! Можете думать что я тупой, но я не занимаюсь программированием, поэтому и прошу помощи на этом форуме. Возможно вы напишети программу полностью и я смогу понять ее целеком. Поймите что вы написали, эти команды там разные, в лекциях нам не давали. Может есть вариант написания попроще? Спасибо
Павел Я вне форума Ответить с цитированием
Старый 14.03.2009, 15:08   #7
maladoy
delphi-ст!
Форумчанин
 
Аватар для maladoy
 
Регистрация: 02.01.2009
Сообщений: 825
По умолчанию

record - тип запись
value - поле записи
string - тип строка
Код:
uses crt;
var
A:array[1..20] of real;
b:array[1..20] of real;
c:array [1..20] of real;
sum:array[1..3] of real;
m:real;
k,i:byte;
begin
clrscr;
write('Введите значение m>5:'); readln(m);
write('Введите значение k<=20; readln(k);
randomize;
for i:=1 to 3 do
sum[i]:=0;
for i:=1 to k do begin
a[i]:=random(2*m+1+3*m)-3*m;
b[i]:=random(2*m+1+3*m)-3*m;
c[i]:=random(2*m+1+3*m)-3*m;
if A[i]>0 then sum[1]:=sum[1]+A[i];
if b[i]>0 then sum[2]:=sum[2]+A[i];
if c[i]>0 then sum[3]:=sum[3]+A[i];
end;
write('mas a:');
for i:= 1 to k do 
write(' ',a[i]:6:3);
writeln;
write('mas b:');
for i:= 1 to k do 
write(' ',b[i]:6:3);
writeln;
write('mas c:');
for i:= 1 to k do 
write(' ',c[i]:6:3);
writeln;
if sum[1]>sum[2] and sum[1]>sum[3] then writeln ('a');
if sum[2]>sum[1] and sum[2]>sum[3] then writeln ('b');
if sum[3]>sum[1] and sum[3]>sum[2] then writeln ('c');
end.
вступлю в команду разработчиков ПО на Delphi

Последний раз редактировалось maladoy; 14.03.2009 в 15:22.
maladoy вне форума Ответить с цитированием
Старый 14.03.2009, 15:47   #8
Павел Я
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 13
По умолчанию

Большое спасибо сейчас я точно раберусь
Павел Я вне форума Ответить с цитированием
Старый 14.03.2009, 15:49   #9
maladoy
delphi-ст!
Форумчанин
 
Аватар для maladoy
 
Регистрация: 02.01.2009
Сообщений: 825
По умолчанию

Цитата:
Большое спасибо сейчас я точно раберусь
разберетесь и вторую сами сделаете
вступлю в команду разработчиков ПО на Delphi
maladoy вне форума Ответить с цитированием
Старый 14.03.2009, 16:49   #10
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

Код:
if A[i]>0 then sum[1]:=sum[1]+A[i];
if b[i]>0 then sum[2]:=sum[2]+A[i];
if c[i]>0 then sum[3]:=sum[3]+A[i];
Здесь наверное опечатка, нужно так:
Код:
if A[i]>0 then sum[1]:=sum[1]+A[i];
if b[i]>0 then sum[2]:=sum[2]+b[i];
if c[i]>0 then sum[3]:=sum[3]+c[i];
А при выводе на экран имени массива таким способом:
Код:
if sum[1]>sum[2] and sum[1]>sum[3] then writeln ('a');
if sum[2]>sum[1] and sum[2]>sum[3] then writeln ('b');
if sum[3]>sum[1] and sum[3]>sum[2] then writeln ('c');
Программа не выведет ни чего, если хотя бы две суммы будут равны. Поэтому я и предложил более сложный метод с записями.
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц, летом дешевле!

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи по Паскалю! profi Помощь студентам 39 15.10.2009 09:29
Задачи по Паскалю koshkarjov Помощь студентам 2 02.02.2009 18:06
Задачи по паскалю. Lavron Паскаль, Turbo Pascal, PascalABC.NET 20 05.01.2009 15:34
Задачи по паскалю Agent[PNZ] Помощь студентам 10 22.11.2007 21:45
Задачи по Паскалю MissLove Помощь студентам 15 24.07.2007 11:20