 
	
	Mejor respuesta robert01 , 23 febrero 2023 - 09:03
Ya encontré la solución luego de probar de todo. Solo cambié el valor 0 de tamano por 1. Saludos
Ir al mensaje completo 
	
	 
	 
	
	Mejor respuesta robert01 , 23 febrero 2023 - 09:03
Ya encontré la solución luego de probar de todo. Solo cambié el valor 0 de tamano por 1. Saludos
Ir al mensaje completo 
	
	 
					
				
				
				
					
				
			
				
			Escrito 22 febrero 2023 - 06:01
Hola. ¿Como les va a todos? Tengo un pequeño problema. Esta parte de código en C es para abrir y leer una matriz en un archivo de texto. El problema que tiene es que no lee correctamente si es de 4 x 4, lee como si fuera de 3x3 y con errores. Hay algo que no veo. No se programar en c.
#include <stdio.h>
#include <stdlib.h>
#include "mi_libreria.h"
int main() {
int tamano;
double** matriz;
if (archivo == NULL) {
return 1;
}
// Contar número de filas
tamano = 0;
if (c == '\n') {
tamano++;
}
}
// Crear matriz
for (int i = 0; i < tamano; i++) {
}
// Leer valores
for (int i = 0; i < tamano; i++) {
for (int j = 0; j < tamano; j++) {
return 1;
}
}
}
for (int i = 0; i < tamano; i++) {
for (int j = 0; j < tamano; j++) {
}
}
calcular_matriz_inversa(matriz, tamano);
for (int i = 0; i < tamano; i++) {
for (int j = 0; j < tamano; j++) {
}
}
for (int i = 0; i < tamano; i++) {
free(matriz[i]);
}
free(matriz);
return 0;
}
Gracias
Editado por robert01, 22 febrero 2023 - 06:27 .
 
					
				
				
				
					
				
			
				
			Escrito 23 febrero 2023 - 09:03 Mejor respuesta
Ya encontré la solución luego de probar de todo. Solo cambié el valor 0 de tamano por 1. Saludos
 
					
				
				
				
					
				
			
				
			Escrito 24 febrero 2023 - 09:27
Ya encontré la solución luego de probar de todo. Solo cambié el valor 0 de tamano por 1. Saludos
Que bien robert01,
Lo que no sabemos C aprendimos algo hoy.
Saludos
 
					
				
				
				
					
				
			
				
			Escrito 25 febrero 2023 - 04:17
Hola Egostar!
Es increíble pero si sabía algo de C pero no me acordaba por el paso del tiempo. Ayer encontré un código muy parecido a este como parte de un programa que había hecho en 2005 en unos backup.
Ese código que puse ahí fue generado por www.chat.openai.com. Se me ocurrió probar que podía llegar a obtener preguntando.
El código de la dll es:
#include "inversa.h"
__declspec(dllexport) calcular_matriz_inversa(double** matriz, int tamano) {
// Implementación del cálculo de la matriz inversa
}
void calcular_matriz_inversa(double **matriz, int tamano) {
double temp;
int i, j, k;
double identidad[tamano][tamano];
// Inicializar la matriz identidad
for (i = 0; i < tamano; i++) {
for (j = 0; j < tamano; j++) {
identidad[i][j] = (i == j) ? 1 : 0;
}
}
// Convertir la matriz original en una matriz triangular superior
for (i = 0; i < tamano; i++) {
for (j = i + 1; j < tamano; j++) {
temp = matriz[j][i] / matriz[i][i];
for (k = i; k < tamano; k++) {
matriz[j][k] -= temp * matriz[i][k];
}
for (k = 0; k < tamano; k++) {
identidad[j][k] -= temp * identidad[i][k];
}
}
}
// Convertir la matriz triangular superior en la matriz identidad
for (i = tamano - 1; i >= 0; i--) {
for (j = i - 1; j >= 0; j--) {
temp = matriz[j][i] / matriz[i][i];
for (k = 0; k < tamano; k++) {
identidad[j][k] -= temp * identidad[i][k];
}
}
}
// Normalizar la matriz identidad
for (i = 0; i < tamano; i++) {
temp = matriz[i][i];
for (j = 0; j < tamano; j++) {
identidad[i][j] /= temp;
}
}
// Copiar la matriz inversa en la matriz original
for (i = 0; i < tamano; i++) {
for (j = 0; j < tamano; j++) {
matriz[i][j] = identidad[i][j];
}
}
}
#ifndef DLL_INVERSA_H
#define DLL_INVERSA_H
#ifdef __cplusplus
extern "C" {
#endif
void calcular_matriz_inversa(double *matriz, int tamano, double *matriz_inversa);
#ifdef __cplusplus
}
#endif
#endif
Saludos
 
					
				
				
				
					
				
			
				
			Escrito 25 febrero 2023 - 09:05
El problema lo tienes si la última linea de tu archivo de texto no termina en un retorno de línea '\n', entonces feof en ese punto es cierto y con elle te falta una linea por contar.
Pero si no es el caso vas a tener un problema. Imagina que después de escribir tu matriz de 4x4 hay varios retornos de línea, tu código fallará. O tienes bien definido y limitado es número de retornos de línea que se pueden escribir al final del archivo, o tienes que ajustar el código de lectura.
Para el caso de necesitar el control de este asunto, propongo este ajuste que te permite leer el tamaño independientemente de si hay uno, ninguno o cientos de retornos al acabar tu archivo:
// Calculando el tamaño del archivo
fseek(archivo, 0, SEEK_END);
long Size = ftell(archivo);
fseek(archivo, 0, SEEK_SET);
// Reservando un buffer suficientemente grande
char *buffer = (char*)malloc(Size);
// Leyendo el número de líneas útiles del archivo
tamano = 0;
while(fgets(buffer, Size, archivo) && *buffer != '\n') tamano++;
free(buffer);
Saludos.
 
					
				
				
				
					
				
			
				
			Escrito 25 febrero 2023 - 10:27
El problema lo tienes si la última linea de tu archivo de texto no termina en un retorno de línea '\n', entonces feof en ese punto es cierto y con elle te falta una linea por contar.
Pero si no es el caso vas a tener un problema. Imagina que después de escribir tu matriz de 4x4 hay varios retornos de línea, tu código fallará. O tienes bien definido y limitado es número de retornos de línea que se pueden escribir al final del archivo, o tienes que ajustar el código de lectura.
Para el caso de necesitar el control de este asunto, propongo este ajuste que te permite leer el tamaño independientemente de si hay uno, ninguno o cientos de retornos al acabar tu archivo:
cpp
// Calculando el tamaño del archivo
fseek(archivo, 0, SEEK_END);
long Size = ftell(archivo);
fseek(archivo, 0, SEEK_SET);
// Reservando un buffer suficientemente grande
char *buffer = (char*)malloc(Size);
// Leyendo el número de líneas útiles del archivo
tamano = 0;
while(fgets(buffer, Size, archivo) && *buffer != '\n') tamano++;
free(buffer);
Saludos.
Hola Escafandra. Gracias por tu aporte. Ya voy a probar cuando consiga que el compilador se pueda ejecutar. No se porque ahora me dice que no puede reconocer gcc.
Saludos