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

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

Восстановить пароль Регистрация
 
 
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
17.03.2014, 22:13     Найти ошибку в программе #1
Помогите найти ошибку.
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int a[15],kol=0,koll=0;
 
    for(int i=0;i<15;i=i+1)
    {
    cout << "[" << i+1 << "]:";
    cin >> a[i];
    }
     
    cout << "\n";
 
    for(int i=0;i<15;i=i+1)
    {
    cout << "Vasha matrica\n" << a[i] <<"\n";
    }
 
    for(int i=0;i<15;i=i+1)
    {
        if (a[i]%2=0)
            kol=kol+1;
 
        if ((a[i]%2!=0)&&(a[i]=>1)&&(a[i]<=11))
            koll=koll+1;
    }
 
    cout << "Kol chetnix chisel: " << kol;
    cout << "Kol nechetnix v kvadrate: " << koll*koll;
 
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2014, 22:13     Найти ошибку в программе
Посмотрите здесь:

C++ найти ошибку в программе
C++ Найти ошибку в программе
найти ошибку в программе C++
C++ найти ошибку в программе
Найти ошибку в программе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
17.03.2014, 22:16     Найти ошибку в программе #2
i++
Цитата Сообщение от tibeg Посмотреть сообщение
i=i+1)
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
17.03.2014, 22:19  [ТС]     Найти ошибку в программе #3
исправил, но по прожнему не работает.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
17.03.2014, 22:22     Найти ошибку в программе #4
dzrkot, это не ошибка, просто человек эти операции не освоил, то как он их записал абсолютно правильно (допустимо)
а вот здесь
C++
1
if ((a[i]%2!=0)&&(a[i]=>1)&&(a[i]<=11))
ошибка есть должно быть так:
C++
1
if ((a[i]%2!=0)&&(a[i]>=1)&&(a[i]<=11))
и здесь есть:
C++
1
if (a[i]%2=0)
должно быть так:
C++
1
if (a[i]%2==0)
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
17.03.2014, 22:25  [ТС]     Найти ошибку в программе #5
тоесть в тут
C++
1
if (a[i]%2=0)
я присвоил, а не равенство записал?

И еще один вопрос можно ли так возвести в квадрат
C++
1
pow(koll,2)
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
17.03.2014, 22:27     Найти ошибку в программе #6
Цитата Сообщение от tibeg Посмотреть сообщение
я присвоил, а не равенство записал?
Точнее не скажешь, == это сравнение, = это присвоение. А первое это просто >= больше или равно, => нет такого оператора
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
17.03.2014, 22:34  [ТС]     Найти ошибку в программе #7
И еще один вопрос можно ли так возвести в квадрат
C++
1
pow(koll,2)
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
17.03.2014, 22:35     Найти ошибку в программе #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от tibeg Посмотреть сообщение
И еще один вопрос можно ли так возвести в квадрат
сложно ответить. Вот так можно:
C++
1
2
int i,kol=5;
i=pow(kol,2);
но это не совсем корректно и этот код вызовет warning, т.к. pow возвращает тип double, а пытаемся присвоить его типу int без явного преобразования. Правильнее так в этом случае:
C++
1
2
int i,kol=5;
i=(int)pow(kol,2);
А вот это код правильный абсолютно:
C++
1
2
3
int kol=5;
double i;
i=pow(kol,2);
KOPOJI
Модератор
 Аватар для KOPOJI
16242 / 6453 / 390
Регистрация: 12.06.2012
Сообщений: 19,355
17.03.2014, 22:36     Найти ошибку в программе #9
А попробовать? Можно, если koll типа double или float.. Хотя, вроде, и из int переведет без предупреждения, согласно новым стандартам.. Только непонятно, зачем вызывать функцию, когда проще просто умножить на себя же.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
17.03.2014, 22:38     Найти ошибку в программе #10
Цитата Сообщение от KOPOJI Посмотреть сообщение
новым стандартам
VS2012 выдает warning C4244
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
17.03.2014, 22:38  [ТС]     Найти ошибку в программе #11
Ну если вдруг понадобится возвести в 10 степень например)
KOPOJI
17.03.2014, 22:39
  #12

Не по теме:

Цитата Сообщение от mustimur Посмотреть сообщение
VS2012 выдает warning
не, я говорил не про присвоение, а про саму передачу в функцию. Про присвоение я пропустил

mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
17.03.2014, 22:44     Найти ошибку в программе #13
Тут не в целых степенях может быть проблема: 4^2.5 в роде нормально должно тоже проглатить, 5^2.5 компилятор вынужден на свой страх и риск округлять (вот и предупреждение о возможной потери данных)....

Добавлено через 2 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
не, я говорил не про присвоение

Не по теме:

А я и подумать об этом не смог, преобразование int в double для меня естественно и по-умолчанию А наоборот нет

tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
17.03.2014, 22:48  [ТС]     Найти ошибку в программе #14
Вот ща попробывал, как вы сказали, но не получается почему-то возвести в квадрат...
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
#include <iostream>
#include <cmath>
 
 
using namespace std;
 
int main()
{
    int a[15],kol=0,koll=0;
    double b;
 
    for(int i=0;i<15;i++)
    {
    cout << "[" << i+1 << "]:";
    cin >> a[i];
    }
     
    cout << "\nVasha matrica";
 
    for(int i=0;i<15;i++)
    {
    cout  << " " << a[i] << " ";
    }
 
    for(int i=0;i<15;i++)
    {
        if (a[i]%2==0)
            kol=kol+1;
 
        if 
            ((a[i]%2!=0)&&(a[i]>=1)&&(a[i]<=11))
            koll=koll+1;
        
    }
 
    cout << "Kol chetnix chisel:\n " << kol;
    cout << "Kol nechetnix v kvadrate:\n " << b=pow(koll,2);
 
 
return 0;
}
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
17.03.2014, 22:54     Найти ошибку в программе #15
Сообщение было отмечено автором темы, экспертом или модератором как ответ
либо так, я же не знал что Вы сразу ответ хотите выводить:
C++
1
cout << "Kol nechetnix v kvadrate:\n " << pow(koll,2);
либо так:
C++
1
2
b=pow(koll,2);
cout << "Kol nechetnix v kvadrate:\n " << b;
KOPOJI
Модератор
 Аватар для KOPOJI
16242 / 6453 / 390
Регистрация: 12.06.2012
Сообщений: 19,355
17.03.2014, 22:54     Найти ошибку в программе #16
C++
1
cout << "Kol nechetnix v kvadrate:\n " << (b=pow(koll,2));
C++
1
cout << "Kol nechetnix v kvadrate:\n " << (b = koll * koll);
C++
1
cout << "Kol nechetnix v kvadrate:\n " << pow(koll,2);
C++
1
cout << "Kol nechetnix v kvadrate:\n " << koll * koll;

Не по теме:

неужто ошибки в компиляторе выключены

dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
17.03.2014, 22:55     Найти ошибку в программе #17
да я что-то сглупил непростительно, прошу прощения
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
17.03.2014, 23:00     Найти ошибку в программе #18
Цитата Сообщение от KOPOJI Посмотреть сообщение
неужто ошибки в компиляторе выключены

Не по теме:

А живые компиляторы на что?? ( Мы с Вами) как же выключены, работаем и исправно


dzrkot, нормально все бывает)))
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
17.03.2014, 23:34  [ТС]     Найти ошибку в программе #19
Простите пожалуйста, но помогите еще раз)
Написал программу которая меняет в матрице размера m*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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
 
using namespace std;
 
int main()
{
    int i,j,a[3][3], b[3][3];
 
    for(i=0;i<3;i++)
    {
        for (j=0;j<3;j++)
        {
            cout << "[" << i+1 << "]" << "[" << j+1 << "]:";
            cin >> a[i][j];
        }
    cout << "\n";
 
    }
 
    cout <<"\nVasha matrica: \n";
    
    for(i=0;i<3;i++)
    {
        for (j=0;j<3;j++)
        {
            
            cout << a[i][j];
        }
        cout <<"\n";
    }
 
    for(j=0;j<3;j++)
    {
        for(i=0;i<3;i++)
            b[j][i]=a[i][j];
    }
 
     cout <<"\n";
 
     for(j=0;j<3;j++)
      {
        for(i=0;i<3;i++)
        {
            cout << b[j][i];
        }
        cout << "\n";
      }
    
return 0;
}

А как сделать так, чтобы размер матрицы задавал пользователь вот попытался, но ничего не выходит

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;
 
