Page 1 of 2
Нужна помощь по паскалю
Posted: 2007-10-19 20:50:12
by -=JoKeR=-
Code: Select all
Для одномерных массивов F и W, которые состоят из 10 элементов целого типа каждый, подсчитать количество элементов, больших чем заданное число X и меньших числа Y ( X,Y - любые целые числа).
Вобщем вот такая задачка.
Вроде всё просто, но я не могу никак её реализовать.
Вот всё что я мог зделать, дальше туго вобще
Code: Select all
Program mission 1;
const n=10; x=5; y=10;
var F,W:Array [1..n] Of Real;
k:integer;
Begin
...
End.
Помогите плиз, хотябы направьте в нужную сторону =)
Posted: 2007-10-19 20:51:24
by Scripts Writer
На С++ без проблем, паскаль незнаю =)
Posted: 2007-10-19 21:21:00
by -=JoKeR=-
Жаль

Posted: 2007-10-19 22:25:13
by -=JoKeR=-
Вот кропаль додумал, но всё равно не знаю как вывести количество элементов больших Х и меньших Y
Code: Select all
Program zadacha;
const
n=10;
x=5;
y=10;
var
F,W:Array [1..n] of real;
b:integer;
k:integer;
Begin
if x=5 then
begin
for b:=6 to 10 do
...
end;
if y=10 then
begin
for k:=10 DownTo 6 do
...
end;
Writeln('Чисел больших X -' + str(...));
Writeln('Чисел меньших Y -' + str(...));
End.
Posted: 2007-10-20 11:15:50
by Scripts Writer
Зачастую у всех языков программирования очень много общего- логические операции, типы, организации циклов и объявления переменных,- ну и конечно алгоритм выполнения программы.
Вот как оно выглядит на С++ :
Code: Select all
#include <iostream.h>
void main()
{
int A[10]={1,2,3,4,5,6,7,8,9,10};
int B[10]={4,5,6,7,8,9,10,11,12,133};
int X,Y,k;
k=0;
cout<<"Введите значение числа X: ";
cin>>X;
cout<<"\nВведите значение числа Y: ";
cin>>Y;
if(X>Y)
cout<<"\nОшибка ввода. Число X больше числа Y.";
else
if(X==Y)
cout<<"\nОшибка ввода. Число X равно числу Y.";
else
{
for(int i=0;i<10;i++) //Крутим цикл по индексам массивов
if(A[i]>X && A[i]<Y || B[i]>X && B[i]<Y) k++; // Если i'й элемент первого массива больше Х и меньше У или i'й элемент второго массива больше Х и меньше У, то кол-во найденных элементов увеличиваем на еденицу
cout<<"\n\nНайдено "<<k<<" элементов которые больше "<<X<<" и меньше "<<Y<<".\n";
}
}
Posted: 2007-10-21 01:28:02
by -=JoKeR=-
Спасиба, завтра буду пробовать перевести в паскаль. =)
Posted: 2007-10-21 16:28:35
by Edred
форумов по паскалю в инете море, что толку спрашивать на форуме инжекта? Я знаю паскаль, но голова счас гудит, неохота разбираться...
Posted: 2007-10-21 16:43:43
by Scripts Writer
Destruction wrote:А я такое на инжекте могу..

Code: Select all
sub main()
var X = ; сюда вбить число
var Y = ; и сюда число :)
DIM F[10]
DIM W[10]
; элементы массива 0-9 вбивать не стал.. суть и без них ясна :)
var i, counter = 0
for i = 0 to 9
if F[i] > X && F[i] < Y then
counter = counter + 1
endif
if W[i] > X && W[i] < Y then
counter = counter + 1
endif
next
uo.print( str( counter ) )
endsub
PS: А можно всех шокировать и "решить" "задачу" без циклов

Инкремент + условные,-альтернативный вариант цикла.
Можно и на АСМе написать через одни метки

Но в этом пока не силён
Posted: 2007-10-22 22:11:22
by -=JoKeR=-
Code: Select all
Program zadacha;
var
F,W:Array [1..10] of real;
k:integer;
x:real;
y:real;
Sf:real;
Sw:real;
Begin
Writeln('Введите X: ');
Readln(x);
Writeln('Введите Y: ');
Readln(y);
If x>y then
Writeln('Ошибка.Число X больше Y!!!')
else
if x=y then
Writeln('Ошибка.Число X равно Y!!!')
else
Sf:=0;
Sw:=0;
for k:=1 to 10 do
begin;
if (F[k]>=x) and (F[k]<=y) then
Sf:=k+1;
Writeln('Элементов больших X - ', Sf);
if (W[k]>=x) and (W[k]<=y) then
Sw:=k+1;
Writeln('Элементов меньших Y - ', Sw);
end;
End.
Не понимаю, вроде всё правельно, но оно не считает, т.е выдаёт 10 раз:
Элементов больших X - 0
Элементов меньших Y - 0
Posted: 2007-10-22 23:59:58
by Edred
А в массивах-то у тебя что? Ты их создал, а заполнять начальными значениями кто будет? Дядя Вася? Потому и сравнение не работает, сравнивать-то введенные числа не с чем.
Есть, похоже, еще одна ошибка в твоих рассуждениях:
Code: Select all
if (F[k]>=x) and (F[k]<=y) then
Sf:=k+1;
Writeln('Элементов больших X - ', Sf);
Вот это, что? Ты думаешь, это один условный оператор? Ни фига. Условный оператор заканчивается точкой с запятой. А команда Writeln выполняется всегда. Если ты хочешь, чтобы обе команды (и приращение, и вывод) выполнялись только при выполнении условия - заключи их в блок
begin ...
end;
Posted: 2007-10-23 01:53:14
by -=JoKeR=-
Edred wrote:А в массивах-то у тебя что? Ты их создал, а заполнять начальными значениями кто будет? Дядя Вася? Потому и сравнение не работает, сравнивать-то введенные числа не с чем.
Есть, похоже, еще одна ошибка в твоих рассуждениях:
Code: Select all
if (F[k]>=x) and (F[k]<=y) then
Sf:=k+1;
Writeln('Элементов больших X - ', Sf);
Вот это, что? Ты думаешь, это один условный оператор? Ни фига. Условный оператор заканчивается точкой с запятой. А команда Writeln выполняется всегда. Если ты хочешь, чтобы обе команды (и приращение, и вывод) выполнялись только при выполнении условия - заключи их в блок
begin ...
end;
Насчёт последнего ты имел ввиду это?
Code: Select all
if (F[k]>=x) and (F[k]<=y) then
begin
Sf:=k+1;
Writeln('Элементов больших X - ', Sf);
end;
if (W[k]>=x) and (W[k]<=y) then
begin
Sw:=k+1;
Writeln('Элементов меньших Y - ', Sw);
end;
А с массивами я чёта не понял как их заполнять.
Нам толком про массивы ничё не рассказали и я программирование только начал изучать.
В учебниках смотрел, но ничё не высмотрел.
Объясни пожалуста если не трудно по-конкретней что мне нужно зделать, как заполнить массив, или лучше зделай сам, а мне на наглядном примере будет легче понять и вас не буду беспокоить =)
Please

Posted: 2007-10-23 04:42:04
by Scripts Writer
Не ужели нет явной инициализации как в спп
Code: Select all
int A[]={1,2,3,4,5,6,7}; ([]-открытая граница т.к. сразу же задаём кол-во элементов)
или ввода с клавиатуры?
Code: Select all
int A[10];
for(int i=0;i<10;i++)
{
cin>>A;
cout<<i<<". A="<<A<<endl;
}
Posted: 2007-10-23 14:45:58
by -=JoKeR=-
Лучше пусть Edred, если ему не трудно, покажет на паскале, ато так не понятно. Потому что на паскале так, если я не ошибаюсь, нельзя
Code: Select all
int A[]={1,2,3,4,5,6,7}; ([]-открытая граница т.к. сразу же задаём кол-во элементов)
Posted: 2007-10-23 15:19:52
by Scripts Writer
-=JoKeR=- wrote:Лучше пусть Edred, если ему не трудно, покажет на паскале, ато так не понятно. Потому что на паскале так, если я не ошибаюсь, нельзя
Code: Select all
int A[]={1,2,3,4,5,6,7}; ([]-открытая граница т.к. сразу же задаём кол-во элементов)
В любом учебнике и электронном рерурсе 3, максимум 4 глава- массивы. Другое дело что тебе лень читать и ты ждёшь ответа здесь.
Posted: 2007-10-23 20:54:30
by -=JoKeR=-
Нет читать мне не лень. Я читал. Толку мне ждать, если я за это время могу сам это изучить. Но дело в том что я практически сам с ноля изучаю и мне некоторые моменты просто непонятны без наглядного примера. Поэтому и прошу вас о помощи.
Posted: 2007-10-23 22:55:54
by Edred
Попробуй так:
Code: Select all
Begin
F[1..10] := (0,1,2,3,4,5,6,7,8,9);
W[1..10] := (0,1,2,3,4,5,6,7,8,9);
Да, и измени:
Не понял я зачем тебе вещественные числа...
Posted: 2007-10-25 00:03:42
by -=JoKeR=-
Если зделать так
Code: Select all
F[1..10] := (0,1,2,3,4,5,6,7,8,9);
W[1..10] := (0,1,2,3,4,5,6,7,8,9);
то при запуске программа ругаеться что после
нехватает либо
] либо
.)
Posted: 2007-10-25 01:17:58
by Edred
кидай целиком измененную программу. Что-то ты не так сделал.
Posted: 2007-10-25 18:07:37
by -=JoKeR=-
Code: Select all
Program zadacha;
var
F,W:Array [1..10] of integer;
k:integer;
x:integer;
y:integer;
Sf:integer;
Sw:integer;
Begin
F[1..10]:=(0,1,2,3,4,5,6,7,8,9);
W[1..10]:=(0,1,2,3,4,5,6,7,8,9);
Writeln('Write X: ');
Readln(x);
Writeln('Write Y: ');
Readln(y);
If x>y then
Writeln('Error. Number X > Y !!!')
else
if x=y then
Writeln('Error. Number X = Y !!!')
else
Sf:=0;
Sw:=0;
for k:=1 to 10 do
begin;
if (F[k]>=x) and (F[k]<=y) then
begin
Sf:=k+1;
Writeln('Count elements > X = ', Sf);
end;
if (W[k]>=x) and (W[k]<=y) then
begin
Sw:=k+1;
Writeln('Count elements < Y = ', Sw);
end;
end;
End.
Posted: 2007-10-25 18:18:00
by Edred
Code: Select all
Program zadacha;
var
F,W:Array [1..10] of integer;
k:integer;
x:integer;
y:integer;
Sf:integer;
Sw:integer;
Begin
F[1..10]:=(0,1,2,3,4,5,6,7,8,9);
W[1..10]:=(0,1,2,3,4,5,6,7,8,9);
Тут все верно. Но все зависит от варианта комплятора для паскаля. На разных может быть способ инициализации массивов разный. Поинтересуйся, как инициализировать массивы у вас.
Я тебе что ранее про begin...end написал? Перечитай и подумай, где бы тебе еще в программе их расставить (в двух местах). Если, конечно, хочешь чтобы программа работала правильно.