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

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

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

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

21.05.2011, 09:01. Просмотров 1247. Ответов 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() { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lamed
297 / 297 / 71
Регистрация: 07.05.2011
Сообщений: 592
23.05.2011, 21:20 #16
punser, Есть две большие разницы: нечетные элементы и элементы с нечетными индексами
0
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
23.05.2011, 21:30  [ТС] #17
Цитата Сообщение от lamed Посмотреть сообщение
punser, Есть две большие разницы: нечетные элементы и элементы с нечетными индексами
Так ведь как раз здесь проверяются индексы.
0
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
Да уж.........
В языке Си истиной считается НЕНУЛЕВОЕ выражение.
Поэтому цикл считает-таки сумму с нечетными индексами
1
Rexer
163 / 162 / 20
Регистрация: 10.10.2010
Сообщений: 724
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
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) условие истинности не выполняется и следовательно индекс элемента можно смело признать нечётным.
0
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
24.05.2011, 14:59  [ТС] #21
Rexer,
Вот что получается, если использовать Ваш код:
http://i22.***********/big/2011/0524/...c36d1c31a4.jpg
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.05.2011, 15:09 #22
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#define size 10
int s,n[size],i;
int main(){
    while (i < size)
        std::cin >> n[i++];
    for (i=1; i < size; i+=2)   //2,4,6,8...
        s+=n[i];
    std::cout << s;
    return 0;
}
0
Rexer
163 / 162 / 20
Регистрация: 10.10.2010
Сообщений: 724
24.05.2011, 15:12 #23
У меня в codeblocks получается 2.Вы точно мой код скопировали?
Попробуйте так тогда
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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]<<" ";
 
sum = 0;
for(i = 0;i < n;i++)
{
if(i%2!=0)
 sum+=mas[i];
}
cout<<endl<<sum;
}
Хотя я ,если честно,не понимаю,почему у вас выводится такой ответ.
1
punser
3 / 3 / 1
Регистрация: 18.03.2010
Сообщений: 32
24.05.2011, 15:38  [ТС] #24
Rexer, Огромное спасибо!!! Этот вариант работает. Еще вопросик, а что за строчка
C++
1
using namespace std
. У меня с ней ошибку выкидывает, а когда удаляю всё работает?
0
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
24.05.2011, 15:43 #25
Цитата Сообщение от punser Посмотреть сообщение
Rexer, Огромное спасибо!!! Этот вариант работает. Еще вопросик, а что за строчка
C++
1
using namespace std
. У меня с ней ошибку выкидывает, а когда удаляю всё работает?
это хорошо что ошибка.
использование этой строчки вредит карме.
где-то на форуме описана насильственная привязка к кодировке
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.05.2011, 15:46 #26
Т.е. у вас компилируется cin/cout/etc без
C++
1
using namespace std;
Чудеса...
В любом случае, удалите свою IDE
0
silent_1991
24.05.2011, 16:27
  #27

Не по теме:

Цитата Сообщение от diagon Посмотреть сообщение
Чудеса...
Эти чудеса название имеют - Borland...

0
diagon
24.05.2011, 16:37
  #28

Не по теме:

Это да, я вот очень долго думал, что на проверяющей системе ******** не работает iostream, т.к. у меня компилировалось, а у них нет... Я на си около 30 задач там сдал, пока не узнал истину=)
Но имхо как IDE билдер удобнее MSVS будет. Сейчас на линукс пересел, после билдера на code::blocks и эклипсе крайне неудобно писать.

0
Rexer
163 / 162 / 20
Регистрация: 10.10.2010
Сообщений: 724
24.05.2011, 16:52 #29
C++
1
using namespace std
это стандартное пространство имен,его лучше не использовать,лучше писать так
C++
1
std::cout<<sum;
,то что я написал считается плохим тоном и почти ошибкой
я написал,чтобы быстрее пример посмотреть,программа у вас маленькая же.
Почему у вас компилируется программа без этой строчки я не понимаю,скорее всего это ваш IDE чудит)
Первый вариант программы моей тоже рабочий,но ваш компилятор видимо не так понял строчку
C++
1
2
3
do{
i++;
}while();
Это бывает.Так как разные компиляторы немного по-разному понимают когда к i прибавлять единичку)
Мой вам совет - перейдите на более простые IDE.
Типа Dev Cpp хотя бы.Иначе замучаетесь с борландом.

Добавлено через 1 минуту
Цитата Сообщение от diagon Посмотреть сообщение
Не по теме:
Это да, я вот очень долго думал, что на проверяющей системе ******** не работает iostream, т.к. у меня компилировалось, а у них нет... Я на си около 30 задач там сдал, пока не узнал истину=)
Но имхо как IDE билдер удобнее MSVS будет. Сейчас на линукс пересел, после билдера на code::blocks и эклипсе крайне неудобно писать.
И в чем же была истина,уважаемый Диагон?
1
asics
24.05.2011, 16:55     Не могу найти ошибку в массиве
  #30

Не по теме:

Цитата Сообщение от Rexer Посмотреть сообщение
И в чем же была истина,уважаемый Диагон?
Читай подпись(мою)

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2011, 16:55
Привет! Вот еще темы с ответами:

Не могу найти ошибку - 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...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.05.2011, 16:55
Ответ Создать тему
Опции темы

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