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

Что поправить в коде? - C++

Восстановить пароль Регистрация
 
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
29.10.2012, 23:11     Что поправить в коде? #1
Задание:1) вывести количество строк, содержащих 0
2) номер столбца, в котором содержится самая длинная серия одинаковых элементов.

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
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <time.h>
 
using namespace std;
 
    int main()
        
{   int str, stb, k=0;
    cout<<"Vvedite kolichestvo strok = "; cin>>str;
    cout<<"Vvedite kolichestvo stolbcov= "; cin>>stb;
    cout<<endl;
    srand( time(0));
    int** mas=new int*[str]; 
    for(int i=0; i<str;i++) 
    mas[i]=new int[stb]; 
        
    for (int i=0; i<str; i++ )
    for ( int j=0; j<stb; j++ )
    { mas [i][j] =  rand() % 10 ;}
 
    for (int i=0; i<str; i++ ){
    for ( int j=0; j<stb; j++ )
    { cout<<mas [i][j]<<" "; } cout<<endl;}
 
    // Pervoe zadanie
 
     for (int i=0;i<str;i++)
           for(int j=0;j<stb;j++)
            { if (mas[i][j]==0) {k++; i++;} } 
              
    // Vtoroe zadanie
 
    int *mas1 = new int [stb];
    for (int i=0;i<stb;i++)
        mas1[i]=1;
 
    for (int j=0;j<stb;j++)
     { for (int i=0;i<str;i++)
        { if (mas[i][j]==mas[i][j+1]) mas1[i]++; }
     }
    cout<<"Kolichestvo odinakovih elementov po stolbcam:"<<endl;
    for (int i=0;i<stb;i++)
        cout<<mas1[i]<<" ";
 
    int max=mas1[0],index=0;
    for (int i=1;i<stb;i++)
    {
        if (max<mas1[i])
        {  max=mas1[i];
           index=i;}
    }
    // Vivod
    cout<<endl<<"Maksimal'noe kolichestvo= "<<max<<endl<<"Nomer etogo stolbca= "<<index+1<<endl; 
    cout<<"Strok, soderjashih 0= "<<k<<endl;
 
            system ("pause");
            return 0;
            }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2012, 23:11     Что поправить в коде?
Посмотрите здесь:

C++ что в коде не так?
что в коде не так? C++
ЧТо не так в коде? C++
Что не правильно в коде, что посоветуете дописать C++
Что не так в коде? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
29.10.2012, 23:22     Что поправить в коде? #2
Самое первое что бросилось!

1)Это в один цикл

C++
1
2
3
4
5
6
7
for (int i=0; i<str; i++ )
    for ( int j=0; j<stb; j++ )
    { mas [i][j] =  rand() % 10 ;}
 
    for (int i=0; i<str; i++ ){
    for ( int j=0; j<stb; j++ )
    { cout<<mas [i][j]<<" "; } cout<<endl;}
2) вы не освободили память!
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
30.10.2012, 00:11  [ТС]     Что поправить в коде? #3
Infinity3000, Спасибо за ответ. Переделал а один цикл, а насчет освобождения памяти не пойму, как сделать.

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
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <time.h>
 
using namespace std;
 
    int main()
        
{   int str, stb, k=0;
    cout<<"Vvedite kolichestvo strok = "; cin>>str;
    cout<<"Vvedite kolichestvo stolbcov= "; cin>>stb;
    cout<<endl;
    srand( time(0));
    int** mas=new int*[str]; 
    for(int i=0; i<str;i++) 
    mas[i]=new int[stb]; 
        
    for (int i=0; i<str; i++ ){
    for ( int j=0; j<stb; j++ )
    { mas [i][j] =  rand() % 10;
    cout<<mas [i][j]<<" ";}cout<<endl;}
 
 
    // Pervoe zadanie
 
     for (int i=0;i<str;i++)
           for(int j=0;j<stb;j++)
            { if (mas[i][j]==0) {k++; i++;} } 
              
    // Vtoroe zadanie
 
    int *mas1 = new int [stb];
    for (int i=0;i<stb;i++)
        mas1[i]=1;
 
    for (int j=0;j<stb;j++)
     { for (int i=0;i<str;i++)
        { if (mas[i][j]==mas[i][j+1]) mas1[i]++; }
     }
    cout<<"Kolichestvo odinakovih elementov po stolbcam:"<<endl;
    for (int i=0;i<stb;i++)
        cout<<mas1[i]<<" ";
 
    int max=mas1[0],index=0;
    for (int i=1;i<stb;i++)
    {
        if (max<mas1[i])
        {  max=mas1[i];
           index=i;}
    }
    // Vivod
    cout<<endl<<"Maksimal'noe kolichestvo= "<<max<<endl<<"Nomer etogo stolbca= "<<index+1<<endl; 
    cout<<"Strok, soderjashih 0= "<<k<<endl;
 
            system ("pause");
            return 0;
            }
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
30.10.2012, 00:20     Что поправить в коде? #4
C++
1
2
3
     for (int i=0;i<str;i++)
           for(int j=0;j<stb;j++)
            { if (mas[i][j]==0) {k++; i++;} }
допустим массив
1 2 3 0 4 5
0 2 3 4 5 6
по вашему коду, в 1 строке 0 посчитает, увеличит k и i, и пойдет 2я строка, только не с 1 элемента, а с 5го. Т.е кол-во строк, содержащих нули = 1, а должно быть 2.
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
30.10.2012, 00:41     Что поправить в коде? #5
Цитата Сообщение от delexa Посмотреть сообщение
а насчет освобождения памяти не пойму, как сделать.

C++
1
2
3
for (i = 0; i < n; i++)
        delete [] mass[i];
    delete [] mass;
под свой пример подгони!

соответственно у тебя будет два таких цикла!

если есть в программе new - выделяете память, освобождаете под средсвом delete
Yandex
Объявления
30.10.2012, 00:41     Что поправить в коде?
Ответ Создать тему
Опции темы

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