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

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

Войти
Регистрация
Восстановить пароль
 
Relike
6 / 6 / 0
Регистрация: 24.04.2013
Сообщений: 260
#1

Отследить ошибку - C++

01.12.2013, 21:47. Просмотров 342. Ответов 12
Метки нет (Все метки)

Помогите найти ошибку в программе.
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 <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{   
    int n = 0, k = 0, i, r, j = 0, q1, q2, *a; a = new int [n]; double p;
    
    for(k = 10; k<100; k++){
        q1 = k%10;
        r = k/10;
        q2 = r%10;
        if((((q1*q1)+(q2*q2))%13) == 0){
            n++;
            a[j] = k;
            j++;
            }
        }
        
    for(i = 0; i < n; i++){
        cout<<a[i]<<"  ";
        }
    
    system("pause");
    return EXIT_SUCCESS;
}
Требуется найти все двузначные числа, сумма квадратов цифр которых делится на 13. Программа всё считает, но вылетает ошибка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2013, 21:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отследить ошибку (C++):

Крестики-нолики (не могу отследить ошибку) - C++
Проблема заключается в том, что при ходе (не важно компьютера или моего), ход идет двойной. Ставится 2 крестика или 2 нолика сразу и я не...

Как отследить ошибку "Stack around the variable was corrupted."? - C++
Вообщем код большой. Несколько классов, десяток функций. Ошибка всплывает только после завершения функции main(). Вот как бы научить...

Отследить TerminateProcess - C++
Могу ли я в своем приложении отследить, когда кто-то снаружи меня мочит, то есть TerminateProcess мне делает, никаких оконных сообщений...

