Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
#1

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

21.05.2011, 09:01. Просмотров 1283. Ответов 31
Метки нет (Все метки)

Подскажите, что делаю не так.
Задача:
Определить номер и значение первого отрицательного элемента в массиве 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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2011, 09:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу найти ошибку в массиве (C++):

Не могу найти ошибку с подсчетом суммы элементов в интервале[a,b] в динамическом одномерном массиве массиве. - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;iomanip&gt; #include &lt;stdio.h&gt; #include...

Не могу найти ошибку в массиве - C++
Добрый вечер. Никак не могу найти ошибку. Спасибо за помощь # include &lt;iostream&gt; # include &lt;math.h&gt; # include &lt;conio.h&gt; #...

Найти слова, повторяющиеся более одного раза, не могу найти ошибку - C++
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int i; int k; char *tm; for(i...

Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) - C++
// Заданы матрицы X(8;4),Y(5;5),Z(6;9). // Для каждой из матриц определить строку, в которой находится наименьшее // количество...

Не могу найти ошибку - C++
Задача: вывести элементы массива, которые повторяются ровно 2 раза #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; ...

Не могу найти ошибку - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace std; int _tmain() { ...

31
Rexer
163 / 162 / 20
Регистрация: 10.10.2010
Сообщений: 725
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();
}
1
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
21.05.2011, 09:24  [ТС] #3
Спасибо. Значение отрицательного элемента находит, но последнего введенного, а как сделать чтобы выдавала первого и номер элемента в массива в котором это значение хранится?
0
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;
}
1
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;
}
А как из этого сделать, чтобы находил не первый отрицательный элемент, а первый положительный?
0
From_Tula
40 / 40 / 2
Регистрация: 22.05.2009
Сообщений: 483
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;
0
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;
//.......
0
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
21.05.2011, 13:51  [ТС] #8
From_Tula, Спасибо!!! Я наверное с этими массивами никогда не разберусь
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
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; 
}
0
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
23.05.2011, 08:21  [ТС] #10
Народ, а не поможете сделать программку, которая находила бы сумму элементов массива, с четными индексами?
0
Rexer
163 / 162 / 20
Регистрация: 10.10.2010
Сообщений: 725
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();
}
На вскидку)Попробуйте,если не получится,то по этому алгоритму просто доработать программу)
1
STGE
770 / 575 / 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;
}

1
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();
}
На вскидку)Попробуйте,если не получится,то по этому алгоритму просто доработать программу)
Блин считает нечетные элементы, а как замутить четные?
0
STGE
770 / 575 / 91
Регистрация: 17.06.2009
Сообщений: 1,188
23.05.2011, 20:08 #14
punser, мой вариант вам тоже не помог?
0
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 остаток никогда не будет ноль?
0
23.05.2011, 20:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2011, 20:48
Привет! Вот еще темы с ответами:

Не могу найти ошибку - C++
ошибка в строке 24..не могу исправить. Помогите, пожалуйста. #include &lt;math.h&gt; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using...

Не могу найти ошибку! - C++
Пробую что-то вычудить..... не могу найти ошибку (просто интересно) #include &lt;iostream&gt; using namespace std; ...

Не могу найти ошибку - C++
В общем суть программы состоит в том чтобы решить нелинейное уравнение x3+x2-4x-4=0 двумя методами хорд и итераций, есть исходник , вот...

не могу найти ошибку - C++
ответ получается 0.386223 #include &lt;iostream.h&gt; #include&lt;math.h&gt; #include &lt;stdio.h&gt; void main() { int x= 14.26; int...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru