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

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

Войти
Регистрация
Восстановить пароль
 
kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
#1

Почему "падает" программа - C++

10.06.2012, 15:41. Просмотров 584. Ответов 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
#include <iostream>
#include <cmath>
using namespace std;
void vvodMas(int x[], int n);
void ydalenie(int x[], int n);
void perestanovka(int x[], int k);
void print(int x[], int k);
int main()
{
 const int n = 5;
 int x[n];
 int k;
 vvodMas(x,n);
 ydalenie(x,n);
 perestanovka(x,k);
 print(x,k);
 return 0;
}
void vvodMas(int x[], int n)
{
 cout<<"Input "<<n<<"numbers:\n";
 for (int i = 0; i<n; i++)
 cin>>x[i];
}
void ydalenie(int x[], int n)
{
 int k = 0;
 for(int i = 0; i<n; i++)
 {
 if(x[i] / 100 < 1)
 {
 x[k] = x[i];
 k++;
 }
 }
 }
void perestanovka(int x[], int k)
{
 for(int i = 0; i < k; i++)
 {
 if (x[i] > 9)
 {
 int t=x[i]%10;
 int t1=x[i]/10;
 x[i]=t*10+t1;
 }
 }
}
void print(int x[], int k)
{
 for (int i = 0; i < k; i++)
 cout<<"massive:"<<x[i]<<endl;
}
Не пойму что-то.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2012, 15:41     Почему "падает" программа
Посмотрите здесь:

Почему программа "падает" на функции заполнения дерева? - C++
Здравствуйте! У меня проблема с заполнением дерева. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; struct...

Странное поведение при работе со строками: почему программа выводит 8, если в input "МАКС"? - C++
Почему программа выводит 8, если в input: &quot;МАКС&quot;? #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;string.h&gt; using namespace...

Программа не "видит" класс. Почему? - C++
Задание: 2.15. Разработать класс Rectangle для работы с плоскими прямоугольниками, стороны которого параллельны осям координат. В качестве...

Почему падает программа? - C++
Почему падает программа? Компилируется без ошибок, но при запуске аварийное завершение работы. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Динамический массив нулевого размера. Почему не падает программа? - C++
char* p = new char; cout &lt;&lt; &amp;p &lt;&lt; endl; Странно, но всё работает. Хотя если зададим отрицательный размер массива char* p = new char;...

Почему при изменении литерала const char* программа падает? - C++
точнее литерала. ладно, если бы выходил за пределы

Почему программа падает при сортировке массивов больших размерностей - C++
Добрый день! Подскажите почему прога крашится при размере массива 10000, при значении 1000 все прекрасно работает. #include &lt;iostream&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mikola-BLR
47 / 47 / 7
Регистрация: 27.12.2011
Сообщений: 65
10.06.2012, 15:58     Почему "падает" программа #2
int k;
вы переменную k объявили в main(), но в main() вы её так и не инициализировали (не задали значение), но передаёте в качестве параметра в вызываемые функции. Даже если в ydalenie() k++ увеличится до 5, то в main() k так и останется не инициализированной. Поэтому цикл в print() не выполняется НИ РАЗУ, т.к. задан от i=0, при условии пока i<0 (условие не выполняется ни разу).
Проще говоря, программа вызвала все функции по очереди, но в функции print() ничего не сделала и спокойно завершилась.
kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
10.06.2012, 16:04  [ТС]     Почему "падает" программа #3
Задал в main
k = 0
Не помогает. Не печатает ничего.

Добавлено через 2 минуты
Т.е. мне нужно вернуть значение k?
Mikola-BLR
47 / 47 / 7
Регистрация: 27.12.2011
Сообщений: 65
10.06.2012, 16:06     Почему "падает" программа #4
Потому что k в main() у вас НИКОГДА не увеличивается.
Вызывая функцию
void ydalenie(int x[], int n)
{
int k = 0;
for(int i = 0; i<n; i++)
{
if(x[i] / 100 < 1)
{
x[k] = x[i];
k++;
}
}
}
Вы в ней инициализируете локальную переменную k и ЕЁ увеличиваете k++. К функции main() она не имеет НИКАКОГО отношения.
Т.е. мне нужно вернуть значение k?
Да.
kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
10.06.2012, 16:09  [ТС]     Почему "падает" программа #5
Сделал так
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
55
56
#include <iostream>
#include <cmath>
using namespace std;
void vvodMas(int x[], int n);
int ydalenie(int x[], int n);
void perestanovka(int x[], int k);
void print(int x[], int k);
int main()
{
    const int n = 5;
    int x[n];
    int k = 0;
    vvodMas(x,n);
    ydalenie(x,n);
    perestanovka(x,k);
    print(x,k);
    return 0;
}
void vvodMas(int x[], int n)
{
    cout<<"Input "<<n<<" numbers:\n";
    for (int i = 0; i<n; i++)
    cin>>x[i];
}
int ydalenie(int x[], int n)
{
    int k = 0;
    for(int i = 0; i<n; i++)
    {
        if(x[i] / 100 < 1)
        {
        x[k] = x[i];
        k++;
       }
    }
    return k;
 
   }
