1 / 1 / 0 Регистрация: 22.12.2019 Сообщений: 36 |
|
1 |
|
Номер последнего чётного элемента массива, как определить?04.03.2020, 18:43. Показов 3614. Ответов 11
Приветствую, по учёбе проходится тема с массивами, не могу понять, как определить последний чётный элемент в массиве и вывести его индекс, прошу помощи. Спасибо.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
04.03.2020, 18:43 |
11 |
1467 / 1008 / 456 Регистрация: 30.10.2017 Сообщений: 2,793 |
|
04.03.2020, 18:46 |
2 |
del
0 |
Diamante 3458 / 2465 / 1170 Регистрация: 14.08.2016 Сообщений: 8,160 |
||||
04.03.2020, 18:50 |
3 |
|||
Решение
0 |
QuakerRUS 1467 / 1008 / 456 Регистрация: 30.10.2017 Сообщений: 2,793 |
||||
04.03.2020, 18:57 |
4 |
|||
0 |
1 / 1 / 0 Регистрация: 22.12.2019 Сообщений: 36 |
|
04.03.2020, 19:08 [ТС] |
5 |
Diamante, а как в данной ситуации к i добавить ещё одну единицу?
0 |
Enifan 1842 / 1184 / 501 Регистрация: 14.10.2018 Сообщений: 3,179 |
||||
04.03.2020, 19:16 |
6 |
|||
к i добавить ещё одну единицу
0 |
sancez2 1 / 1 / 0 Регистрация: 22.12.2019 Сообщений: 36 |
||||
04.03.2020, 19:20 [ТС] |
7 |
|||
При i + 1 добавляется непонятно что. Вот сам код:
0 |
1842 / 1184 / 501 Регистрация: 14.10.2018 Сообщений: 3,179 |
|
04.03.2020, 19:42 |
8 |
sancez2, не, вы не поняли, вам дали 2 разных кода из 3 и 4 постов, а вы их смешали. Используйте что то одно.
0 |
1 / 1 / 0 Регистрация: 22.12.2019 Сообщений: 36 |
|
04.03.2020, 20:41 [ТС] |
9 |
Просто первый код выводит сам элемент, а в второй его номер, вот я и подумал. Работает всё правильно, как нужно, в случае, если отсчет в массиве начинается с нуля, без использования i + 1 выводится верный номер, если считать с нуля. Добавлено через 18 минут
0 |
1467 / 1008 / 456 Регистрация: 30.10.2017 Сообщений: 2,793 |
|
04.03.2020, 23:42 |
10 |
Просто первый код выводит сам элемент Нет, он выдает индекс. sancez2, если используете мой код, то строки 24-27 и 29-31 лишние.
i + 1 Не забывайте, что индексы в C# начинаются с нуля.
0 |
1 / 1 / 0 Регистрация: 22.12.2019 Сообщений: 36 |
|
05.03.2020, 00:17 [ТС] |
11 |
Я использовал только код из первого сообщения, которое Вы удалили, чтобы вывести сам элемент массива, а потом взял уже другой код от Diamante, т.е. я объединил их. Насчёт элементов массива, я писал о том, что не пойму, как добавить единицу, т.к. нумерация начинается с нуля, она добавлялась просто доп. элементом справа, а потом понял, что i + 1 нужно записать в скобках, так что всё нормально, спасибо) Глядя на косяки, ничего страшного особо нет в этом, эти работы делаются для сдачи на учёбе)
0 |
1467 / 1008 / 456 Регистрация: 30.10.2017 Сообщений: 2,793 |
|
05.03.2020, 00:35 |
12 |
т.е. я объединил их Этого не стоило делать, по крайней мере сделали вы это неверно.
эти работы делаются для сдачи на учёбе Ну, если у вас преподаватель принимает некорректные решения, то тогда ладно.
0 |
I want to find the index of the last element containing an even number in an array, A, with ‘length’ number of elements.
For example, for A = {1, 2, 4, 5, 7}
we would return 2 as the value 4 is the last even number and it is at index 2 in the array.
I am required to use a for loop where the fewest number of elements need to be tested, where the first line follows the format:
for ( i = ??; i > ??; i = ??)
I think there’s something wrong with the first line of my code but I don’t know how to fix it.
for ( i = length-1; i >= 0; i = i-1) {
if ( A[i] % 2 == 0) { // value mod 2 = 0 indicates even
return i;
}
error: subscripted value is neither array nor pointer nor vector
'if (A[i]% 2==0) { // value mod 2 = 0 indicates even'
Gerhardh
10.7k3 gold badges13 silver badges36 bronze badges
asked May 16, 2019 at 7:28
5
Here is how I would write it:
int num = -1;
for ( i = length-1; i > -1; i = i-1) {
//Check if the array is even
if( A[i] % 2 == 0 )
// If it hasn't found an even number yet, automatically set num equal to the index
// This avoids accessing the element in the "-1" position in the array which would
// give an error
if( num == -1 )
num = i;
// If the element at the 'i' position is greater than the previous greatest element
// then set num equal to the index
else if( A[i] > A[num] )
num = i;
}
// It will return -1 if an even number isn't found
return num;
This will work if A is an array. It sounds like A currently isn’t the array you’re thinking it is; it may be an array of arrays or something similar. If you post the rest of your code it will help to resolve the error.
This answer may help you with your error
answered May 16, 2019 at 12:27
Размещено 3 года назад по предмету
Информатика
от GrandKapital
-
Ответ на вопрос
Ответ на вопрос дан
HappyCoderCodePascal
- const
- amax = 100;
- var
- a: array [1..amax] of integer;
- i, n, ch, num: integer;
- begin
- Writeln(‘Введите размер массива’);
- Readln(n);
- ch := 0;
- Writeln(‘Исходный массив’);
- for i := 1 to n do
- begin
- a[i] := Random(1, 100);
- Write(a[i], ‘ ‘);
- if not odd(a[i]) then begin
- ch := a[i];
- num := i;
- end;
- end;
- Writeln;
- writeln(‘Последний четный элемент массива: ‘, ch, ‘[‘, num, ‘]’);
- end.
Тестовое решение:
Введите размер массива
10
Исходный массив
58 50 43 68 74 45 74 20 83 11
Последний четный элемент массива: 20[8]
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Ответ:
const n=10;
var a:array [1..n] of integer;
i,s:integer;
begin
s:=0;
for i:=1 to n do begin
write(‘Введите значение ‘,i,’-го элемента массива: ‘); readln(a[i]);
if a[i] mod 2 = 0 then s:=i;
end;
if s = 0 then write(‘В массиве нет чётных чисел’)
else write(‘Последний чётный элемент массива: ‘, a[s]);
end.
uses crt; const nmax=100; var a:array[1..nmax] of integer; n,i,i1,ip:integer; begin clrscr; randomize; repeat write('Размер массива до ',nmax,' n='); readln(n); until n in [1..nmax]; i1:=0; ip:=0; writeln('Исходный массив:'); for i:=1 to n do begin a[i]:=random(50)-25; write(a[i]:4); if(a[i] mod 2=0)then{если четный} begin if i1=0 then i1:=i{и еще не было, то первый} else ip:=i;{иначе последний} end; end; writeln; if i1=0 then write('В массиве нет четных элементов') else begin if ip=0 then ip:=i1;{если второго не нашли, значит последний=первому} write('Первый четный a[',i1,']=',a[i1],' последний a[',ip,']=',a[ip]); end; readln end.