Подскажите как исправить ошибку. прога ломается на 79 строке. а ошибку не выдает - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int chisla(int a,int b) { ...

Найти ошибку в программе: в visual studio выдает ошибку - C++
#include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main() { double x, E, ypred, y, S; ...

Отследить ввод с клавиатуры... - C++
Доброго времени суток! Господа прошу помочь решить такую задачу: в консольном приложении нужно запретить ввод символов и цыфр, только...

12
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.12.2013, 21:53 #2
C++
1
int n = 0 ... a = new int [n];...
Массив нулевого размера?
1
Relike
6 / 6 / 0
Регистрация: 24.04.2013
Сообщений: 260
01.12.2013, 21:56  [ТС] #3
Ясно, спасибо. А вы не подскажете как удалять элементы из массива? По индексам, либо максимальный(минимальный) элемент, если он уже найден.

Добавлено через 1 минуту
И еще, как тогда быть с массивом? Ведь размерность надо в любом случае указывать, но мне не нужно чтобы были лишние, пустые элементы.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.12.2013, 22:08 #4
Цитата Сообщение от Relike Посмотреть сообщение
И еще, как тогда быть с массивом? Ведь размерность надо в любом случае указывать, но мне не нужно чтобы были лишние, пустые элементы.
Или вектор, или перевыделять память под новый размер и копировать старый массив в новый, с освобождением памяти под старым.

Добавлено через 2 минуты
Цитата Сообщение от Relike Посмотреть сообщение
А вы не подскажете как удалять элементы из массива? По индексам, либо максимальный(минимальный) элемент, если он уже найден.
Если без пустых элементов, то копировать нужное в новый массив, память под старым освобождать.
1
Relike
6 / 6 / 0
Регистрация: 24.04.2013
Сообщений: 260
01.12.2013, 22:08  [ТС] #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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{   
    int v = 0, n = 89, k = 0, i, r, j = 0, q1, q2, *a; a = new int [n];
    
    for(k = 10; k<100; k++){
        q1 = k%10;
        r = k/10;
        q2 = r%10;
        if((((q1*q1)+(q2*q2))%13) == 0){
            n++;
            a[j] = k;
            j++;
            v++;
            }
        }
    n = v;
    for(i = 0; i < n; i++){
        cout<<a[i]<<"  ";
        }
    
    
    system("pause");
    return EXIT_SUCCESS;
}
Решил проблему. Вот моё решение. Потянет?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.12.2013, 22:10 #6
А как же это?
Цитата Сообщение от Relike Посмотреть сообщение
но мне не нужно чтобы были лишние, пустые элементы.
1
Relike
6 / 6 / 0
Регистрация: 24.04.2013
Сообщений: 260
01.12.2013, 22:13  [ТС] #7
Я имел ввиду в отображении. Видите ли, делаю не себе УВП. Мы на втором курсе, только начали изучение. Думаю никто и слова не скажет. Программа выполняется правильно. Всё равно спасибо вам, огромное.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.12.2013, 22:15 #8
Цитата Сообщение от Relike Посмотреть сообщение
Я имел ввиду в отображении.
С этим проще. n++ и v++ там тогда не нужны, просто значение j использовать для вывода.
0
Relike
6 / 6 / 0
Регистрация: 24.04.2013
Сообщений: 260
01.12.2013, 22:23  [ТС] #9
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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    float *a, min, max; int n, i;
    a = new float [n];
    cout<<"Vvedite razmernost' massiva : "; cin>>n; cout<<"\n";
    cout<<"Vvodim elementy massiva : \n";
    for (i = 0; i<n; i++){
        cout<<"a["<<i+1<<"] = "; cin>>a[i]; cout<<"\n";
        }
    
    min = a[0];
    for (i = 1; i<n; i++) {
        if (a[i]<min) min = a[i];
        }
    max = a[0];
    for (i = 1; i<n; i++) {
        if (a[i]>max) max = a[i];
        }
    
    cout<<"Soderjanie massiva : ";
    for(i = 0; i<n; i++){
        cout<<a[i]<<"  ";
        }
    cout<<"\nMinimal'nyi element massiva : "<<min<<"\tMaximal'nyi element massiva : "<<max<<"\n";
    
    
    for(i = 0; i < n; i++) {
        if(a[i] == min || a[i] == max ){
            for(int j = i; j<n-1; j++){
                a[j] = a[j+1];
                n--; i--;
                }
            }
        }
        
        
    cout<<"Itogovoe soderjanie massiva : ";
    for(i = 0; i<n; i++){
        cout<<a[i]<<"  ";
        }
    cout<<"\n";
    system("PAUSE");
    return EXIT_SUCCESS;
}
Вот, на счет удаления. Нужно удалить все вхождения максимального и минимально элементов. А получается вот такая штукуёвина.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.12.2013, 22:27 #10
Массив нужно создавать после того, как размерность введена, а не до.
1
Relike
6 / 6 / 0
Регистрация: 24.04.2013
Сообщений: 260
01.12.2013, 22:30  [ТС] #11
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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    float *a, min, max; int n, i;
    cout<<"Vvedite razmernost' massiva : "; cin>>n; cout<<"\n";
    a = new float [n];
    cout<<"Vvodim elementy massiva : \n";
    for (i = 0; i<n; i++){
        cout<<"a["<<i+1<<"] = "; cin>>a[i]; cout<<"\n";
        }
    
    min = a[0];
    for (i = 1; i<n; i++) {
        if (a[i]<min) min = a[i];
        }
    max = a[0];
    for (i = 1; i<n; i++) {
        if (a[i]>max) max = a[i];
        }
    
    cout<<"Soderjanie massiva : ";
    for(i = 0; i<n; i++){
        cout<<a[i]<<"  ";
        }
    cout<<"\nMinimal'nyi element massiva : "<<min<<"\tMaximal'nyi element massiva : "<<max<<"\n";
    
    
    for(i = 0; i < n; i++) {
        if(a[i] == min || a[i] == max ){
            for(int j = i; j<n-1; j++){
                a[j] = a[j+1];
                n--; i--;
                }
            }
        }
        
        
    cout<<"Itogovoe soderjanie massiva : ";
    for(i = 0; i<n; i++){
        cout<<a[i]<<"  ";
        }
    cout<<"\n";
    system("PAUSE");
    return EXIT_SUCCESS;
}
Ничем результат не изменился....((( Он стирает нужные элементы, и оставляет ненужные..
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.12.2013, 22:35 #12
Цитата Сообщение от Relike Посмотреть сообщение
Ничем результат не изменился....
Я и не писал, что он изменится, но создавать массив нужно правильно.

C++
1
2
3
4
5
6
7
8
9
for(i = 0; i < n; i++) {
        if(a[i] == min || a[i] == max ){
            for(int j = i; j<n-1; j++){
                a[j] = a[j+1];
                
                }
                n--; i--;
            }
        }
1
Relike
6 / 6 / 0
Регистрация: 24.04.2013
Сообщений: 260
02.12.2013, 07:45  [ТС] #13
Всё отлично. Спасибо вам огромное за помощь!

Добавлено через 9 часов 7 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
Я и не писал, что он изменится, но создавать массив нужно правильно.
Учту на будущее! Спасибо.
0
02.12.2013, 07:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2013, 07:45
Привет! Вот еще темы с ответами:

Отследить изменение реестра - C++
Привет, есть ли рабочий пример или кто-то поделиться теорией создания чтоб отследить любое изменение в реестре ?

Как отследить утечку памяти? - C++
Как в vs(ну или в общем) отследить учтечку памяти? То есть если было выделено память под что то с помощь new и по каким то причинам не было...

Как отследить нажатия клавиш? - C++
Здорово перцы! Все действие происходит на WinAPI в VC6. У меня такая проблема: Я создаю таймер и отслеживаю нажатия клавиш Ctrl+V:...

Как отследить простой системы? - C++
Висит наш *.ехе в памяти и мониторит простой системы, если мышкой не шевелили 3 минуты посылать нажатие клавишь По можете реализовать? ...


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

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

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