Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197

Программа выводит что-то непонятное

22.10.2013, 20:45. Показов 1266. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста, подскажите, почему программа бред выводит?

Вот программа.
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <C:\Users\Ангелина\Documents\Visual Studio 2008\Projects\zpr3\zpr3\function.h>
void main()
{   
    int sort=0;
    float matrica[11][15];
    float (*matrix)[11][15]=&matrica;
    int vector[11];
    int n;
    int m;
    while (1)
    {
        printf("vvedite chislo stolbcov 1-16");
        scanf("%d", &m);
        printf("vvedite chislo strok 1-11");
        scanf("%d", &n);
        if (m>0 && m<16 && n>0 && n<12) 
        {break;}
        else
        {printf("   error\n");
        printf("povtorite vvod\n");}
    }
    input(n, m, matrix);
    result(n, m, *matrix, &vector);
    output1(n, vector);
    output2(n, m, *matrix);
    while ((sort!=1) && (sort!=2) && (sort!=3))
    {
    printf("Enter the number of kind of sorting\n 1 A-Z\n 2 Z-A\n 3 Print without sorting\n");
    scanf("%d", &sort);
    }
    if (sort=1) //сортировка выбором
    {
        sort1(n, m, matrix);
    }
    if (sort=2)//обменная сортировка
    {
        sort2(n, m, matrix);
    }
    output2(n, m, *matrix);
    getch();
}
А вот function.h
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
void input(int n, int m, float (*matrix)[11][15])
{
    int i;
    int j;
    for (i=0; i<n; i+=1)
    {
        for (j=0; j<m; j+=1)
        {
            while (1) 
            {
                printf("Enter matrix element %d %d", i+1, j+1);
                scanf("%f", matrix[i][j]);
                if (*matrix[i][j]<10 && *matrix[i][j]>-10) 
                {
                    break;
                }
                else
                {
                    printf("    error   ");
                    printf("    Repeat  ");
                }
            }
        }
    }
}
void output1(int n,int mas[11])
{
    int i;
    printf("Printing result");
    for (i=0; i<n; i+=1)
    {
        printf("%d", mas[i]);
    }
}
void output2(int n, int m, float matrix[11][15])
{
    int i;
    int j;
    printf("\nPrinting matrix\n");
    for (i=0; i<n; i+=1)
    {
        for (j=0; j<m; j+=1)
        {
            printf("%f", matrix[i][j]);
        }
        printf("\n");
    }
}
void result(int n, int m,float matrix[11][15],int (*vector)[11])
{
    int i;
    int j;
    int maxj;
    int minj;
    float max;
    float min;
    for (i=0; i<n; i+=1)
    {
        maxj=1;
        minj=1;
        max=-10;
        min=10;
        for (j=0; j<m; j+=1)
        {
            if (matrix[i][j]<min)
            {
                minj=j;
                min=matrix[i][j];
            }
            if (matrix[i][j]>max)
            {
                maxj=j;
                max=matrix[i][j];
            }
        }
        if (maxj<minj) 
        {
            *vector[i]=1;
        }
        else
        {
            *vector[i]=0;
        }
    }
}
void sort1(int n, int m,float (*matrix)[11][15])
{
    int i;
    int j;
    float dop=*matrix[0][0];
    float min=*matrix[0][0];
    int mini=0;
    int minj=0;
    int k[2]={0, 0};
    int x;
    int y;
    for (i=0; i<n; i=+1)
    {
        for (j=0; j<m; j+=1)
        {
            k[1]=i; 
            k[2]=j;
            dop=*matrix[i][j];
            for (x=i; x<n; x+=1)
            {
                for (y=j; y<m; y+=1)
                {
            if (*matrix[x][y]<min)
            {
                mini=x;
                minj=y;
            }
                }
            }
            *matrix[i][j]=*matrix[mini][minj];
            *matrix[mini][minj]=dop;
        }
    }
}
void sort2(int n, int m, float (*matrix)[11][15])
{
    int i;
    int j;
    float dop;
    for (i=0; i<n; i+=1)
    {
        for (j=0; j<m; j+=1)
        {
            if (matrix[i][j]<matrix[i][j+1])
            {
                dop=*matrix[i][j];
                *matrix[i][j]=*matrix[i][j+1];
                *matrix[i][j+1]=dop;
            }
            if (*matrix[i][j]<*matrix[i+1][i])
            {
                dop=*matrix[i][j];
                *matrix[i][j]=*matrix[i+1][j];
                *matrix[i+1][j]=dop;
            }
        }
    }
}
Входная матрица
2 3 4
-2 -3 -4
0 -1 1

Скрин того, что выводится вложен.

Объясните пожалуйста, в чем проблема, у меня сейчас мозги вытекут через уши. О сортировке речь не идет, хотя она там тоже написана, но с ней пока проблем нет(я так и не смогла дождаться результата).
Миниатюры
Программа выводит что-то непонятное  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2013, 20:45
Ответы с готовыми решениями:

Что выводит программа?
Подскажите, пожалуйста, что делает данная программа, что именно выводит: predicates pos(integer,real) goal ...

Выводит непонятное число
При выполнение программы всегда выводится на экран число 2686744. Как это исправить? Работаю в среде Dev Cpp. #include&lt;stdlib.h&gt;...

программа, что выводит слова
&lt;?xml version=&quot;1.0&quot; encoding=&quot;windows-1251&quot;?&gt; &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; ...

10
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
22.10.2013, 20:56  [ТС]
Упс, чуть не забыла. Задание:
21. По данной матрице с числом строк не более 11 и числом столбцов не более 15 построить вектор, элемент которого равен 1, если в соответствующей строке матрицы максимальный элемент встретился раньше минимального. Определить моду для полученного вектора. Формат числа ц.ццц. Отсортировать матрицу двумя способами.
0
 Аватар для Folko
267 / 255 / 27
Регистрация: 27.09.2013
Сообщений: 876
Записей в блоге: 1
22.10.2013, 20:59
Angeline,

Не по теме:

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

0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
23.10.2013, 08:57  [ТС]
Ну хоть на код и скрин посмотри, без задания. Не должно же вроде такого быть.

Добавлено через 11 часов 37 минут
Помогите пожалуйста.
0
 Аватар для Folko
267 / 255 / 27
Регистрация: 27.09.2013
Сообщений: 876
Записей в блоге: 1
23.10.2013, 09:12
Angeline, ну ок, сейчас попробую... Вы в след раз если хотите кому то ответить, вначале кликайте на его форумный ник. А то я только сегодня увидел, что мне сообщение написали

Добавлено через 12 минут
Angeline, в том же "results" выводимый массив даже не разделен. Немудрено что визуально выводится огромная цифра
Проверьте еще вычисления, у вас видимо при вычислении ошибки
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
23.10.2013, 09:34  [ТС]
Folko, так в том же result элементам массива присваивается либо ноль, либо единица, откуда там восьмерки, девятки и прочее?
0
 Аватар для Folko
267 / 255 / 27
Регистрация: 27.09.2013
Сообщений: 876
Записей в блоге: 1
23.10.2013, 09:58
Angeline,

Не по теме:

Из паралельного мира?



Мне не нравится передача массива в функцию output1. Лучше бы указатель на массив передали и кол-во параметров

Добавлено через 6 минут
Angeline, то же самое относится и к output2
0
148 / 114 / 21
Регистрация: 15.01.2013
Сообщений: 266
23.10.2013, 10:44
Angeline,
cpp'шник:
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include "function.h"
 
