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