void perestanovka(int x[], int k)
{
    for(int i = 0; i < k; i++)
    {
        if (x[i] > 9)
        {
            int t=x[i]%10;
            int t1=x[i]/10;
            x[i]=t*10+t1;
        }
    }
 
}
void print(int x[], int k)
{
    for (int i = 0; i < k; i++)
    cout<<"massive:"<<x[i]<<endl;
}
Не работает все равно
Mikola-BLR
47 / 47 / 7
Регистрация: 27.12.2011
Сообщений: 65
10.06.2012, 16:18     Почему "падает" программа #6
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
#include <iostream>
#include <cmath>
using namespace std;
void vvodMas(int x[], int n);
void ydalenie(int x[], int n, int& k);
void perestanovka(int x[], int k);
void print(int x[], int k);
int main()
{
 const int n = 5;
 int x[n];
 int k;
 vvodMas(x,n);
 ydalenie(x,n,k);
 perestanovka(x,k);
 print(x,k);
 return 0;
}
void vvodMas(int x[], int n)
{
 cout<<"Input "<<n<<"numbers:\n";
 for (int i = 0; i<n; i++)
 cin>>x[i];
}
void ydalenie(int x[], int n, int& k)
{
 k = 0;
 for(int i = 0; i<n; i++)
 {
 if(x[i] / 100 < 1)
 {
 x[k] = x[i];
 k++;
 }
 }
 }
void perestanovka(int x[], int k)
{
 for(int i = 0; i < k; i++)
 {
 if (x[i] > 9)
 {
 int t=x[i]%10;
 int t1=x[i]/10;
 x[i]=t*10+t1;
 }
 }
}
void print(int x[], int k)
{
 for (int i = 0; i < k; i++)
 cout<<"massive:"<<x[i]<<endl;
}
При вызове функции ydalenie(int x[], int n, int& k) пришлём ей ссылку на нашу переменную k, чтобы она, функция, смогла её менять.

Либо, как самый простой вариант, можно было объявить k глобально и она была бы доступна во всех функциях.
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
10.06.2012, 16:20     Почему "падает" программа #7
в функции perestanovka k тоже нужно сделать ссылкой
Mikola-BLR
47 / 47 / 7
Регистрация: 27.12.2011
Сообщений: 65
10.06.2012, 16:23     Почему "падает" программа #8
Цитата Сообщение от defer Посмотреть сообщение
в функции perestanovka k тоже нужно сделать ссылкой
Зачем ? В perestanovka() мы НИЧЕГО с k не делаем. Нам достаточно её текущего значения, чтобы выполнить цикл FOR пока i<k . Поэтому при вызове функции мы и передаём всего лишь значение переменной k perestanovka(x,k);
C++
1
2
3
4
5
6
7
8
9
10
11
12
void perestanovka(int x[], int k)
{
 for(int i = 0; i < k; i++)
 {
 if (x[i] > 9)
 {
 int t=x[i]%10;
 int t1=x[i]/10;
 x[i]=t*10+t1;
 }
 }
}
kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
10.06.2012, 16:29  [ТС]     Почему "падает" программа #9
Все понял, спасибо!

Добавлено через 5 минут
Цитата Сообщение от Mikola-BLR Посмотреть сообщение
Либо, как самый простой вариант, можно было объявить k глобально и она была бы доступна во всех функциях.
глобально это перед 4 строкой
int k = 0; ?
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
10.06.2012, 16:31     Почему "падает" программа #10
Цитата Сообщение от Mikola-BLR Посмотреть сообщение
Зачем ? В perestanovka() мы НИЧЕГО с k не делаем. Нам достаточно её текущего значения, чтобы выполнить цикл FOR пока i<k . Поэтому при вызове функции мы и передаём всего лишь значение переменной k perestanovka(x,k);
показалось
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2012, 16:33     Почему "падает" программа
Еще ссылки по теме:

VS12 Почему "Нажмите для продолжения." вылезает 2 раза? - C++
Простейшая программа суммы 2х чисел После вывода суммы дважды пишет &quot;Нажмите для продолжения...&quot;, а если комментирую паузу, то,...

Почему на консоль выводится "1" и дальше ничего не происходит? (цикл while) - C++
Вот код: #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;conio.h&gt; using namespace std; int main() { int i = 0; while...

Почему выдает ошибку в строке "src.erase(p);" - C++
Задача из Bjarne Stroustrup - &quot;The C++ Programming Language(3rd edition)&quot;: 6.3. (*2) Read a sequence of possibly whitespaceseparated...

Почему выскакивает Warning "signed/unsigned mismatch"? - C++
Написал такую программу, в которой перегружена функция rev_str(). Впринципе программа компилируется и работает нормально. Но волнует то,...

Почему переменной присваивается произвольное значение("мусор")? - C++
Мой черновой вариант кода. Он очень черновой так что многое не суть важно, но переменной х я присваиваю значение 0. Если после приглашения...


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

Или воспользуйтесь поиском по форуму:
Mikola-BLR
47 / 47 / 7
Регистрация: 27.12.2011
Сообщений: 65
10.06.2012, 16:33     Почему "падает" программа #11
глобально это перед 4 строкой
int k = 0; ?
Можно перед 4-й, но можно и перед 8-й, т.е. перед первой функцией, где у нас будет использоваться переменная k.
Yandex
Объявления
10.06.2012, 16:33     Почему "падает" программа
Ответ Создать тему
Опции темы

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