void main(int argc, char** argv)
{
    int sort = 0;
    int n, m; //Количество строк и столбцов
    while (true)
    {
        printf("vvedite chislo stolbcov 1-16\t");
        scanf("%d", &m);
        printf("vvedite chislo strok 1-11\t");
        scanf("%d", &n);
        if (m>0 && m<16 && n>0 && n<12)
        {
            break;
        }
        else
        {
            printf("\tError\n\tPovtorite vvod\n");
        }
    }
    //Выделяем память под матрицу и вектор
    float** matrix = createFloatMatrix(n, m);
    int* vector = createIntVector(n);
 
    input(n, m, matrix);
    result(n, m, matrix, vector);
    output1(n, vector);
    output2(n, m, matrix);
    while ((sort!=1) && (sort!=2) && (sort!=3))
    {
      printf("Enter the number of kind of sorting\n 1 A-Z\n 2 Z-A\n 3 Print without sorting\n");
      scanf("%d", &sort);
    }
    if (sort==1) //сортировка выбором
    {
        sort1(n, m, matrix);
    }
    if (sort==2)//обменная сортировка
    {
        sort2(n, m, matrix);
    }
    output2(n, m, matrix);
    //Освобождаем память матрицы
    int i;
    for(i = 0; i < m; i++)
    {
        free(matrix[i]);
    }
    free(matrix);
    //Вектора
    free(vector);
    getch();
}
h'ник:
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
#ifndef __function.h__
#define __function.h__
 
//Функция выделения памяти под матрицу
float** createFloatMatrix(unsigned int rows, unsigned int cols)
{
    float** matrix;
    matrix = (float**) calloc(cols, sizeof(float*));
    for(unsigned int i = 0; i < cols; i++)
        matrix[i] = (float*) calloc(rows, sizeof(float));
    return matrix;
}
 
//Функция выделения памяти под вектор
int* createIntVector(unsigned int size)
{
    int* vector;
    vector = (int*) calloc(size, sizeof(int));
    return vector;
}
 
void input(int n, int m, float** matrix)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            while (true)
            {
                printf("Enter matrix element %d %d:\t", i+1, j+1);
                scanf("%f", &matrix[i][j]);
                if (matrix[i][j] < 10 && matrix[i][j] > -10)
                {
                    break;
                }
                else
                {
                    printf("\tError\n\tRepeat\n");
                }
            }
        }
    }
}
 
void output1(int n, int* vector)
{
    int i;
    printf("Printing result:\n");
    for (i = 0; i < n; i++)
    {
        printf("%d\t", vector[i]);
    }
    printf("\n");
}
 
void output2(int n, int m, float** matrix)
{
    int i;
    int j;
    printf("Printing matrix\n");
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            printf("%f\t", matrix[i][j]);
        }
        printf("\n");
    }
}
 
void result(int n, int m, float** matrix, int* vector)
{
    int i;
    int j;
    int maxj;
    int minj;
    float max;
    float min;
    for (i = 0; i < n; i++)
    {
        maxj=1;
        minj=1;
        max=-10;
        min=10;
        for (j = 0; j < m; j++)
        {
            if (matrix[i][j] < min)
            {
                minj = j;
                min = matrix[i][j];
            }
            if (matrix[i][j] > max)
            {
                maxj = j;
                max = matrix[i][j];
            }
        }
        if (maxj < minj)
        {
            vector[i] = 1;
        }
        else
        {
            vector[i] = 0;
        }
    }
}
 
void sort1(int n, int m, float** matrix)
{
    int i;
    int j;
    float dop = matrix[0][0];
    float min = matrix[0][0];
    int mini=0;
    int minj=0;
    int k[2]={0, 0};
    int x;
    int y;
    for (i=0; i<n; i=+1)
    {
        for (j=0; j<m; j+=1)
        {
            k[1]=i;
            k[2]=j;
            dop = matrix[i][j];
            for (x=i; x<n; x+=1)
            {
                for (y=j; y<m; y+=1)
                {
            if (matrix[x][y]<min)
            {
                mini=x;
                minj=y;
            }
                }
            }
            matrix[i][j]=matrix[mini][minj];
            matrix[mini][minj]=dop;
        }
    }
}
 
void sort2(int n, int m, float** matrix)
{
    int i;
    int j;
    float dop;
    for (i=0; i<n; i+=1)
    {
        for (j=0; j<m; j+=1)
        {
            if (matrix[i][j]<matrix[i][j+1])
            {
                dop=matrix[i][j];
                matrix[i][j]=matrix[i][j+1];
                matrix[i][j+1]=dop;
            }
            if (matrix[i][j]<matrix[i+1][i])
            {
                dop=matrix[i][j];
                matrix[i][j]=matrix[i+1][j];
                matrix[i+1][j]=dop;
            }
        }
    }
}
 
 
#endif
Видимо я слишком плохо понимаю с++, но в Ваших указателях, передаваемых в функции я запутался, не разобрался, и вообще слабо понимаю как они должны были работать. Поэтому просто переделал с выделением памяти.

Заполнение матрицы и вектора теперь работает. В сортировках у меня сейчас разбираться нет времени из-за работы, но они обе не работают, одна залипает где-то в бесконечный цикл, вторая вылетает с ошибкой доступа к памяти. Ищите ошибки.
1
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
23.10.2013, 15:38  [ТС]
Rivory, скорее всего вы настолько хорошо понимаете с++, что мои бредовые указатели вам непонятны
И у меня к вам еще парочка вопросов, если не трудно:
Что делают строки
#ifndef __function.h__
#define __function.h__
#endif
и
matrix = (float**) calloc(cols, sizeof(float*));

И насколько я понимаю(видимо неправильно, потому и спрашиваю) return возвращает только одно значение, а в ваших выделениях памяти получается массивы возвращает. Или это указатель на начало массива?
0
148 / 114 / 21
Регистрация: 15.01.2013
Сообщений: 266
23.10.2013, 15:50
Angeline,
C++
1
2
3
#ifndef __function.h__
#define __function.h__
#endif
Это команды прекомпилятора. Защита от включения данного заголовочного файла несколько раз в разных местах программы. При первом подключении, он смотрит, что мы раньше не подключали данный файл, определяет конструкцию __function.h__ и при попытке повторного подключения ничего не делает. Можно подробнее почитать в википедии, например. http://ru.wikipedia.org/wiki/Include_guard

C++
1
matrix = (float**) calloc(cols, sizeof(float*));
Выделяет память под массив указателей на float. Это что-то вроде массива столбцов, где каждый столбец - массив строк. Двумерный массив в принципе на самом деле это массив массивов. После этого в цикле выделяется память под каждую строку отдельно. В конце программы эта память освобождается.

И насколько я понимаю(видимо неправильно, потому и спрашиваю) return возвращает только одно значение, а в ваших выделениях памяти получается массивы возвращает. Или это указатель на начало массива?
Моя функция возвращает указатель на начало матрицы. Указатель на массив указателей.

Возможно я очень криво объяснил, или даже ошибся, что вполне возможно, т.к. я в этом разбирался давным давно.Надеюсь, кто-то сможет объяснить лучше. С первого взгляда это кажется очень сложным, но если попытаться вникнуть, то все на самом деле не так сложно, как кажется на первый взгляд.
1
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
24.10.2013, 12:37  [ТС]
Всем спасибо, вопрос исчерпан.

Добавлено через 20 часов 46 минут
Rivory, прекрасно объяснил, благодарю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.10.2013, 12:37
Помогаю со студенческими работами здесь

Программа выводит не то что нужно
Пытаюсь реализовать дешифрацию шифра Полибия. char alphavit = { {'А','Б', 'В', 'Г', 'Д','Е'}, ...

выводит между результатом непонятное число
нужно вывести: 1й столбец сверху вниз, 2й столбец снизу вверх и т.д. если ввожу матрицу 1 2 3 4 5 6 7 8 9, то результат выдает:...

Вместо нуля выводит непонятное число
Вот пожалуйста кусок кода, считающий неувязку после решения СЛАУ: int n=5; double **a, *b, *x, r, c, s, q; int i,...

Вместо результата выводит непонятное число
Сделал программу которая должна высчитывать по формуле, но она высчитывает не совсем то число. int chislo =...

Программа пишет, что выполняется, но ничего не выводит
Нашёл код в интернете, решил полюбоваться. Данная программа должна выводить изображение сердца, но когда я её запускаю, пишет, что...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru