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

Talk everything you want (no ads and spam)

Moderators: Murderator+, Murderator

-=JoKeR=-
Posts: 173
Joined: 2007-05-26 00:00:56
Location: Украина, Ode$$a:[X-TEAM Group]
Contact:

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

Post 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.

Помогите плиз, хотябы направьте в нужную сторону =)
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

На С++ без проблем, паскаль незнаю =)
-=JoKeR=-
Posts: 173
Joined: 2007-05-26 00:00:56
Location: Украина, Ode$$a:[X-TEAM Group]
Contact:

Post by -=JoKeR=- »

Жаль :(
-=JoKeR=-
Posts: 173
Joined: 2007-05-26 00:00:56
Location: Украина, Ode$$a:[X-TEAM Group]
Contact:

Post 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.
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post 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";
    }
 }
-=JoKeR=-
Posts: 173
Joined: 2007-05-26 00:00:56
Location: Украина, Ode$$a:[X-TEAM Group]
Contact:

Post by -=JoKeR=- »

Спасиба, завтра буду пробовать перевести в паскаль. =)
Image
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

форумов по паскалю в инете море, что толку спрашивать на форуме инжекта? Я знаю паскаль, но голова счас гудит, неохота разбираться...
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post 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: А можно всех шокировать и "решить" "задачу" без циклов :)


Инкремент + условные,-альтернативный вариант цикла.
Можно и на АСМе написать через одни метки :) Но в этом пока не силён
-=JoKeR=-
Posts: 173
Joined: 2007-05-26 00:00:56
Location: Украина, Ode$$a:[X-TEAM Group]
Contact:

Post 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
Image
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

А в массивах-то у тебя что? Ты их создал, а заполнять начальными значениями кто будет? Дядя Вася? Потому и сравнение не работает, сравнивать-то введенные числа не с чем.

Есть, похоже, еще одна ошибка в твоих рассуждениях:

Code: Select all

if (F[k]>=x) and (F[k]<=y) then 
                Sf:=k+1;
                Writeln('Элементов больших X - ', Sf);


Вот это, что? Ты думаешь, это один условный оператор? Ни фига. Условный оператор заканчивается точкой с запятой. А команда Writeln выполняется всегда. Если ты хочешь, чтобы обе команды (и приращение, и вывод) выполнялись только при выполнении условия - заключи их в блок begin ... end;
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
-=JoKeR=-
Posts: 173
Joined: 2007-05-26 00:00:56
Location: Украина, Ode$$a:[X-TEAM Group]
Contact:

Post 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:
Image
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post 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;
 }
-=JoKeR=-
Posts: 173
Joined: 2007-05-26 00:00:56
Location: Украина, Ode$$a:[X-TEAM Group]
Contact:

Post by -=JoKeR=- »

Лучше пусть Edred, если ему не трудно, покажет на паскале, ато так не понятно. Потому что на паскале так, если я не ошибаюсь, нельзя

Code: Select all

int A[]={1,2,3,4,5,6,7}; ([]-открытая граница т.к. сразу же задаём кол-во элементов)
Image
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

-=JoKeR=- wrote:Лучше пусть Edred, если ему не трудно, покажет на паскале, ато так не понятно. Потому что на паскале так, если я не ошибаюсь, нельзя

Code: Select all

int A[]={1,2,3,4,5,6,7}; ([]-открытая граница т.к. сразу же задаём кол-во элементов)


В любом учебнике и электронном рерурсе 3, максимум 4 глава- массивы. Другое дело что тебе лень читать и ты ждёшь ответа здесь.
-=JoKeR=-
Posts: 173
Joined: 2007-05-26 00:00:56
Location: Украина, Ode$$a:[X-TEAM Group]
Contact:

Post by -=JoKeR=- »

Нет читать мне не лень. Я читал. Толку мне ждать, если я за это время могу сам это изучить. Но дело в том что я практически сам с ноля изучаю и мне некоторые моменты просто непонятны без наглядного примера. Поэтому и прошу вас о помощи.
Image
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

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


Не понял я зачем тебе вещественные числа...
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
-=JoKeR=-
Posts: 173
Joined: 2007-05-26 00:00:56
Location: Украина, Ode$$a:[X-TEAM Group]
Contact:

Post 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

нехватает либо ] либо .)
Image
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

кидай целиком измененную программу. Что-то ты не так сделал.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
-=JoKeR=-
Posts: 173
Joined: 2007-05-26 00:00:56
Location: Украина, Ode$$a:[X-TEAM Group]
Contact:

Post 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.
Image
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post 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 написал? Перечитай и подумай, где бы тебе еще в программе их расставить (в двух местах). Если, конечно, хочешь чтобы программа работала правильно.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
Post Reply