int main()
{
        
    int i,j,a[3][3], b[3][3],a,b;
        
       cout << "Zadaite razmer matrici: ";
       cin >> a >>b;
 
    for(i=0;i<a;i++)
    {
        for (j=0;j<b;j++)
        {
            cout << "[" << i+1 << "]" << "[" << j+1 << "]:";
            cin >> a[i][j];
        }
    cout << "\n";
 
    }
 
    cout <<"\nVasha matrica: \n";
    
    for(i=0;i<a;i++)
    {
        for (j=0;j<b;j++)
        {
            
            cout << a[i][j];
        }
        cout <<"\n";
    }
 
    for(j=0;j<a;j++)
    {
        for(i=0;i<b;i++)
            b[j][i]=a[i][j];
    }
 
     cout <<"\n";
 
     for(j=0;j<a;j++)
      {
        for(i=0;b<3;i++)
        {
            cout << b[j][i];
        }
        cout << "\n";
      }
    
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2014, 10:12     Найти ошибку в программе
Еще ссылки по теме:

C++ Найти ошибку в программе
Найти ошибку в программе C++
C++ Найти ошибку в программе

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

Или воспользуйтесь поиском по форуму:
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
18.03.2014, 10:12     Найти ошибку в программе #20
Цитата Сообщение от tibeg Посмотреть сообщение
int i,j,a[3][3], b[3][3],a,b;
Ну во-первых вы объявляете a и b и как статический массив и как переменную типа int. Что уже не допустимо,а во вторых память под них должна выделяться динамически. Для двухмерных массивов память выделяется в 2 этапа: 1.Выделение памяти на массив указателей, 2.Выделение памяти на элементы. В обратной последовательности следует и освобождать. Существует несколько способов основными из которых являются конструкции типа: new/delete, malloc(calloc)/free. Существуют и другие способы (например отображение файлов в память), но они более специфичны и Вам пока туда не надо лезть. Конструкция malloc(calloc)/free перешла из Си, в то время как new/delete - это чистый С++. Основное отличие является то, что new/delete при создании и освобождении вызывает конструкторы/диструкторы объектов (если таковые есть. Malloc и calloc просто выделяют память на объект (calloc еще присваивает 0 объектам), поэтому их нельзя путать (new/delete и malloc(calloc)/free).
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
57
58
59
60
61
62
63
64
65
66
#include <iostream>
 
using namespace std;
 
int main()
{
        
    int i,j,**a, **b,a_с,b_с;
        
       cout << "Zadaite razmer matrici: ";
       cin >> a_с >>b_с;
       a=new int*[a_c];
       b=new int*[a_c];
    for(i=0;i<a_с;i++)
    {
     a[i]=new int[b_c];
     b[i]=new int[b_c];
    }
    for(i=0;i<a_с;i++)
    {
        for (j=0;j<b_с;j++)
        {
            cout << "[" << i+1 << "]" << "[" << j+1 << "]:";
            cin >> a[i][j];
        }
    cout << "\n";
 
    }
 
    cout <<"\nVasha matrica: \n";
    
    for(i=0;i<a_с;i++)
    {
        for (j=0;j<b_с;j++)
        {
            
            cout << a[i][j];
        }
        cout <<"\n";
    }
 
    for(j=0;j<a_с;j++)
    {
        for(i=0;i<b_с;i++)
            b[j][i]=a[i][j];
    }
 
     cout <<"\n";
 
     for(j=0;j<a_с;j++)
      {
        for(i=0;i<b_c;i++)
        {
            cout << b[j][i];
        }
        cout << "\n";
      }
    for(i=0;i<a_с;i++)
    {
     delete [] a[i];
     delete [] b[i];
    }
     delete [] a;
     delete [] b;
return 0;
}
второй вариант:
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
#include <iostream>
 
using namespace std;
 
int main()
{
        
    int i,j,**a, **b,a_с,b_с;
        
       cout << "Zadaite razmer matrici: ";
       cin >> a_с >>b_с;
       a=(int*) malloc(a_c*sizeof(int*));
       b=(int*) malloc(a_c*sizeof(int*));
    for(i=0;i<a_с;i++)
    {
     a[i]=(int) malloc(b_c*sizeof(int));
     b[i]=(int) malloc(b_c*sizeof(int));
    }
  
...........
 
    for(i=0;i<a_с;i++)
    {
     free (a[i]);
     free (b[i]);
    }
     free(a);
     free( b);
return 0;
}
Добавлено через 1 час 43 минуты
Во только в ваше случае правильнее так:
C++
1
2
3
4
5
6
7
8
9
10
11
       a=new int*[a_c];
       b=new int*[b_c];
    for(i=0;i<a_с;i++)   a[i]=new int[b_c];
     for(i=0;i<b_с;i++)  b[i]=new int[a_c];
....
for(i=0;i<a_с;i++)   delete [] a[i];
for(i=0;i<b_с;i++)  delete []b[i];
delete [] a;
delete [] b;
 
    }
Аналогично и с malloc, простите не посмотрел сразу внимательно что вы хотите. А те примеры допустимы только для квадратных матриц...
Yandex
Объявления
18.03.2014, 10:12     Найти ошибку в программе
Ответ Создать тему
Опции темы

Текущее время: 19:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru