Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Diversant321
0 / 0 / 0
Регистрация: 08.11.2014
Сообщений: 7
1

Ошибка в программе

16.11.2014, 16:20. Просмотров 285. Ответов 0
Метки нет (Все метки)

Задание:
Дана целочисленная квадратная матрица. Определить:
количество столбцов, содержащих хотя бы один нулевой элемент;
номер строки, в которой находится самая длинная серия одинаковых элементов.

При вводе массива в ручную, (например, размером 3 на 3) программа должна вывести массив, скажем так, "в нормальном виде". Но после ввода программа просит еще ввод какого-то числа. После стало понятно, что программа просит число для продолжения работы с меню. Но почему? Он сначала должен выводить массив, и уже потом просить продолжения.
Где ошибка? Подскажите пожалуйста. Только начинаю программировать в Си.
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
// лаба4.cpp: определяет точку входа для консольного приложения.
//
 
#include"stdafx.h"
#include<Windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<clocale>
#include<math.h>
#include<memory.h>
 
 
#define _CRTDBG_MAP_ALLOC
#include<crtdbg.h>
int printMenu(int m);
int** setArrayRand(int** a, int &size);
int** setArray(int** a, int &size);
void printArray(int x, int imax);
void sortArray(int **a, int size, int &x, int &imax);
void delar(int** a);
 
 
int _tmain(int argc, _TCHAR* argv[])
{ 
    _CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    setlocale(LC_ALL, "Russian");
    setlocale(LC_ALL,"rus");
 
    srand(time(NULL));
 
    int **a = NULL;
    int m = 0;
    int size = 0;
    int x = 0;
    int imax = 0;
 
    int wasEntered = 0;
    int wasCalculated = 0;
    
    printf("Лабораторная работа №4\n");
    do
    {
        m = printMenu(m);
        switch(m)
        {
        case 1:
            a=setArrayRand(a, size);
            wasEntered = 1;
            wasCalculated = 0;
            break;
        case 2:
            a=setArray(a, size);
            wasEntered = 1;
        case 3:
            if ( 1 == wasEntered)
            {
                sortArray(a, size, x, imax);
                wasCalculated = 1;
            }
            else
            {
                printf("Сначала нужнопроизвести ввод данных!\n");
            }
            break;
        case 4:
            if ( 1 == wasCalculated && 1 == wasEntered)
            {
                printArray(x, imax);
            }
            else
            {   
                printf("Ошибка! Соблюдайте порядок исполнения команд! \n");
                printf("Ожидается ввод и обработка массива! \n");
            }
            break;
        case 0:
            break;
        default:
            printf("\aНЕВЕРНЫЙ пункт меню, ПОВТОРИТЕ ввод!\n");
            break;
            system ("cls");
        }
    }
    while (m !=0);
    _CrtDumpMemoryLeaks();
    return 0;
}
 
 
int printMenu(int m)
{
 
    printf("\n-------------------------------------------------------------");
    printf("\nКлавиша 1: заполнение массива случайными числами");
    printf("\nКлавиша 2: заполнение массива с клавиатуры");
    printf("\nКлавиша 3: обработка массива");
    printf("\nКлавиша 4: вывод обработанного массива на экран");
    printf("\n-----------------------------------------------");
    printf("\nКлавиша 0: выход");
    printf("\n\nСоблюдайте порядок исполнения команд!\n\n");
    printf("-------------------------------------------------------------\n");
 
    while(true)
    {
        if(scanf("%d", &m))
            break;
        else
            printf("\n\a\aВведите корректное значение: ");
        fflush(stdin);  
    }
    return m;
}
int** setArrayRand(int** a, int &size)
{  
    printf("Введите размер массива: ");
 
            do
            {
                scanf("%d", &size);
                if(size<1)
                    printf("Введите размер массива больше 1: ");
            }while (size<1);
            if(a!=NULL)
            {
                for(int i=0; i<size; i++)
                    delete [] a[i];
                delete [] a;
            }
            a = new int*[size];
            for(int i=0; i<size; i++)
                a[i]=new int[size];
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    a[i][j] = rand() % 10;
                }
            }
            printf("\nПолученный массив:\n");
            for (int i = 0; i < size; i = i++)
            {
                for (int j = 0; j < size; j = j++)
                {
                    printf("%d ", a[i][j]);
                }
                printf("\n");
            }
return a;
}
int** setArray(int** a, int &size)
{  
    printf("Введите размер массива: ");
 
            do
            {
                scanf("%d", &size);
                if(size<1)
                    printf("Введите размер массива больше 1: ");
            }while (size<1);
            if(a!=NULL)
            {
                for(int i=0; i<size; i++)
                    delete [] a[i];
                delete [] a;
            }
            a = new int*[size];
            for(int i=0; i<size; i++)
                a[i]=new int[size];
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    scanf("%d ", &a[i][j]);
                }
            }
            printf("\nПолученный массив:\n");
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    printf("%d ", a[i][j]);
                }
                printf("\n");
            }
            getchar();
            getchar();
            return a;
 
}
void printArray(int x, int imax)
{
    printf("\nКоличество столбцов, в которых хотя бы один элемент равен 0 = %d ", x);
    if (imax == 0)
    {
        printf("\nНомер строки, в которой находится самая длинная серия одинаковых элементов = Такой строки нет");
    }
    else
    {
        printf("\nНомер строки, в которой находится самая длинная серия одинаковых элементов = %d ", imax);
    }               
}
void sortArray(int **a, int size, int &x, int &imax)
{
    int max = 0;
    for(int j = 0; j < size; j++)
    {
        for(int i = 0; i < size; i++)
            if (a[i][j] == 0)
            {
                x = x + 1;
                break;      
            }
    }
    int s = 0;
    int k = 0;
    for (int i = 0; i < size; i++) 
    {
        for (int j = 0; j < size - 1; j++) 
        {
            for (s = 0, k = j + 1; k < size && a[i][j] == a[i][k]; ++s, ++k);
            if (s > max) 
            {
                max  = s;
                imax = i + 1;
            }
        }
    }
    printf("Обработка массива завершена\n");
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2014, 16:20
Ответы с готовыми решениями:

Ошибка в программе
помогите найти ошибку в програмировании на С++ #include&lt;stdio.h&gt; #include&lt;string.h&gt; main() { ...

Ошибка в программе
В чем ошибка в программе?Когда вводишь любой символ,то программа зацикливается и бесконечно постит...

Ошибка в программе(Функция)
Задание на картинке Не могу понять, где ошибка в программе #include &lt;stdio.h&gt; #include...

Непонятная ошибка в программе
Решая лабы по Си, я наткнулся на ошибку, которую никогда раньше не встречал. #include &lt;stdio.h&gt;...

Ошибка в программе со структурами
#include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;locale.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt;...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2014, 16:20

Ошибка сегментирования в программе
Подскажите пожалуйста почему выходит ошибка.(Только начал программировать на Си) #include...

Ошибка в программе сортировки строк
Делаю программу, которая реализует сортировку строк, т.е. я ввожу 9 слов и программа должна...

Ошибка в программе. двумерный массив
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main () { int i, j, k = 0, x = 0; const N=4;...


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

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

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