Помощь - Поиск - Пользователи - Календарь
Полная версия: Массивы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
vovka239
Помогите пожалуйста решить задачу:
"Даны целые числа а, n, x1, x2, x3,...,xn. Определить, каким по счету идет в последовательности х1, х2, хn член, равный а. Если такого члена нет, то ответом должен быть ноль."
Я в массивах почти ничего не понимаю, проболел эту тему. Сам пробовал написать, по шаблонам, так у меня либо программа вовсе не компилировалась, либо Nod32 яростно матерился на программу)
RathaR
Уточнение: а если членов равных а будет больше одного? вывести номер первого?

Фактически тебе надо пройтись по масиву, и сравнить каждый его элемент с а, и если он ровняеться а, то запомнить его номер. Естественно лучше всего это выполнить в цыкле с параметром, цыкл
For I:=1 to N do

где N - длина последовательности;
Тоесть, из чего должна состоять програма:
1) - блок описания переменных, где у тебя будет обьявлено 3 переменных целого типа А,N,K - переменная в которую ты запишешь результат , и масив заведомо большей длинны(в условии должна быть указана макс. длинна последовательности).
2) - ввод переменных а, N, и ввод масива - это я думаю не нужно розъяснять;
3) - один цыкл:
For I:=1 to N do
If Mas[I]=a then K:=I;


4) Вывод

Хотя, по поводу ввода масива:
для того чтобы ввести массив с экрана необходимо знать его длинну, тоесть сначала вводишь переменную N
writeln('Введите кол-во елементов массива');
read(N);

Далее ввод массива осуществляеться в цыкле с параметром, в котором ты N раз повторяеш операцию чтения єлемента массива:

for I:=1 to N do
begin
writeln('Введите ', I,'-ый член последовательности');
read(Mas[I]);
end;


Как видишь обращение к элементам масива происходит точно также как и к строкам...
Обьявлять массив я думаю ты умеешь...

З.Ы.
Цитата
Если такого члена нет, то ответом должен быть ноль."
розберись сам как поступать в этом случае, как определить нашли мы элемент равный а или нет...
vovka239
У меня не получается, я не знаю как можно объявить массив в переменной, а потом указать ему N:

Var 
Mas : array [1..N] of integer;
Begin
Writeln('vvedite N:');
Read(N);
End.


Выдаёт ошибку.
Решил пока попробовать явно задать массив чтоб хоть как-то работало. Но в итоге тоже лажа какая получилась:
program Project1;
Var 
Mas : Array [1..100] Of Integer;
a : Integer;
n : Integer;
i : Integer;
Begin
writeln('vvedite a:');
read(a);
For i:=1 to 100 do
writeln('vvedite', i,'); 
 read(i);/*Я вообще не понимаю эти 2 строки, для чего они? Хотя если их убрать, то становится интересней и непонятней как отрабатывается код*/
Begin
If Mas[i]=A then n:=i;
Writeln(n);
readln
End
End.


Пока переписывал код на форум, ещё много пробовал, так что записал может чуть не так.
Помогите пожалуйста разобраться..
RathaR
для того чтобы обьявить массив тебе необходимо заранее знать его длинну, она должна быть в условии, например 0<n<100.
Когда обьявляеш можешь писать так как ты сделал, а можешь так:
const 
n=100;
var
Mas:array[1..n] of integer; 


Терь по поводу кода, что ты привёл:
program Project1;
Var 
Mas : Array [1..100] Of Integer;
a : Integer;
n : Integer;
i : Integer;
k:integer;
Begin
writeln('vvedite a:');
read(a);
writeln('Vvedite K');  {<===== К - кол-во членов последовательности, меньше 100}
read(K);
For i:=1 to K do
begin {<========= иначе будет отрабатывать только один оператор}
  writeln('Введите', i,'-ый член последовательности'); 
  read(Mas[i]);                {<===в цыкле считываеш каждый введённый елемент}
end;
for I:=1 to K do  {<==== в цыкле пробегаешся по всему масиву}
If Mas[i]=A then n:=i;
Writeln(n);
readln
End.
Гость
Спасибо большое!!!:) Так вроде логику понял, но смутно. Наверное если будет задача с чуть другим условием решить пока не смогу...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.