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

Посчитать сумму каждого столбца матрицы,номер которого не является элементом одномерного массива. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как загрузить конфигурацию из файла? http://www.cyberforum.ru/cpp-beginners/thread19996.html
Нужно создать лабиринт, и так, чтобы его конфигурация задавалась из загружаемого программой файла, как это сделать?:help:
C++ Из множества точек на плоскости сформировать множество точек , расстояние от которых до прямой меньше заданной величины Формулировка задания: Из множества точек на плоскости сформировать множество точек , расстояние от которых до прямой меньше заданной величины и упорядочить их в порядке убывания расстояния. Математическая постановка задачи: Дано: Входные данные – значение переменной коэффициентов А, В и С, наибольшее расстояние от точек множества Р до прямой (D), массив E, содержащий координаты точек... http://www.cyberforum.ru/cpp-beginners/thread19992.html
Определить начальный и конечный номера элементов массива C++
Хех,у меня вот какая задача:Определить нач и конечный номера эл. одномерного массива,составляющих макс. по длинне последовательность,значения элементов которой монотонно возрастают. Алгоритм нахождения из массива этой самой последовательности есть: int cikl(int v,int *a,int t) { int k,l,m,y,i; m=0; l=0; s=a; flag=0; for(i=0;i<t;i++)
Помогите подкорректировать!!!:p C++
Огрррромная просьба!!!Все есть и условие и программа,но!!!! Условие:Дана Двумерная матрица m*n и одномерный массив,посчитать сумму каждого столбца матрицы,номер которого не является элементом одномерного массива.Счет столбцов в моей проге идет с нулегого. Загвоз вот в чем: #include <stdio.h> #include <conio.h> #include <math.h> #include <stdlib.h> #include<string.h> #include <fstream.h>
C++ программа по двойственному симплекс методу http://www.cyberforum.ru/cpp-beginners/thread19987.html
здравствуйте! очень нужна помощ! написала программу, но выдает неверный ответ, знаю в каком месте неправильно, но как должно быть никак не додумаюсь, помогите пожалуйста! вот код: задача-найти оптимальную табдицу с помощью двойственного симплекс-метода, ошибка в функции min_J Выбор включаемой переменной производится следующим образом. Вычисляются отношения коэффициентов z-строки к отрицательным...
C++ Ресурсы Подскажите каким образом можно открыть для чтения ресур? нужно открыть так чтобы можно было читать функцией ReadFile(); Смог сделать только зная оффсет этого ресурса в файле приложения. HANDLE file=OpenFile(__argv,...) SetFilePointer(file,offset,...) ReadFile(file,...) подробнее

Показать сообщение отдельно
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
31.12.2008, 06:30     Посчитать сумму каждого столбца матрицы,номер которого не является элементом одномерного массива.
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
 
#include <stdio.h>
#include <stdlib.h>
 
int *veccreat(int vlength);
int *vecfill(int *vector, int vlength, FILE *inputfile);
int *vecprint(int *vector, int vlength, FILE *outputfile);
void vecfree(int *vector);
 
int **mtxcreat(int rows, int cells);
int **mtxfill(int **matrix, int rows, int cells, FILE *inputfile);
int **mtxprint(int **matrix, int rows, int cells, FILE *outputfile);
void mtxfree(int **matrix, int rows);
 
#define MAXLINE  1000   /* максимальная длина строки */
 
/* считает сумму каждого столбца матрицы, индекса которого нет в массиве;
   матрица и вектор индексов из файлов, вектор сумм в файл */
main()
{
    FILE *mfp, *vfp, *ofp;          /* указатели на файлы матрицы, вектора, сумм */
    int **mtx, nrows, ncells;       /* матрица, количество строк, столбцов */
    int *excl, vlen;                /* вектор индексов исключения, длина */
    int *sums, *sumsp, nsums;       /* вектор сумм, указатель перехода, кол-во сумм */
    int mres, vres, nchar, tmp, prevncells; /* результаты проверок, подсчёт столбцов */
    int i, j, ilow;                 /* шаги для циклов */
    char line[MAXLINE], *p;         /* строка и указатель для построчного чтения */
    const char *mfname = "matrix.txt";
    const char *vfname = "vector.txt";
    const char *ofname = "cellsums.txt";
    
    /* открывает файлы матрицы, вектора индексов, вектора сумм */
    if ((mfp = fopen(mfname, "rb")) == NULL
     || (vfp = fopen(vfname, "rb")) == NULL
     || (ofp = fopen(ofname, "wb")) == NULL)
        exit(1);
    /* проверяет файлы матрицы и вектора индексов на числа */
    for (vlen = 0;
         (mres = fscanf(mfp, "%d", &tmp)) == 1
      && (vres = fscanf(vfp, "%d", &tmp)) == 1; vlen++)
        ;
    if (mres == 0 || vres == 0) /* если в файлах не числа, выйти */
        exit(2);
    rewind(mfp);
    /* расчитывает количество строк и столбцов матрицы */
    for (nrows = 0; (p = fgets(line, MAXLINE, mfp)) != NULL; )
        if (sscanf(p, "%d", &tmp) == 1) {
            for (ncells = 0; sscanf(p, "%d%n", &tmp, &nchar) == 1; ncells++)
                p += nchar;
            if (nrows == 0)   /* первая строка образец для следующих */ 
                prevncells = ncells;
            if (ncells != prevncells)   /* если это не матрица, выйти */
                exit(3);
            prevncells = ncells;
            nrows++;
        }    
    if (nrows < 2 || ncells < 2)   /* минимальная матрица 2 x 2 */
        exit(3);
    if ((mtx = mtxcreat(nrows, ncells)) == NULL)   /* выделяет память под матрицу */
        exit(4); 
    rewind(mfp);
    if (mtxfill(mtx, nrows, ncells, mfp) == NULL) { /* заполняет матрицу из файла */
        mtxfree(mtx, nrows);
        exit(4);
    }    
    fclose(mfp);
    //if (mtxprint(mtx, nrows, ncells, stdout) == NULL)  // покажет матрицу
      //  exit(4);
    if ((excl = veccreat(vlen)) == NULL) {   /* выделяет память под вектор индексов */
        mtxfree(mtx, nrows);   /* если ошибка, удаляет матрицу из памяти */
        exit(5);
    }    
    rewind(vfp);
    if (vecfill(excl, vlen, vfp) == NULL) { /* заполняет вектор индексов из файла */
        mtxfree(mtx, nrows);   /* если ошибка, удаляет матрицу из памяти */
        vecfree(excl);   /* удаляет вектор индексов из памяти */
        exit(5);
    }
    fclose(vfp);
    //if (vecprint(excl, vlen, stdout) == NULL)  // покажет вектор индексов
      //  exit(5);
    if ((sums = veccreat(ncells)) == NULL) {   /* выделяет память под вектор сумм */
        mtxfree(mtx, nrows);   /* если ошибка, удаляет матрицу из памяти */
        vecfree(excl);   /* удаляет вектор индексов из памяти */
        exit(6);
    }    
    for (i = nsums = 0, sumsp = sums; i < ncells; i++) { /* перебирает столбцы */
        for (ilow = 0; ilow < vlen; ilow++)
            if (excl[ilow] == i) {  /* индекс столбца матрицы в векторе */
                ilow = -1;
                break;
            }    
        if (ilow < 0)   /* если индекс есть в векторе перейти дальше */
            continue;
        nsums++;
        for (j = 0, *sumsp = 0; j < nrows; j++)
            *sumsp += mtx[j][i];   /* сохраняет сумму в вектор сумм */
        sumsp++;
    }
    //if (vecprint(sums, nsums, stdout) == NULL)  // покажет вектор сумм
      //  exit(6);
    if (vecprint(sums, nsums, ofp) == NULL) {  /* выводит вектор сумм в файл */
        mtxfree(mtx, nrows);   /* если ошибка удаляет из памяти матрицу и векторы */
        vecfree(excl);
        vecfree(sums);
        exit(6);
    }    
    fclose(ofp);
    mtxfree(mtx, nrows); /*  удаляет из памяти матрицу и векторы */
    vecfree(excl);
    vecfree(sums);
    return 0;
}
 
/* mtxcreat:  создаёт матрицу [ m x n ] */
int **mtxcreat(int m, int n)
{
    int **mtx, i;
    
    if ((mtx = (int **) calloc(m, sizeof(int *))) == NULL)
        return NULL;
    for (i = 0; i < m; i++)
        if ((mtx[i] = (int *) calloc(n, sizeof(int))) == NULL) {
            while (--i >= 0)
                free((void *) mtx[i]);
            free((void *) mtx);
            return NULL;
        }
    return mtx;    
}
 
/* mtxfill:  заполняет матрицу mtx [ m x n ] данными из файла ifp */
int **mtxfill(int **mtx, int m, int n, FILE *ifp)
{
    int i, j;
    
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++) {
            if (fscanf(ifp, "%d", &mtx[i][j]) != 1)
                return NULL;
        }
    return ferror(ifp) ? NULL : mtx;
}
 
/* mtxprint:  выводит матрицу mtx [ m x n ] в файл ofp */
int **mtxprint(int **mtx, int m, int n, FILE *ofp)
{
    int i, j;
    
    for (i = 0; i < m; i++)
        if (mtx[i] != NULL)
            for (j = 0; j < n; j++)
                fprintf(ofp, "%3d%s",
                    mtx[i][j], (j == n-1 ? "\n" : ""));
    return ferror(ofp) ? NULL : mtx;
}
 
/* mtxfree:  удаляет матрицу mtx на m строк из памяти */
void mtxfree(int **mtx, int m)
{
    int i;
    
    for (i = 0; mtx != NULL && i < m; i++)
        free((void *) mtx[i]);
    free((void **) mtx);
}
 
/* veccreat:  создаёт вектор длины n */ 
int *veccreat(int n)
{
    return (int *) calloc(n, sizeof(int));
}
 
/* vecfill:  заполняет вектор v длины n данными из файла ifp */ 
int *vecfill(int *v, int n, FILE *ifp)
{
    int *vp;
    
    for (vp = v; n > 0 && fscanf(ifp, "%d", vp++) == 1; n--)
        ;
    return ferror(ifp) ? NULL : v;    
}
 
/* vecprint: выводит вектор v длины n в файл ofp */ 
int *vecprint(int *v, int n, FILE *ofp)
{
    while (n--)
        fprintf(ofp, " %d%s",
            *v++, (n == 0 ? "\n" : ""));
    return ferror(ofp) ? NULL : v;
}
 
/* vecfree:  удаляет вектор v из памяти */ 
void vecfree(int *v)
{
    free((void *) v);
}
matrix.txt
Код
 
    0  1  2  3 
    4  5  6  7 
    8  9  1  1 
    4  5  7  8
vector.txt
Код
 
    12  3  0  10  11
cellsums.txt
Код
 20 16
полный вариант
 
Текущее время: 03:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru