IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Одномерные массивы, Подскажите где ошибка
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


В одномерном массиве, состоящем из n целых элементов вычислить:
1)Номер максимального элемента массива
2)Произведение элементов массива, расположенных между первым и вторым нулевыми элементами
Массив преобразовать таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечётных позициях, а во второй половине - элементы, стоявшие в чётных позициях.

Вот прога, но если нулевых элементов нет, то вместо сообщения "нулевых элементов нет" почему-то выводится сообщение "второго нулевого элемента нет"? Может кто-нибудь знает как это исправить???
# include <iostream.h>
# include <stdlib.h>
void main()
{
const int n=10;
int i,a[n],b[n],y;
cout<<endl<<"Isxodnii massiv:\n";
randomize();
for (i=0;i<n;i++)
{
a[i]=random(50)-25;
cout<<a[i]<<' ';
}
int t;
for (i=0;i<n-1;i+=2)
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
for (int k=1;k<=n/2;++k)
for (int c=0;c<((n%2==1 && k==n/2)? 2:1);++c)
{
t=a[k];
for (i=k+1;i<n;++i) a[i-1]=a[i];
a[n-1]=t;
}
cout<<"\nPreobrazovannii massiv:\n";
for (i=0;i<n;i++)
cout<<a[i]<<' ';
int imax=0;
for (i=1;i<n;i++)
if (a[i]>a[imax]) imax=i;
cout<<"\nNomer maksimalnogo elementa massiva="<<imax;
int zero1,zero2=0;
y=1;
for (i=1;a[i]!=0;i++)
{
if (i>n)
{
cout<<"\nNulevix elementov net!\n";
return;
}
}
if (a[i]==0) zero1=i;
int p=zero1+1;
for (;a[p]!=0;p++)
{
if (p>n)
{
cout<<"\nVtorogo nulevogo elementa net!\n";
return;
}
}
if (a[p]==0) zero2=p;
if ((zero1==i) && (zero2==i+1))
{
cout<<"\nElementov mezhdy nulevimi elementami net!\n";
return;
}
zero1+=1;
while (zero1<zero2)
{
y*=a[zero1];
zero1+=1;
}
cout<<"\nProizvedenie elementov massiva="<<y;
}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Вторую часть программы я бы сделал так:

...
int imax=0;
for (i=1;i<n;i++)
if (a[i]>a[imax]) imax=i;
cout<<"\nNomer maksimalnogo elementa massiva="<<imax;

int p, zero1 = 0;
for(i = 1; a[i]; i += 1);
if(i == n) {
cout << "\nNulevix elementov net!\n";
}
else {
zero1 = i;
for(p = zero1 + 1; (p < n) && a[p]; p += 1);
if(p == n) {
cout << "\nVtorogo nulevogo elementa net!\n";
}
else {
if(p == zero1 + 1) {
cout << "\nElementov mezhdy nulevimi elementami net!\n";
}
else {
for(y = 1, i = zero1 + 1; a[i]; ++i) y *= a[i];
cout << "\nProizvedenie elementov massiva=" << y;
}
}
}
...



Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Спасибо, но я просто изменил в бывшей проге if (i>n) на if (i==n) и так далее, и прога стала правильно работать! lol.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.12.2020 19:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name