С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Получить среднее арифметическое всех членов последовательности http://www.cyberforum.ru/cpp-beginners/thread984970.html
Напишите пожалуйста полный код данной программы в microsoft visual studio c++ Даны действительные числа a1, ..., a20. Получить числа b1, ..., b20, где bi – среднее арифметическое всех членов...
C++ Сортировка двумерного массива Задача: Написать код сортировки двумерного массива размерностью m*n. Переставить строки матрицы так, чтобы элементы k-го столбца были отсортированы по неубыванию с помощью прямого выбора. http://www.cyberforum.ru/cpp-beginners/thread984961.html
C++ Собеседник на C++
Нужны советы как написать такую программу.
C++ Необработанное исключение
Доброго времени суток. Ошибка: Необработанное исключение типа "System.Resources.MissingManifestResourceException" в mscorlib.dll Дополнительные сведения: Не удалось найти ресурсы,...
C++ Не могу освоить функций http://www.cyberforum.ru/cpp-beginners/thread984916.html
Программа должна выдавать абсолютную и относительную погрешность, в чем проблема? #include <iostream> #include <conio.h> using std::cout; using std::cin; using std::endl; double b;
C++ Конструкция циклов с предусловаием и постусловием Вообще не соображаю как решить такую задачу (3 задача), 2-ю задачу вроде решил, его можно оценить тут :): http://www.cyberforum.ru/cpp-beginners/thread984862.html 1. Разработать алгоритм и программ... подробнее

Показать сообщение отдельно
Rivory
146 / 112 / 2
Регистрация: 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.