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

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

Войти
Регистрация
Восстановить пароль
 
tolyan1995
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 35
#1

Где ошибка? - C++

23.11.2013, 21:59. Просмотров 334. Ответов 13
Метки нет (Все метки)

Написать программу с применением функций. Дан массив размера N. Найти количество участков, на которых его элементы возрастают.
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
28
29
30
31
32
33
34
#include <iostream> 
using namespace std; 
int array(int k)
{
    int* a=new int[k];
    int uchastok=0,fl=0;     
    for (int i=0;i<k;i++)
    cin>>a[i];
    cout<<" ";
    for (int i=0;i<k;i++)
        cout<<a[i]<<"   ";
        for (int i=0;i<k;i++)
        {
            fl=i;
            while((a[i]<a[i+1]))
                {
                i++;
                }
                if (fl!=i)
                uchastok++;
        }
             cout<<"\n uchastokov = "<<uchastok;
return * a ;
 
}
 
int main(){
    int n;
    cout<<"Vvedite razmer massiva:";
    cin>>n;
    cout<<array(n);
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2013, 21:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Где ошибка? (C++):

Вывести на экран количество слов где первая и последняя буквы одинаковы (не понимаю где ошибка) - C++
задан текст нужно вывести на экран количество слов где первая и последняя буквы одинаковы #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил) - C++
написать универсальный тип, который представляет точку на плоскости в координатах (х, у) и в полярных координатах. Написать функцию для...

Ошибка при компиляции. Где ошибка? (Работа с классом) - C++
Уважаемые форумчане! При компиляции проекта возникает ошибка &quot; undefined reference to `MeterNZiF::MeterNZiF()' &quot; на 7 строку приложения. ...

Укажите где ошибка (ошибка во время выполнения программы) - C++
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при выполнении программы Картинка с ошибкой внизу поста. Код: ...

В чём ошибка.В коде там где коментарий там ошибка поучается. - C++
#include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; class CMyString{ char *pStr; public: ...

Где ошибка? - C++
Вот условие -&quot;Ученик на свой ​​день рождения раздал ученикам класса конфеты, в том числе и себе. Ребятам давал четное количество, а...

13
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
23.11.2013, 23:54 #2
tolyan1995,
скорее всего ошибка в том, что происходит выход за границу массива.
Измените в цикле поиска условие с i<k на i<k-1
0
tolyan1995
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 35
24.11.2013, 00:38  [ТС] #3
неа. тоже самое. без функций все работает нормально
0
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
24.11.2013, 00:51 #4
Цитата Сообщение от tolyan1995 Посмотреть сообщение
неа. тоже самое. без функций все работает нормально
потому что функция не возвращает количество участков, а первый элемент массива.
0
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
24.11.2013, 00:51 #5
Цитата Сообщение от RQdan Посмотреть сообщение
Измените в цикле поиска условие с i<k на i<k-1
Это раз
Цитата Сообщение от tolyan1995 Посмотреть сообщение
C++
1
2
3
4
while((a[i]<a[i+1]))
{
   i++;
}
Это два, здесь тоже возможен выход за пределы массива.
Цитата Сообщение от tolyan1995 Посмотреть сообщение
C++
1
return * a ;
Это три, все вычисления побоку, т.к. функция всегда возвращает первый элемент массива
0
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
24.11.2013, 00:56 #6
И лучше все же переработать цикл поиска - из-за цикла while часто будет выход за границу массива.
0
tolyan1995
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 35
24.11.2013, 00:57  [ТС] #7
помогите исправить
0
Hoottie_McGOOB
107 / 105 / 5
Регистрация: 04.10.2013
Сообщений: 231
24.11.2013, 00:58 #8
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream> 
using namespace std; 
void input_array(int*a, int k)
{
    for (int i=0;i<k;i++)
    cin>>*(a+i);
    cout<<" ";
}
 
void print_array(int*a, int k)
{
    for (int i=0;i<k;i++)
    {
        cout<<*(a+i);
        cout<<" ";
    }
    cout<<endl;
}
 
int find_increase_segments(int*a, int k)
{
    int segment=0;
    for (int i=0;i<k;i++)
        if(i>0)
            if(*(a+i)>*(a+i-1))
                segment++;
 
    return segment;
}
 
 
int main()
{
    int n;
    cout<<"Vvedite razmer massiva:";
    cin>>n;
    int *a = new int [n];
    input_array(&a[0], n);
    print_array(&a[0], n);
    cout<<find_increase_segments(&a[0], n)<<endl;
 
    system("pause");
    return 0;
}
0
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
24.11.2013, 01:06 #9
замени цикл поиска на это:
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0;i<n-1;i++)
{
 if(a[i]<a[i+1]) f1=1;
 else 
 {
  uchastok+=f1;
  f1=0;
 }
}
return uchastok;
Добавлено через 2 минуты
Hoottie_McGOOB,
надо количество участков с возрастанием, а не количество элементов, которые больше за предыдущего.
0
Hoottie_McGOOB
107 / 105 / 5
Регистрация: 04.10.2013
Сообщений: 231
24.11.2013, 01:10 #10
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream> 
using namespace std; 
void input_array(int*a, int k)
{
    for (int i=0;i<k;i++)
    cin>>*(a+i);
    cout<<" ";
}
 
void print_array(int*a, int k)
{
    for (int i=0;i<k;i++)
    {
        cout<<*(a+i);
        cout<<" ";
    }
    cout<<endl;
}
 
int find_increase_segments(int*a, int k)
{
    int increase = 0;
    int segment=0;
    bool label = false;
    for (int i=0;i<k;i++)
        if(i>0)
            if(*(a+i)>*(a+i-1))
            {
                label = true;
                if(i==k-1) segment++;
            }
            else if (label)
            {
                label=false;
                segment++;
            }
 
    return segment;
}
 
 
int main()
{
    int n;
    cout<<"Vvedite razmer massiva:";
    cin>>n;
    int *a = new int [n];
    input_array(&a[0], n);
    print_array(&a[0], n);
    cout<<find_increase_segments(&a[0], n)<<endl;
 
    system("pause");
    return 0;
}
0
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
24.11.2013, 01:16 #11
у меня, кстати, тоже ошибка:
после строки 10 надо добавить еще: if(f1) uchastok++;
0
tolyan1995
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 35
24.11.2013, 02:33  [ТС] #12
Hoottie_McGOOB, а Вы не могли комментарии к строкам кода написать.Просто мы так не программировали. Например, *(a+i что это? или &a[0]?
0
Hoottie_McGOOB
107 / 105 / 5
Регистрация: 04.10.2013
Сообщений: 231
24.11.2013, 02:56 #13
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream> 
using namespace std; 
void input_array(int*a, int k) //функция ввода массива: принимает адрес нулевого элемента массива a, размер массива a
{
    for (int i=0;i<k;i++) //цикл по i
    cin>>*(a+i);//считываем введенное число: к адресу нулевого элемента массива a прибавляем i.. получаем какой-то очередной адрес элемента массива a... операция * - разыменование, т.е. вместо адресов мы уже оперируем конкретным значением по этим адресам... в данном случае по этому адресу a+i записываем введенное значение
    cout<<" ";
}
 
void print_array(int*a, int k)//функция вывода введенного массива  a
{
    for (int i=0;i<k;i++)
    {
        cout<<*(a+i);
        cout<<" ";
    }
    cout<<endl;
}
 
int find_increase_segments(int*a, int k)
{
    int segment=0;//количество возрастающих участков массива
    bool label = false; //вспомогательная метка
    for (int i=0;i<k;i++)
        if(i>0)
            if(*(a+i)>*(a+i-1)) //если текущий элемент массива больше предыдущего, то
            {
                label = true;//метка = true
                if(i==k-1) segment++;//это для последнего элемента массива... если перед ним был меньший элемент, то инкрементируем переменную segment
            }
            else if (label)//если текущий элемент массива меньше или равен предыдущему и метка = true, то
            { 
                segment++;//инкрементируем переменную segment
            }
 
    return segment;
}
 
 
int main()
{
    int n;
    cout<<"Vvedite razmer massiva:";
    cin>>n;
    int *a = new int [n];//создаем массив a размером n
    input_array(&a[0], n);//посылаем в функцию адрес первого элемента масива a и размер массива a
    print_array(&a[0], n);//посылаем в функцию адрес первого элемента масива a и размер массива a
    cout<<find_increase_segments(&a[0], n)<<endl;//посылаем в функцию адрес первого элемента масива a и размер массива a
 
    system("pause");
    return 0;
}
0
tolyan1995
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 35
24.11.2013, 03:10  [ТС] #14
безгранично благодарен
0
24.11.2013, 03:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2013, 03:10
Привет! Вот еще темы с ответами:

Где ошибка? - C++
В поезде K вагонов, в каждом по M мест. Информацию о проданных на поезд билетах записать из файла в двумерный массив, номера строк...

Где ошибка ? - C++
Найти наибольший общий делитель для двух целых чисел. #include &lt;iostream&gt; using namespace std; int main() { int a,b; ...

Где ошибка?! - C++
Сортировка массива. Создаю функцию swap... Загоняю в него 9 элементов, а он мне даёт 10! Прчём десятый, не заданное число, а какое то очень...

Где ОШИБКА? - C++
есть программа которая выводит массив рандомных чисел, (размерность массива:200, диапазон значений: 0-100 ) и подсчитывает количество...


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

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

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