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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2009, 21:07   #1
midletarket
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 20
Вопрос Pascal. Массивы, процедуры.

обрый вечер. Помогите пожалуйста. Составить подпрограмму для определения числа элементов одномерного массива, предшествующих его первому отрицательному элементу.
Используя данную подпрограмму, расчитать среднее арифметическое значение элементов того из двух заданных одномерных массивов C и T,
в ктором меньше элементов, предшествующих первому отрицательному. В случае равенства чисел таких элементов вывести на печать сообщение "Массивы эквивалентны". С = (2,75;6,01;0,007;1;0;53.1)
T = (7; 0,04;-5;6;0;81;0,0005;-125)
Задачу нужно с процедурой. Без break и без goto. Заранее спасибо... Если можно с пояснениями...
midletarket вне форума Ответить с цитированием
Старый 31.05.2009, 21:09   #2
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

в массиве C вообще что ли отрицательных нету? А вы совсем не в теме? наработок никаких? ни строки кода?
Uguu~
__STDC__ вне форума Ответить с цитированием
Старый 31.05.2009, 21:10   #3
midletarket
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 20
По умолчанию

Нет, есть наработки... Сейчас...
midletarket вне форума Ответить с цитированием
Старый 31.05.2009, 21:12   #4
midletarket
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 20
По умолчанию

Код:
Type
X=array[1..20] of Real;{Максимальное число элементов массива}
var
i,Kol,nc,nd:Integer;
C,D: X;
p:Real;

Procedure M(c:X;Kol:Integer; var n:integer);
Var
m,Flag:integer;
Begin
N:=0; Flag:=0; m:=0;
For I:=1 to Kol do
begin
If c[i]>=0 then Inc(m)
Else
If (flag=0) Then
Begin
n:=m ;
Flag:=1;
End;
End;
End;

Begin
Writeln('Vvedite kolicestvo elementov massivov');
Readln(Kol);
For i:=1 to Kol do
Begin
Writeln('Vvedite ',i:2,' element massiva C');
Readln(C[i]);
End;
For i:=1 to Kol do
Begin
Writeln('Vvedite ',i:2,' element massiva D');
Readln(D[i]);
End;
M(c,kol,nc);
M(d,kol,nd);
p:=0;
If Nc<Nd then
Begin
For i:=1 to kol do
Begin
P:=P+C[i];
End;
P:=P/Kol;
Writeln('Srednee arifmeticeskoe massiva C = ',P:3:3);
End Else
If Nc>Nd then
Begin
For i:=1 to kol do
Begin
P:=P+D[i];
End;
P:=P/Kol;
Writeln('Srednee arifmeticeskoe massiva D = ',P:3:3);
End Else Writeln('Massivi ekvivalentny');
Readln;
End.
Да в массиве С отрицательных нет...
midletarket вне форума Ответить с цитированием
Старый 31.05.2009, 21:16   #5
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

а массивы разной размерности что ли должны быть? Там у вас получается что в C должно быть 6 эл-тов, а в D 7... не?
Проблема, как я понимаю, в том, что считает среднее ар. от того массива, где вообще нет отрицательных... можно в таком случае ввести доп. логическую переменную и если отрицательных эл-тов не обнаружено - обнулять в конце значение счетчика
Uguu~

Последний раз редактировалось __STDC__; 31.05.2009 в 21:18.
__STDC__ вне форума Ответить с цитированием
Старый 31.05.2009, 21:33   #6
midletarket
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 20
По умолчанию

А как это реализовать в коде?
midletarket вне форума Ответить с цитированием
Старый 31.05.2009, 21:36   #7
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

ну смотрите.. заведите скажем логическую переменную w_o_neg, и задайте ей значение true.. дальше, когда в цикле проверяете эл-ты, если встречается отрицательный - переменной присваиваете false.. в конце подпрограммы делаете if и если переменная имеет значение true - обнуляете счетчик
Uguu~
__STDC__ вне форума Ответить с цитированием
Старый 31.05.2009, 21:39   #8
midletarket
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 20
По умолчанию

Знаете, я программист начинающий и по Вашим словам мне трудно что-либо написать, напишите код программы, если Вам не сложно...
midletarket вне форума Ответить с цитированием
Старый 31.05.2009, 21:50   #9
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

Честно говоря, я бы весь код переписал заново... Но что-то не хочется.. Я дополнил и исправил ваш, все изменения выделены красным.. Реализовал с точностью до наоборот тех слов, что говорил выше)) Так удобней..
Код:
Type
X=array[1..20] of Real;{Максимальное число элементов массива}
var
i,Kol,nc,nd:Integer;
C,D: X;
p:Real;

Procedure M(c:X;Kol:Integer; var n:integer);
Var
m,Flag:integer;
w_o_neg:boolean;
Begin
N:=0; Flag:=0; m:=0; w_o_neg := false;
For I:=1 to Kol do
begin
If c[i]>=0 then Inc(m)
Else begin
w_o_neg := true;
If (flag=0) Then
Begin
n:=m ;
Flag:=1;
end;
End;
End;
n := m;
if (w_o_neg = true) then n := 0;
End;

Begin
Writeln('Vvedite kolicestvo elementov massivov');
Readln(Kol);
For i:=1 to Kol do
Begin
Writeln('Vvedite ',i:2,' element massiva C');
Readln(C[i]);
End;
For i:=1 to Kol do
Begin
Writeln('Vvedite ',i:2,' element massiva D');
Readln(D[i]);
End;
M(c,kol,nc);
M(d,kol,nd);
p:=0;
If Nc<Nd then
Begin
For i:=1 to kol do
Begin
P:=P+C[i];
End;
P:=P/Kol;
Writeln('Srednee arifmeticeskoe massiva C = ',P:3:3);
End Else
If Nc>Nd then
Begin
For i:=1 to kol do
Begin
P:=P+D[i];
End;
P:=P/Kol;
Writeln('Srednee arifmeticeskoe massiva D = ',P:3:3);
End;

if (nc = nd) then Writeln('Massivi ekvivalentny');
Readln;
End.
Как-то так..
Uguu~
__STDC__ вне форума Ответить с цитированием
Старый 31.05.2009, 22:11   #10
midletarket
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 20
По умолчанию

Код:
Type
X=array[1..14] of Real;{Максимальное число элементов массивов}
var
i,KolT,nc,KolC,nt:Integer;
C,T: X;
p:Real;


Procedure M(c:X;Kol:Integer; var n:integer);
Var
m,Flag:integer;
Begin
N:=0; Flag:=0; m:=0;
For I:=1 to Kol do
begin
If c[i]>=0 then Inc(m)
Else
If (flag=0) Then
Begin
n:=m ;
Flag:=1;
End;
End;
End;Begin
Writeln('Vvedite kolicestvo elementov massiva C');
Readln(KolC);
Writeln('Vvedite kolicestvo elementov massiva T');
Readln(KolT);
For i:=1 to KolC do
Begin
Writeln('Vvedite ',i:2,' element massiva C');
Readln(C[i]);
End;
For i:=1 to KolT do
Begin
Writeln('Vvedite ',i:2,' element massiva T');
Readln(T[i]);
End;
M(c,kolC,nc);
M(t,kolT,nt);
p:=0;
If Nc<Nt then
Begin
For i:=1 to kolc do
Begin
P:=P+C[i];
End;
P:=P/KolC;
Writeln('Srednee arifmeticeskoe massiva C = ',P:3:3);
End Else
If Nc>NT then
Begin
For i:=1 to kolT do
Begin
P:=P+T[i];
End;
P:=P/KolT;
Writeln('Srednee arifmeticeskoe massiva T= ',P:3:3);
End Else Writeln('Massivi ekvivalentny');
Readln;
End.
Так тоже ведь можно?
midletarket вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедуры и функции, двумерные массивы. (QBasic) poad_hok Помощь студентам 2 27.05.2009 18:59
Массивы, процедуры/функции Вампирёк Помощь студентам 1 16.03.2009 10:15
Программа на массивы и процедуры. Delphi Alex_2017 Помощь студентам 0 29.05.2008 12:48
Процедуры (Pascal) [Smarik] Помощь студентам 6 16.01.2008 14:52