• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Ошибка В Коде, Решение Слау Методом Итерраций

  • Автор темы Guest
  • Дата начала
G

Guest

Собственно столкнулся с проблемой - алгоритм в маткаде работает, все считает верно.
Как только это же самое перенес в С, не считает.. Хотя, по моему мнению, все верно.
Вот код, может кто увидит ошибку

C++:
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <limits.h>
#include <values.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#include <cstdlib>
#include <stdlib.h>
#include <VCL.h>
#include <iostream.h>
#include <string.h>
#include <dos.h>

FILE *f=fopen( "C:\\input.txt" , "r");
FILE *f2=fopen( "C:\\output.txt" , "w");


int main() {
void readmas(float x[10][10],char name,int n);
void readmas2(float x[10],char name,int n);
float A[10][10];
float B[10];
float x[10][100];
int i,j, ha,hb,wa,n;
float E;
int k = 1;
int m = 1;
float s;


printf("Vvedite kolichestvo uravnenij:\n");
scanf("%d",&n);
printf("\nA:\n");
readmas(A, 'A',n);
printf("\nB:\n");
readmas2(B, 'B',n);
printf("\nVvedite tochnost resheniya:\n");
scanf("%f",&E);
printf("\n");

while (m > E) {
m = 0;
for (i = 1; i <= n; i++) {
s = 0;
for (j = 1; j <= n; j++) {
if (i != j) {
s = s + A[i][j]*x[j][k];
}
}
x[i][k+1] = (B[i]-s)/A[i][i];
if (abs(x[i][k+1] - x[i][k]) > m) {
m = abs(x[i][k+1] - x[i][k]);
}
}
k = k + 1;
}

for (i = 1; i <= n; i++) {
cout<<x[i][k];
cout<<"\n";
}

getch();
return 0;
}


void readmas(float x[10][10],char name,int n)
{

int i,j;
for (i=1; i<=n;i++) {
for (j=1; j<=n; j++) {
fscanf(f, "%d", &x[i][j]);
printf("%d ", x[i][j])	 ;
}
printf("\n");
}

Задание же было - Составить программу решения системы линейных алгебраических уравнений методом итераций.
 
L

lazybiz

)))))))))))))))))))))))))))))что это, товарисч кодер:

C++:
...
#include <dos.h>

FILE *f=fopen( "C:\\input.txt" , "r");
FILE *f2=fopen( "C:\\output.txt" , "w");


int main() {
...
??????
Я так понимаю, раз ты смог все это написать, то ты сможешь и это объяснить!?
Да, и еще, что значит "не считает" что выдает программа?))
 
G

Guest

Это так сказать подзадания - организовать вывод рез-а в файл, а ввод СЛАУ из файла.
Это так настораживает?

Не считает -в прямом смысле. В идеале как должно было быть? Ввел систему уравнений, ввел неизвесные коэф-ы ( из файла ес-но)
И вместо решения ( если задан массив размерностью 3х3 => 3 корня должно быть ) выдает некие числа, далекие от правды. Очень далёкие.
 
L

lazybiz

Ты компилировал эту программу? Что она выдает/не выдает? Описывай проблему конкретней а не так как ты описал "не считает. Вот код, может кто увидит ошибку".
 
G

Guest

Естественно, как иначе?
Скомпилировал - ошибок нету.
При нахождении неизвестных коэфицентов выдаются НЕ ПРАВИЛЬНЫЕ.
Выдает - не правильное решение.
 
L

lazybiz

Естественно, как иначе?
Скомпилировал - ошибок нету.
А теперь объясни, как ты вызываешь функции за приделами какого-либо блока? Ни один известный мне компилятор не скомпилирует твой код.

Я об этом, если ты не понял:
C++:
...
#include <dos.h>

FILE *f=fopen( "C:\\input.txt" , "r");
FILE *f2=fopen( "C:\\output.txt" , "w");


int main() {
...

Добавлено:
Выдает - не правильное решение.
))))))))))как эта программа может выдавать фразу "не правильное решение", если в твоем коде этой фразы просто нет!!?????
 
G

Guest

Ого, прям ни в одном? Значит у меня уникальный.
Потому что все работает.
Если сузить вообще проблему - мой косяк в АЛГОРИТМЕ. Вот я и прошу знающих и прошаренных людей помоч увидеть его.
На инклуды прошу вообще не обращать внимания, все просто собраны в куче.
зы в БДС и борланде код отлично компилируется.
 
L

lazybiz

Ну ок. Раз он у тебя компилируется.
Первое что увидел: массив x[][] не инициализирован в этом месте:
C++:
s = s + A[i][j]*x[j][k];

Добавлено: Поехали дальше.
В С/С++ индексация массивов начинается с нуля, а не с единицы.

Добавлено: Функцию void readmas2(float x[10],char name,int n); я вообще не вижу. Вижу только прототип и обращение к ней.
 
G

Guest

Ну ок. Раз он у тебя компилируется.
Первое что увидел: массив x[][] не инициализирован в этом месте:
C++:
s = s + A[i][j]*x[j][k];

Добавлено: Поехали дальше.
В С/С++ индексация массивов начинается с нуля, а не с единицы.

Добавлено: Функцию void readmas2(float x[10],char name,int n); я вообще не вижу. Вижу только прототип и обращение к ней.

Это все? Просто для уровня того места, куда мне сдавать, главная задача программы - "чтобы работала"
Я благодарен за тактичные замечания, но это все? Взгляд вижу намётан у вас, может еще что заметите? :)
 
G

Guest

Выкладывай исправленный код. В решении систем линейных уравнений я не силен, но помочь найти ошибки в коде я могу:)
Пока все. Исправь сначала указанные ошибки.
Займусь этим на выходных, обязательно!!!! сейчас просто курсач :facepalm:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!