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

Доработать программу ( мизер ) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ удаления узла в двухсвязном списке http://www.cyberforum.ru/cpp-beginners/thread781011.html
Привет всем! такая проблема , не получается корректно удалить узел из двухвязного списка. как решить эту проблему ? #include <iostream> #include <stdlib.h> using namespace std; struct Node {...
C++ Лимит памяти для решений задач Чем руководствуются авторы задач, устанавливая лимт памяти для программ-решений? Например, простая задча. Её решение, сохранённое в текстовом режиме (блокнот) занимает на диске 4 килобайта.... http://www.cyberforum.ru/cpp-beginners/thread781010.html
фиктивный узел C++
Привет всем ! вот сижу и разбираюсь со связным списоком, и все никак не понимаю что такое фиктивный узел ... объясните пожалуйста что за фиктивный узел такой ? и пришлите простенький код с фиктивным...
C++ Определить класс Gradebook: Не могу понять что не так
Учусь по книге "Дейтел Х., Дейтел П. Как программировать на C++ (5-е издание, 2008)" учусь 2 дня, не ругайтесь пожалуйста если что то совсем очевидное =) вот пример из книги ...
C++ Статические поля и наследование http://www.cyberforum.ru/cpp-beginners/thread780979.html
Поймал себя на мысли, что не всё знаю о статических членах класса, а проверить, запустив тестовую программу-пример лень. Известно, что статическое поле класса будет общим для всех его экземпляров и...
C++ Нарисовать в консоли указанные фигуры Реализовать приложение, которое рисует в консоли следующие геометрические фигуры: прямоугольник, треугольник и ромб. Алгоритм рисования каждой фигуры должен быть оформлен в виде функций: Rectangle,... подробнее

Показать сообщение отдельно
Дмiтрiй
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 16

Доработать программу ( мизер ) - C++

07.02.2013, 04:56. Просмотров 184. Ответов 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
//
#include "StdAfx.h"
#include <cstdio>
#include <windows.h>
#include <cmath>
 
 
void myfoo_array(int ** arr,int & height,int & width) //уплотняет массив
{
     for ( int i = 0 , flag = false; i < height ; ++i , flag=false )
     {
         for (int j=0; j < width ; ++j)
             if ( arr[i][j]!=0 )
             {
                 flag = true; 
                 break;
             }
        if (!flag)
        {
            delete [] arr[i];
            memcpy ( arr+i , arr+i+1 , sizeof  (arr[i])*(height-i-1) );
            --i; --height;
        }
     }
 
     for ( int i = 0 , flag=false ; i < width ; ++i , flag=false )
     {
         for (int j=0;j<height;++j)
             if ( arr[j][i] != 0)
             {
                 flag = true; 
                 break;
             }
        if ( !flag )
        {
            for ( int d = 0 ; d < height ; ++d )
                memcpy ( arr[d]+i , arr[d]+i+1 , sizeof (arr[d][i])*(width-i-1) ); //memcpy - копирует память; sizeof возвращает размер переданного объекта в байтах.
            --i; --width;
        }
     } 
} 
 
 
int ** create_array(int **& arr,int & height,int & width) //создает массив
{
    scanf("%d %d", &width, &height);
    printf("\n");
    
    arr = new int*[height];   // height - высота    widtf - ширина
    for (int i = 0; i< height; ++i)
    {
        arr[i] = new int [width];
    }
     return arr;
}
 
 
void in_array(int **& arr,const int & height,const int & width) // задает коордиинаты массива
{
    for (int i = 0; i< height; ++i)
    {
        for (int j = 0; j< width; ++j)
        {
            printf("Введите элемент [%d][%d]: ", i+1, j+1);
            scanf("%d", arr[i]+j);
        }
    }
}
 
void print_array(int ** arr,const int & height,const int & width) //выводит массив //выводит уплотненный массив
{
    for (int i = 0; i< height; ++i)
    {
        for (int j = 0; j< width; ++j)
        {
            printf("%d", arr[i][j]);
        }
        printf ("\n");
    }
}
 
int modsum_array(int ** arr,const int & height,const int & width) //считает сумму
{
    int sum = 0;
    for( int i = 0; i < height; ++i)
        for( int j = 0; j < width; ++j)
            if ( i < j )
            {
                sum += abs (arr[i][j]);
            }
      return sum;
}
 
