Форум программистов, компьютерный форум CyberForum.ru

Не могу найти ошибку в массиве - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
21.05.2011, 09:01     Не могу найти ошибку в массиве #1
Подскажите, что делаю не так.
Задача:
Определить номер и значение первого отрицательного элемента в массиве mas(n). Предусмотреть в программе вывод сообщения, если таковой отсутствует
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
#include<iostream.h>
#include<constrea.h>
void main()
{
int i,a;
const n=5;
float mas[n];
for(i=0; i<n; i++)
cin>>mas[i];
do
{
if (mas[i]<0)
mas[i]=a;
else
cout<<"Otricatelnyh elementov net";
i++;
}
while(i<n);
cout<<a;
getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
21.05.2011, 09:06     Не могу найти ошибку в массиве #2
C++
1
2
for(i=0; i<n; i++)
cin>>mas[i];
Чему равно i после этого?
Перед входом в do{}while(); обнулите i.
Вы присваиваете в 15 строчке элементу массива какое-то значение a,которое компилятор может взять из памяти,но это мусор,а не ваш отрицательный элемент.
Попробуйте так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
#include<iostream.h>
#include<constrea.h>
void main()
{
int i,a;
const n=5;
float mas[n];
for(i=0; i<n; i++)
cin>>mas[i];
i = 0;//обнуляем i для счетчика
do
{
if (mas[i]<0);
a = mas[i]; // операции присваивания справа налево идут!у вас было наоборот.
else
cout<<"Otricatelnyh elementov net";
i++;
}
while(i<n);
cout<<a;
getch();
}
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
21.05.2011, 09:24  [ТС]     Не могу найти ошибку в массиве #3
Спасибо. Значение отрицательного элемента находит, но последнего введенного, а как сделать чтобы выдавала первого и номер элемента в массива в котором это значение хранится?
lamed
297 / 297 / 71
Регистрация: 07.05.2011
Сообщений: 592
21.05.2011, 09:26     Не могу найти ошибку в массиве #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
//#include<constrea.h>
using namespace std;
 
int main()
{
    int i;
    const int n=5;
    float mas[n];
    for(i=0; i<n; i++)
        cin>>mas[i];
 
    i=-1;
    do
    {
        i++;
    }
    while(i<n && mas[i]>=0);
 
    if (i==n)
        cout<<"Otricatelnyh elementov net" << endl;
    else
        cout << i << ' ' << mas[i] << endl;
 
//    getch();
    return 0;
}
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
21.05.2011, 12:51  [ТС]     Не могу найти ошибку в массиве #5
lamed, спасибо, буду разбираться

Добавлено через 3 часа 20 минут
Цитата Сообщение от lamed Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
//#include<constrea.h>
using namespace std;
 
int main()
{
    int i;
    const int n=5;
    float mas[n];
    for(i=0; i<n; i++)
        cin>>mas[i];
 
    i=-1;
    do
    {
        i++;
    }
    while(i<n && mas[i]>=0);
 
    if (i==n)
        cout<<"Otricatelnyh elementov net" << endl;
    else
        cout << i << ' ' << mas[i] << endl;
 
//    getch();
    return 0;
}
А как из этого сделать, чтобы находил не первый отрицательный элемент, а первый положительный?
From_Tula
40 / 40 / 2
Регистрация: 22.05.2009
Сообщений: 469
21.05.2011, 13:30     Не могу найти ошибку в массиве #6
C++
1
2
3
4
5
6
7
8
9
10
do
    {
        i++;
    }
    while(i<n && mas[i]<0);
 
    if (i==n)
        cout<<"Poloshitelnyh elementov net" << endl;
    else
        cout << i << ' ' << mas[i] << endl;
lamed
297 / 297 / 71
Регистрация: 07.05.2011
Сообщений: 592
21.05.2011, 13:44     Не могу найти ошибку в массиве #7
C++
1
2
3
4
5
6
/.....
while(i<n && mas[i]<=0);
 
    if (i==n)
        cout<<"Pologitelnyh elementov net" << endl;
//.......
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
21.05.2011, 13:51  [ТС]     Не могу найти ошибку в массиве #8
From_Tula, Спасибо!!! Я наверное с этими массивами никогда не разберусь
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
21.05.2011, 15:33     Не могу найти ошибку в массиве #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <algorithm>
 
int main()
{
   const size_t n=5;
   float mas[n] = {1, -5, 4, -6};
   float *f = std::find_if(mas, mas+n, 
      [](float a)
      {
         return a < 0;
      }
   );
   if(f==mas+n)
      std::cout<<"negative values not found"<<std::endl;
   else
      std::cout<<"value = "<<*f<<"; index = "<< f - mas + 1<<std::endl; 
}
Добавлено через 5 минут
либо так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <algorithm>
#include <boost/lambda/lambda.hpp>
 
int main()
{
   const size_t n=5;
   float mas[n] = {1, -5, 4, -6};
   float *f = std::find_if(mas, mas+n, boost::lambda::_1 < 0 );
   if(f==mas+n)
      std::cout<<"negative values not found"<<std::endl;
   else
      std::cout<<"value = "<<*f<<"; index = "<< f - mas + 1<<std::endl; 
}
Добавлено через 4 минуты
либо так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <algorithm>
#include <functional>
 
int main()
{
   const size_t n=5;
   float mas[n] = {1, -5, 4, -6};
   float *f = std::find_if(mas, mas+n, std::bind2nd(std::less<float>(), 0) );
   if(f==mas+n)
      std::cout<<"negative values not found"<<std::endl;
   else
      std::cout<<"value = "<<*f<<"; index = "<< f - mas + 1<<std::endl; 
}
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
23.05.2011, 08:21  [ТС]     Не могу найти ошибку в массиве #10
Народ, а не поможете сделать программку, которая находила бы сумму элементов массива, с четными индексами?
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
23.05.2011, 18:32     Не могу найти ошибку в массиве #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include<iostream.h>
#include<constrea.h>
void main()
{
int i;
const n=5;
float sum,mas[n];
for(i=0; i<n; i++)
cin>>mas[i];
i = -1;
sum = 0;
do
{
i++;
if(i % 2 == 0)
sum +=mas[i];
}while(i < n);
getch();
}
На вскидку)Попробуйте,если не получится,то по этому алгоритму просто доработать программу)
STGE
 Аватар для STGE
770 / 576 / 91
Регистрация: 17.06.2009
Сообщений: 1,188
23.05.2011, 18:45     Не могу найти ошибку в массиве #12
Цитата Сообщение от punser Посмотреть сообщение
сделать программку, которая находила бы сумму элементов массива, с четными индексами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;
int main()
{
    const int n(10);
    int mas[n]={3,12,5,10,21,32,49,9,4,35},i,sum;
    cout<<"ishodnii massiv:"<<endl;
    for(i=0;i<=n-1;i++)
        cout<<"mas["<<i+1<<"]="<<mas[i]<<endl;
    for(i=0;i<=n-1;i++)
        if(i%2) sum+=mas[i];
        cout<<"summa elementov massiva s chetnimi indeksami = "<<sum;
    return 0;
}

punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
23.05.2011, 19:52  [ТС]     Не могу найти ошибку в массиве #13
Спасибо

Добавлено через 12 минут
Блин рано радовался . Ни одна не работает

Добавлено через 41 минуту
Цитата Сообщение от Rexer Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include<iostream.h>
#include<constrea.h>
void main()
{
int i;
const n=5;
float sum,mas[n];
for(i=0; i<n; i++)
cin>>mas[i];
i = -1;
sum = 0;
do
{
i++;
if(i % 2 == 0)
sum +=mas[i];
}while(i < n);
getch();
}
На вскидку)Попробуйте,если не получится,то по этому алгоритму просто доработать программу)
Блин считает нечетные элементы, а как замутить четные?
STGE
 Аватар для STGE
770 / 576 / 91
Регистрация: 17.06.2009
Сообщений: 1,188
23.05.2011, 20:08     Не могу найти ошибку в массиве #14
punser, мой вариант вам тоже не помог?
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
23.05.2011, 20:48  [ТС]     Не могу найти ошибку в массиве #15
Цитата Сообщение от STGE Посмотреть сообщение
punser, мой вариант вам тоже не помог?
Ваш вообще запускаться не захотел

Добавлено через 35 минут
Цитата Сообщение от punser Посмотреть сообщение
if(i % 2 == 0)
sum +=mas[i];
Нифига не понимаю . Ведь данные 2 строки показывают, что если остаток от деления равен нулю, то складываем элементы. Тогда почему он складывает нечетные, ведь при делении нечетного числа на 2 остаток никогда не будет ноль?
lamed
297 / 297 / 71
Регистрация: 07.05.2011
Сообщений: 592
23.05.2011, 21:20     Не могу найти ошибку в массиве #16
punser, Есть две большие разницы: нечетные элементы и элементы с нечетными индексами
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
23.05.2011, 21:30  [ТС]     Не могу найти ошибку в массиве #17
Цитата Сообщение от lamed Посмотреть сообщение
punser, Есть две большие разницы: нечетные элементы и элементы с нечетными индексами
Так ведь как раз здесь проверяются индексы.
lamed
297 / 297 / 71
Регистрация: 07.05.2011
Сообщений: 592
23.05.2011, 21:53     Не могу найти ошибку в массиве #18
Цитата Сообщение от STGE Посмотреть сообщение
if(i%2) sum+=mas[i];
cout<<"summa elementov massiva s chetnimi indeksami = "<<sum
Да уж.........
В языке Си истиной считается НЕНУЛЕВОЕ выражение.
Поэтому цикл считает-таки сумму с нечетными индексами
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
23.05.2011, 21:59     Не могу найти ошибку в массиве #19
номер первого элемента в массиве равен нулю.
у вас mas[0],mas[1],mas[2],mas[3],mas[4].
суммируются соответственно mas[0],mas[2],mas[4]
Если вам нужна сумма четных на экране,то условие ставьте такое.
Если четных в массиве,то оставляйте мое решение.
C++
1
2
if(i%2!=0)
sum+=mas[i];
Вот вам полный код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
using namespace std;
int main(void)
{
int i;
const int n = 5;
float sum,mas[n];
 
for(i=0; i<n; i++)
cin>>mas[i];
 
for(i=0; i<n; i++)
cout<<mas[i]<<" ";
 
i = -1;
sum = 0;
do
{
    i++;
    if(i % 2 != 0)
    sum +=mas[i];
}while(i < n);
cout<<endl<<sum;
}
Почитайте про массивы в с/с++,чтобы разобраться;D
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2011, 00:08     Не могу найти ошибку в массиве
Еще ссылки по теме:

Не могу найти ошибку C++
Не могу найти ошибку в массиве C++
Не могу найти ошибку C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
STGE
 Аватар для STGE
770 / 576 / 91
Регистрация: 17.06.2009
Сообщений: 1,188
24.05.2011, 00:08     Не могу найти ошибку в массиве #20
Цитата Сообщение от lamed Посмотреть сообщение
Да уж.........
В языке Си истиной считается НЕНУЛЕВОЕ выражение.
Поэтому цикл считает-таки сумму с нечетными индексами
lamed, я организовал массив (и соответстветствующий ему цикл) начиная индексацию с 0, а непосредственно при выводе я рассматривал элементы, каждый индекс которого на 1 больше реального, т.е.: при проверке условия i%2 (допустим для элемента (который при выводе имет индекс = 1) с индексом 0) мы получаем false (что равнозначно 0), а значит для 1-ого (т.е. при выводе индекс = 1) условие истинности не выполняется и следовательно индекс элемента можно смело признать нечётным.
Yandex
Объявления
24.05.2011, 00:08     Не могу найти ошибку в массиве
Ответ Создать тему
Опции темы

Текущее время: 06:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru