Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
3 / 3 / 0
Регистрация: 18.03.2010
Сообщений: 32
1

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

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

Author24 — интернет-сервис помощи студентам
Подскажите, что делаю не так.
Задача:
Определить номер и значение первого отрицательного элемента в массиве 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2011, 09:01
Ответы с готовыми решениями:

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

Не могу найти ошибку в массиве
Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). В слове, котором...

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

Из массива А удилать элементы встерчающиеся в массиве В, не могу найти ошибку
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define C 10 #define D 5 int main(int argc, char...

31
167 / 166 / 46
Регистрация: 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
3 / 3 / 0
Регистрация: 18.03.2010
Сообщений: 32
21.05.2011, 09:24  [ТС] 3
Спасибо. Значение отрицательного элемента находит, но последнего введенного, а как сделать чтобы выдавала первого и номер элемента в массива в котором это значение хранится?
0
298 / 298 / 150
Регистрация: 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
3 / 3 / 0
Регистрация: 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
41 / 41 / 10
Регистрация: 22.05.2009
Сообщений: 492
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
298 / 298 / 150
Регистрация: 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
3 / 3 / 0
Регистрация: 18.03.2010
Сообщений: 32
21.05.2011, 13:51  [ТС] 8
From_Tula, Спасибо!!! Я наверное с этими массивами никогда не разберусь
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
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
3 / 3 / 0
Регистрация: 18.03.2010
Сообщений: 32
23.05.2011, 08:21  [ТС] 10
Народ, а не поможете сделать программку, которая находила бы сумму элементов массива, с четными индексами?
0
167 / 166 / 46
Регистрация: 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
773 / 578 / 324
Регистрация: 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
3 / 3 / 0
Регистрация: 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
773 / 578 / 324
Регистрация: 17.06.2009
Сообщений: 1,188
23.05.2011, 20:08 14
punser, мой вариант вам тоже не помог?
0
3 / 3 / 0
Регистрация: 18.03.2010
Сообщений: 32
23.05.2011, 20:48  [ТС] 15
Цитата Сообщение от STGE Посмотреть сообщение
punser, мой вариант вам тоже не помог?
Ваш вообще запускаться не захотел

Добавлено через 35 минут
Цитата Сообщение от punser Посмотреть сообщение
if(i % 2 == 0)
sum +=mas[i];
Нифига не понимаю . Ведь данные 2 строки показывают, что если остаток от деления равен нулю, то складываем элементы. Тогда почему он складывает нечетные, ведь при делении нечетного числа на 2 остаток никогда не будет ноль?
0
298 / 298 / 150
Регистрация: 07.05.2011
Сообщений: 592
23.05.2011, 21:20 16
punser, Есть две большие разницы: нечетные элементы и элементы с нечетными индексами
0
3 / 3 / 0
Регистрация: 18.03.2010
Сообщений: 32
23.05.2011, 21:30  [ТС] 17
Цитата Сообщение от lamed Посмотреть сообщение
punser, Есть две большие разницы: нечетные элементы и элементы с нечетными индексами
Так ведь как раз здесь проверяются индексы.
0
298 / 298 / 150
Регистрация: 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
Да уж.........
В языке Си истиной считается НЕНУЛЕВОЕ выражение.
Поэтому цикл считает-таки сумму с нечетными индексами
1
167 / 166 / 46
Регистрация: 10.10.2010
Сообщений: 725
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
0
773 / 578 / 324
Регистрация: 17.06.2009
Сообщений: 1,188
24.05.2011, 00:08 20
Цитата Сообщение от lamed Посмотреть сообщение
Да уж.........
В языке Си истиной считается НЕНУЛЕВОЕ выражение.
Поэтому цикл считает-таки сумму с нечетными индексами
lamed, я организовал массив (и соответстветствующий ему цикл) начиная индексацию с 0, а непосредственно при выводе я рассматривал элементы, каждый индекс которого на 1 больше реального, т.е.: при проверке условия i%2 (допустим для элемента (который при выводе имет индекс = 1) с индексом 0) мы получаем false (что равнозначно 0), а значит для 1-ого (т.е. при выводе индекс = 1) условие истинности не выполняется и следовательно индекс элемента можно смело признать нечётным.
0
24.05.2011, 00:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2011, 00:08
Помогаю со студенческими работами здесь

Поиск нулей в двумерном массиве. Не могу найти ошибку в коде
Дан двумерный массив. Заполнен единицами и нулями. Например такой: 0 0 1 1 1 0 1 1 1 ...

посчитать количество символов в массиве, не могу найти ошибку, поссмотрите плз)
19. Дан массив символов. Подсчитать, сколько в нем букв r, k, t. #include &lt;stdio.h&gt; #include...

Найти количество чисел в массиве кратным 3 и НЕкратным 5 (не могу исправить ошибку)
я сделал что если mod 3 = 0 тогда x:=x+1 то есть будет определять количество, но если встретится в...

В массиве поменять местами первый и мин элемент (не могу найти ошибку)
Задание в массиве поменять местами 1 и мин элемент. Помогите найти ошибку. Если можно подскажите...

Удалить все строки в двумерном массиве, содержащие только нечетные элементы. (Не могу найти ошибку.)
Задание: Удалить все строки в двумерном массиве, содержащие только нечетные элементы. Не могу...

Не могу исправить ошибку в массиве(
Доброго времени суток. Условие задачи: 61. Описать процедуру Gauss(A,M,N,i1,i2,X), преобразующую...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru