Помогите пожалуйста решить задачу: "Даны целые числа а, n, x1, x2, x3,...,xn. Определить, каким по счету идет в последовательности х1, х2, хn член, равный а. Если такого члена нет, то ответом должен быть ноль." Я в массивах почти ничего не понимаю, проболел эту тему. Сам пробовал написать, по шаблонам, так у меня либо программа вовсе не компилировалась, либо Nod32 яростно матерился на программу)
RathaR
11.11.2009 5:33
Уточнение: а если членов равных а будет больше одного? вывести номер первого?
Фактически тебе надо пройтись по масиву, и сравнить каждый его элемент с а, и если он ровняеться а, то запомнить его номер. Естественно лучше всего это выполнить в цыкле с параметром, цыкл
For I:=1to N do
где N - длина последовательности; Тоесть, из чего должна состоять програма: 1) - блок описания переменных, где у тебя будет обьявлено 3 переменных целого типа А,N,K - переменная в которую ты запишешь результат , и масив заведомо большей длинны(в условии должна быть указана макс. длинна последовательности). 2) - ввод переменных а, N, и ввод масива - это я думаю не нужно розъяснять; 3) - один цыкл:
For I:=1to N doIf Mas[I]=a then K:=I;
4) Вывод
Хотя, по поводу ввода масива: для того чтобы ввести массив с экрана необходимо знать его длинну, тоесть сначала вводишь переменную N
Далее ввод массива осуществляеться в цыкле с параметром, в котором ты N раз повторяеш операцию чтения єлемента массива:
for I:=1to N dobegin
writeln('Введите ', I,'-ый член последовательности');
read(Mas[I]);
end;
Как видишь обращение к элементам масива происходит точно также как и к строкам... Обьявлять массив я думаю ты умеешь...
З.Ы.
Цитата
Если такого члена нет, то ответом должен быть ноль."
розберись сам как поступать в этом случае, как определить нашли мы элемент равный а или нет...
vovka239
12.11.2009 22:27
У меня не получается, я не знаю как можно объявить массив в переменной, а потом указать ему 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:=1to100do
writeln('vvedite', i,');
read(i);/*Я вообще не понимаю эти 2 строки, для чего они? Хотя если их убрать, то становится интересней и непонятней как отрабатывается код*/BeginIf Mas[i]=A then n:=i;
Writeln(n);
readln
EndEnd.
Пока переписывал код на форум, ещё много пробовал, так что записал может чуть не так. Помогите пожалуйста разобраться..
RathaR
12.11.2009 22:54
для того чтобы обьявить массив тебе необходимо заранее знать его длинну, она должна быть в условии, например 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:=1to K dobegin{<========= иначе будет отрабатывать только один оператор}
writeln('Введите', i,'-ый член последовательности');
read(Mas[i]); {<===в цыкле считываеш каждый введённый елемент}end;
for I:=1to K do{<==== в цыкле пробегаешся по всему масиву}If Mas[i]=A then n:=i;
Writeln(n);
readln
End.
Гость
13.11.2009 0:18
Спасибо большое!!!:) Так вроде логику понял, но смутно. Наверное если будет задача с чуть другим условием решить пока не смогу...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.