Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2023, 17:27   #1
Ars_Kis
 
Регистрация: 13.03.2023
Сообщений: 6
По умолчанию Метод Гаусса C++

Написал код, выдает ошибку и предупреждения.
Ошибка C4700 "использована неинициализированная локальная переменная "j""
Предупреждение C6031 "Возвращаемое значение пропущено: "scanf""
Предупреждение C4552 ""<": результат выражения не используется""

Код:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h> //описание функций ввода-вывода
#include <math.h> //описание математических функций
#include <stdlib.h>//описание функции malloc и free
#include <assert.h>
using namespace std;

int gaussMethod(
	int m,
	int n,
	double *a,
	double eps
);
int main()
{
	int m, n, i, rank;
	int j;
	double* a;
	double eps, det;
	
	printf("Введите размер матрицы m,n: ");
	scanf("%d%d", &m, &n);
	
	a = new double[m * n];
	
	printf("Введите элементы матрицы: ");
	for (i = 0; i < m; ++i) {
		for (j < 0; j < n; ++j) {
			scanf("%lf", &(a[i * n + j]));
		}
	}
	printf("Введите точность вычислений eps: ");
	scanf("%lf", &eps);

	rank = gaussMethod(m, n, a, eps);//Вызываем метод Гаусса

	printf("Ступенчатый вид матрицы: \n");
	for (i = 0; i < m; ++i) {
		for (j = 0; j < n; ++j) {
			printf("%10.3lf", a[i * n + j]);
		}
		printf("\n");
	}
	printf("Ранг матрицы: %d\n", rank);

	if (m == n) {
		det = 1.0;
		for (i = 0; i < m;  ++i) {
			det *= a[i * n + i];
		}
		printf("Определитель матрицы = %3lf\n", det);
	}
	delete[]a;
	return 0;

	int gaussMethod(
		int m,
		int n,
		double* a,
		double eps);
		{
			int i,j,k,l;
	double r;

	i = 0; j = 0;

	while (i < m && j < n) {
		r = 0.0;
		for (k = i; k < m; ++k) {
			if (fabs(a[k * n + j]) > r) {
				l = k;
				r = fabs(a[k * n + j]);
			}
			if (r <= eps) {
				for (k = i; k < m; ++k) {
					a[k * n + j] = 0.0;
				}
				++j;
				continue;
			}
			if (l != i) {
				for (k = j; k < n; ++k) {
					r = a[i * n + k];
					a[i * n + k] = a[l * n + k];
					a[l * n + k] = (-r);//меняем знак строки
				}
			}

			r = a[i * n + j];
			assert(fabs(r) > eps);

			for (k = i + 1; k < m; ++k) {
				double c = (-a[k * n + j]) / r;

				a[k * n + j] = 0.0;
				for (l = j + 1; l < n; ++l) {
					a[k * n + l] += c * a[i * n + l];
				}

				++i; ++j;
			}
			return i;
		}
	}
		}
	
}

Последний раз редактировалось Ars_Kis; 15.04.2023 в 17:33. Причина: Добавление
Ars_Kis вне форума Ответить с цитированием
Старый 15.04.2023, 18:33   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
		for (/*j < 0*/ j = 0; j < n; ++j) {
			scanf("%lf", &(a[i * n + j]));
		}
И раз смогли прочитать сообщение об ошибке, тогда стоит ещё обратить внимание на указание строки с ошибкой в этом сообщении.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод Гаусса Max161995 Visual C++ 0 18.05.2014 00:16
Метод Гаусса Symple me Общие вопросы C/C++ 2 14.10.2012 10:31
метод простых операций и метод гаусса зейделя tarasman11 Паскаль, Turbo Pascal, PascalABC.NET 1 23.09.2012 14:46
Метод Гаусса mbeats Общие вопросы C/C++ 5 01.01.2010 20:07
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. Хомяк!!!!! Помощь студентам 4 08.07.2009 10:08