int main()
{
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int ** a = NULL;
    int height = 0;
    int width = 0;
    int menu = 0;
    {
        printf("Меню программы:\n");
        printf("1.Введите размерность массива (ширина, высота): \n");
        printf("2.Введите значения элементов массива: \n");
        printf("3.Вы ввели матрицу: \n");
        printf("4.Уплотнить матрицу. \n");
        printf("5.Вывести измененную матрицу: \n");
        printf("6.Вывести сумму элементов расположенных выше главной диагонали. \n");
        printf("--------------------------------\n");
        printf("0. \n");
 
        scanf("%d", &menu);
 
        do
        {
            switch (menu)
            {
            case 1:
                printf("\n");
                create_array(a,height,width); //создает массив
                break;
            case 2:
                in_array(a,height,width); // задает коордиинаты массива
                break;
            case 3:
                print_array(a,height,width); //выводит массив
                break;
            case 4:
                myfoo_array(a,height,width); //уплотняет массив
                break;
            case 5: 
                print_array(a,height,width); //выводит уплотненный массив
                break;
            case 6:
                printf ("\nСумма элементов расположенных выше главной диагонали равна: %d", modsum_array(a,height,width)); //считает сумму
                break;
            case 0:
                break;
            default:
                printf ("Неверный пункт меню");
            }
        } while (menu != 0);
        
        return 0;
    }
    for (int i = 0; i< height; ++i)
    
    {
        delete [] a[i];
    }
    delete [] a; 
    getchar();
    getchar();  
    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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include "StdAfx.h"
#include <cstdio>
#include <windows.h>
#include <cmath>
 
 
void myfoo_array(int ** arr,int & height,int & width){
     for ( int i = 0 , flag = false; i < height ; ++i , flag=false )
     {
         for (int j=0; j < width ; ++j)
             if ( arr[i][j]!=0 )
             {
                 flag = true; 
                 break;
             }
        if (!flag)
        {
            delete [] arr[i];
            memcpy ( arr+i , arr+i+1 , sizeof  (arr[i])*(height-i-1) );
            --i; --height;
        }
     }
 
     for ( int i = 0 , flag=false ; i < width ; ++i , flag=false )
     {
         for (int j=0;j<height;++j)
             if ( arr[j][i] != 0)
             {
                 flag = true; 
                 break;
             }
        if ( !flag )
        {
            for ( int d = 0 ; d < height ; ++d )
                memcpy ( arr[d]+i , arr[d]+i+1 , sizeof (arr[d][i])*(width-i-1) ); //memcpy - копирует память; sizeof возвращает размер переданного объекта в байтах.
            --i; --width;
        }
     }
}
 
 
int ** create_array(int **& arr,int & height,int & width){
    printf("Введите размерность массива (ширина, высота): \n");
    scanf("%d %d", &width, &height);
    printf("\n");
    
    arr = new int*[height];   // height - высота    widtf - ширина
    for (int i = 0; i< height; ++i)
    {
        arr[i] = new int [width];
    }
     return arr;
}
 
 
void in_array(int **& arr,const int & height,const int & width){
    // Заполнение массива вручную.
    printf("Введите значения элементов массива: \n");
    for (int i = 0; i< height; ++i)
    {
        for (int j = 0; j< width; ++j)
        {
            printf("Введите элемент [%d][%d]: ", i+1, j+1);
            scanf("%d", arr[i]+j);
        }
    }
}
 
void print_array(int ** arr,const int & height,const int & width){
    for (int i = 0; i< height; ++i)
    {
        for (int j = 0; j< width; ++j)
        {
            printf("%d", arr[i][j]);
        }
        printf ("\n");
    }
}
 
int modsum_array(int ** arr,const int & height,const int & width){
     int sum = 0;
    for( int i = 0; i < height; ++i)
        for( int j = 0; j < width; ++j)
            if ( i < j )
            {
                sum += abs (arr[i][j]);
            }
      return sum;
}
 
int main()
{
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
//------------------------------------------------------------------------------------------------------------------------------------------------
 
    int ** a = NULL;
    int height = 0;
    int width = 0;
 
    printf("Демонстрация работы с массивами\n");
     // создание массива
    create_array(a,height,width);
     in_array(a,height,width);
 
// вывод массвиа на экран
    printf ("Вы ввели матрицу: \n\n");
     print_array(a,height,width);
 
//---------------------------------------------------------------------------------------------------------------------
// Уплотнение массива
     myfoo_array(a,height,width);
//---------------------------------------------------------------------------------------------------------------------
     printf ("\nИзмененная матрица: \n\n");
     print_array(a,height,width);
     
//---------------------------------------------------------------------------------------------------------------------
      printf ("\nСумма элементов расположенных выше главной диагонали равна: %d", modsum_array(a,height,width));
     
//---------------------------------------------------------------------------------------------------------------------
// Устранение утечек памяти
 
    for (int i = 0; i< height; ++i)
    {
        delete [] a[i];
    }
    delete [] a; 
 
    getchar();
    getchar();  
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru