Page 1 of 2

Нужна помощь по паскалю

Posted: 2007-10-19 20:50:12
by -=JoKeR=-

Code: Select all

Для одномерных массивов F и W, которые состоят из 10 элементов целого типа каждый, подсчитать количество элементов, больших чем заданное число X и меньших числа Y ( X,Y - любые целые числа).

Вобщем вот такая задачка.
Вроде всё просто, но я не могу никак её реализовать.
Вот всё что я мог зделать, дальше туго вобще :oops:

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 :roll:

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);


Да, и измени:

Code: Select all

F,W:Array [1..10] of integer;


Не понял я зачем тебе вещественные числа...

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);

то при запуске программа ругаеться что после

Code: Select all

F[1

нехватает либо ] либо .)

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);


Тут все верно. Но все зависит от варианта комплятора для паскаля. На разных может быть способ инициализации массивов разный. Поинтересуйся, как инициализировать массивы у вас.

Code: Select all

  If ... then

  else
     ...


Я тебе что ранее про begin...end написал? Перечитай и подумай, где бы тебе еще в программе их расставить (в двух местах). Если, конечно, хочешь чтобы программа работала правильно.