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

реализация гаусса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Реагирования приложения на клавиши http://www.cyberforum.ru/cpp-beginners/thread68111.html
в общем нужно чтобы приложение при нажатии клавиши на клавиатуре выполняло какое либо действие тип приложения windows forms
C++ Цифры числа Есть задачка: ВВести натуральное число, сохранить все его цифры: А) В отсортированном массиве, массив распечатать б) Построить список частот цифр в числе, список распечатать В) Найти максимальное число, которое можно построить из цифр числа Помогите, будьте добры=) http://www.cyberforum.ru/cpp-beginners/thread68109.html
C++ Ошибка в программе!
найти минимальное положительное целое число Q такое, что произведение цифр числа Q в точности равняется N. Выведите целое число Q. Если такого числа не существует, выведите −1. Прогу я написала, тока никак не получается сделать так, чтоб еслиб Q не сущ выводило бы -1 Пожалуйста помогите вот код :) # include <iostream> using namespace std; int main () {
отсортировать массив по возрастанию C++
#include <iostream.h> #include <stdlib.h> #include <stdio.h> #define N 10 БУДУ ПРЕМНОГО БЛАГОДАРЕН ЕСЛИ ПОМОЖЕТЕ решить 3 ЗАДАЧКИ: 1.найти произведение чисел в массиве 2.отсортировать массив по возрастанию 3.найти опреедлитель матрицы 3*3 по определению определителя
C++ Передача динамических матриц в функцию http://www.cyberforum.ru/cpp-beginners/thread68061.html
Здравствуйте, ребята! У меня очень простой вопрос. Я работаю с очень большими матрицами. Они создаются в куче: const N = 10000; int **MA = new int * ; for(int i = 0; i < N; i++){
C++ Cвязанные списки. Длинная арифметика. При помощи связанных списков необходимо написать процедуру возведения числа в большую степень (до 200 знаков) как это реализовать? можете написать алгоритм? или сам код с описаниями, если не трудно? подробнее

Показать сообщение отдельно
Акелла
Сонный металюга
 Аватар для Акелла
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295

реализация гаусса - C++

28.11.2009, 00:06. Просмотров 1281. Ответов 28
Метки (Все метки)

так люди - просить написать за меня не прошу - сам сделаю... у меня вот в чем загвоздка -
решил не искать легкий путей - пользователь задает какого будет размера матрица (тк. матрица квадратная N*N - задает N) - т.е. я под это дело динамически двумерный массив и пошел дальше...

ввод тоже реализовать хочу не от легкой жизни - но вот с ним и проблема - пользователь должен вводить коэффициенты при Х построчно - ну а прога уже сама из строки с пробелами выдирать числа - и тут загвоздка - числа то она выдирает - но почему то всю матрицу забивает только последней введеной строкой... вот ту я и не могу найти ошибку в своем решении....
в данном случае это реализуется в функции enter

исходник вот (к гаусу конкретно еще не приступал - пока только дорабатываю ввод матрицы)

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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
 
//-------------------------------------------------------------------------------------------------------------------
 
double *fMatrix;    //массив - сама матрица как бы=)
//-------------------------------------------------------------------------------------------------------------------
 
int enterMatrix(void);  //функция ввода матрицы (изначальной)
int matrixMemmory(int iSize);   //функция выделения памяти под матрицу динамически исходя из запроса юзера
int enter(int N);   //функция ввода чисел в матрицу
int gauss(int iSize);   //функция метода гаусса
 
//------------------------------------------------------------------------------------------------------------------------------
 
int main()
{
    int iErr; //переменая ошибки
    printf("Hellow! It's a programm for Gauss SLAU method\n\n");
    
    //вызов процедуры ввода расширенной матрицы с обработкой ошибок
    iErr = enterMatrix();
    if(iErr != 0)
    {
        printf("Error - Main: enter mstrih - falled\n");
        _getch();
        exit(1);
    }
    return 0;
}
//-------------------------------------------------------------------------------------------------------------------
 
int matrixMemmory(int iSize)    //выделяем под нашу матрицу динамически память N строк и N+1 столбов 
{                               //она ведь должна быть расширенной для гаусса
    fMatrix = new double[iSize, iSize + 1];
    if(!fMatrix)
    {
        printf("Error - Matrix Memmory: Error of allocation of memory\n");
        return(-1);
    }
    return(0);
}
 
//------------------------------------------------------------------------------------------------------------------------
 
int enter(int N)
{
    int i, j;
    char *pchTempBuf;   //временный буфер
 
    //создаем одномерныйm массив равный длинне строки матрицы
    pchTempBuf = (char *)calloc((N*N), sizeof(char));
    if(!pchTempBuf)
    {
        printf("Error - Enter: allocate memmory for TempBuf\n");
        _getch();
        exit(1);
    }
 
    //начинаем ввод коэффициентов в матрицу
    for(j=0; j < N; j++)
    {
        fgets(pchTempBuf, N*N, stdin);  //читаем с клавиатуры во временый буфер строку чтоб потом из нее выдрать коэфициенты
 
        char *end, *start = pchTempBuf;
        end = start;
        //выбираем из буфера числа, преобразуем в флоат и записываем в матрицу
        for(i=0; i < (N+1); i++)
        {
            fMatrix[j, i] = strtod(start, &end);
            start = end;
            //пропускаем символы не входящие в числа
            while( !isdigit (*start) && *start) start++;
 
        }
        
    }
        
 
    return(0);
}
 
 
 
//-----------------------------------------------------------------------------------------------------------------------------------
 
int enterMatrix(void)
{
    int iSizeCount = 0;
    int iErr; //переменая ошибки
    
    printf("Enter size of your matrix \n (The quantity the equation should be equal to quantity of unknown persons)");
    printf("\n Size of Matrix: ");
    scanf("%i",&iSizeCount);
    printf("\n");
 
    //выделяем память под матричку
    iErr = matrixMemmory(iSizeCount);
    if (iErr != 0)
    {
        printf("Error - Enter Matrix: Something with memory allocation\n");
        _getch();
        exit(1);
    }
    
    //шпаргалка как вводить матричку
    printf("We start to enter values of factors of their equations - \n i.e. we set a matrix in a kind: \n\n");
    printf("Any your equation looks like: \n\n");
    printf("\t A11*X1 + A12*X2+...+A1n*Xn = B1\n");
    printf("\t A21*X1 + A22*X2+...+A2n*Xn = B2\n");
    printf("\t --------------------------------\n");
    printf("\t Am1*X1 + Am2*X2+...+Amn*Xn = Bm\n\n");
    printf("You enter only factors at X i.e. all A and free factors, i.e. all B\n\n");
 
    //запускаем функцию ввода значений в матрицу
    iErr = enter(iSizeCount);
    if (iErr != 0)
    {
        printf("Error - Enter Matrix: Something with return from simple input\n\n");
        _getch();
        exit(1);
    }
 
    //контрольный вывод матрицы
    printf("Your matrix: \n");
 
    for(int j=0; j < iSizeCount; j++)
    {
        for(int i=0; i < (iSizeCount+1); i++)
        {
            printf("%.2f ", fMatrix[j,i]);
        }
        printf("\n");
    }
    printf("Press ENTER to continue");
    _getch();
 
    return(0);
}
Добавлено через 1 час 5 минут
ммм... ну, наши великие метры - укажите мне на мою маленькую глупость?=)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru