Detalle de temas
aemarchivos - Codi. prueba C++ (2)
  AUTOR
  Contacto
  *** INDICE ***
  C++ Editores y Compiladores
  Codigos Turbo C++ sobre DOS (a)
  Cod Ej: DevC++
  Codi. prueba C++ (2)
  IDE Qbasic y QB
  IDE Visual Basic 6
  PROYECTOS VB6
  HTML y ASP
  VisualStudio.Net
  Proyectos en VB.Net
  ALGO DE JAVA
Acá un ejemplo de código y explicacion para el cáculo de un determinante de una matriz 3 x 3  
http://e-ducativa.catedu.es/44700165/aula/archivos/repositorio/4250/4345/html/12_la_regla_de_sarrus.html
Alli esta como se usa la regla de sarrus para calcular el determinante de una matriz 3 x 3


int m[5][3];
int Det;
//llenar:
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("Ingrese el valor fila %d; columna %d: ", i +1, j + 1):
scanf("%i, &m[i][j]);
fflush(stdin);
if (i < 3) m[i+3][j] = m[i][j]; //llena las columnas 4 y 5
}}

/*Se trata de armar una matriz de 5 x 3,  donde las tres primeras columnas van llenadas con  los
valores de tu matriz original,  luego se repite la primera y la segunda columna.
El siguiente proceso, es multiplicar por los indices 

Cabe aclarar que los indices de la matriz son m[filas][columnas]
quedaría entonces asi:   

m[0][0] m[1][0] m[2][0]  m[3][0] m[4][0]   

m[0][1] m[1][1] m[2][1]  m[3][1] m[4][1]   

m[0][2] m[1][2] m[2][2]  m[3][2] m[4][2]  
                     */  
    
Det= ((m[0][0] * m[1][1] * m[2][2])) + ((m[1][0] * m[2][1] * m[3][2])) + ((m[2][0] * m[3][1] * m[4][2])) -
((m[2][0] * m[1][1] * m[0][2])) - ((m[3][0] * m[2][1] * m[1][2])) - ((m[4][0] * m[3][1] * m[2][2]));





 
La repuesta del otro amigo está Ok, pero se puede usar si se crea una matriz forma dinámica,  declarando 
la funcion y llamandola desde otra función o el main.  Acá te paso el codigo probandobos métodos

#include <stdio.h>
#include <stdlib.h>

int determinante(int **m, int len);

//int m[5][3];
int Detp, Detn, Det, c, f;

main(){
/*
int **m;
*m=new int[5];
for(f=0;f<3;f++){
m[f]=new int[5];
if (m== NULL)
{
printf("No se pudo crear la matriz Dinámica");
system("PAUSE >NULL");
exit (1);
}//creacion dinámica de la matriz para usar la funcion de Exec}
//Esta forma de crear la matriz causó error en DevC++ si bien corrió perfecto en TurboC++, por lo que siguiendo la referencia de:
http://blog.davidxl.es/2010/02/como-crear-matrices-dinamicas-con-c-y-c.html
fué reemplazada por esto:  /*


int **m=new int*[3]; //creacion dinámica de la matriz para operar con la función
if (m == NULL) {printf("Error en creacion de la matriz, no se puede operar"); exit(1); }

for(f=0;f<=5;f++){
m[f]=new int[3];
if (m[f] == NULL) {printf("Error en creacion de la matriz, no se puede operar"); exit(1); }
}
system("CLS");
printf("Ingreso de valores de la matriz de 3 x 3:\n");
for(f=0;f<3;f++){
for(c=0;c<3;c++){
printf("Ingrese el valor fila %d; columna %d: ", f +1, c + 1);
scanf("%i", &m[c][f]);
fflush(stdin);
}}
for(f=0;f<3;f++){
for(c=3;c<5;c++){
m[c][f] = m[c-3][f]; //llena las columnas 4 y 5
}}

Det= ((m[0][0] * m[1][1] * m[2][2])) + ((m[1][0] * m[2][1] * m[3][2])) + ((m[2][0] * m[3][1] * m[4][2])) -

((m[2][0] * m[1][1] * m[0][2])) - ((m[3][0] * m[2][1] * m[1][2])) - ((m[4][0] * m[3][1] * m[2][2]));

for(f=0;f<3;f++){
for(c=0;c<5;c++){
printf("%4d", m[c][f]);
}
printf("\n");
}
printf("\Determinante de la matriz = %4d", Det);
printf("\n\n Determinante segun funcion = %4d", determinante(m, 3));
system ("PAUSE >NULL");
return 0;
}//fin del main

int determinante(int **m, int len) // Funcion aportada por Exec (Yahoo repuestas)
{
int i, j, producto1, producto2, col, fil, sumapos, sumaneg, suma;
sumapos = 0;
sumaneg = 0;
suma = 0;
for(i = 0; i < len; i++)
{
producto1 = 1;
producto2 = 1;
for(j = 0; j < len; j++)
{
col = j + i;
if( col >= len )
col = col - len;

producto1 = producto1 * m[j][col];
producto2 = producto2 * m[len-(j+1)][col];
}
sumapos = sumapos + producto1;
sumaneg = sumaneg + producto2;
}
suma = sumapos - sumaneg;
return suma;
}

Lo podes ejecutar desde un compilador y ver que dá correcto resultado.

Otro codigo, esta vez usando archivo de disco y estructuras


Este codigo que por razones fue fotografiado desde el compilador, puede servir como ejemplo para el manejo de archivos de disco, a continuacion, lo paso como texto, tendran que hacerle las correcciones que se necesiten, porque el editor cambia algunos signos
#include <stdio.h>
#include <stdlib.h>

void openreg();
void nuevoU();
void mostrar();
int i;
char ot;
 
const int CN=100; //cantida de usuarios

FILE *arch;

struct Registro{
char ape[20];
char pin[5];
} cli[CN];

int main(){
openreg();



return 0;
}

void openreg(){
arch=fopen("USUARIO.DAT", "r+");
if(arch==NULL) {
printf("ERROR: No se pudo encontrar el archivode USUARIOS\n\nSe creara archivo");
    getchar();
    arch=fopen("USUARIO.DAT", "w+");
    if(arch==NULL) { printf("ERROR: no se pudo Crear el archivo de USUARIOS");
    getchar(); exit(0); }
    else    {
    fwrite(&cli, sizeof(cli), 1, arch);
    fclose(arch);
        }

}
else nuevoU();
mostrar(); //solo para ver los registros, sacar en uso normal

}

void nuevoU(){
fread(&cli, sizeof(cli), 1, arch);//nuevo USUARIO
fclose(arch);

for(i=0;i<CN; i++) if (cli[i].ape[0]=='\x0') break;
for(i;i<CN; i++){
printf("\nIngrese NICK Nuevo Cliente: "); gets(cli[i].ape);

printf("\nIngrese PIN (4 alfanumericos) Nuevo USUARIO: "); gets(cli[i].pin);

fflush(stdin);

printf("\nCargara otro cliente? S=Si, N=No: ");
scanf("%c", &ot); fflush(stdin);
if(ot=='n' || ot=='N')break;
}

arch=fopen("USUARIO.DAT", "w+");
if(arch==NULL) { printf("ERROR: no se pudo guardar el archivo de USUARIOS");
        getchar(); exit(0); }
else{
fwrite(&cli, sizeof(cli), 1, arch);
fclose(arch);
    }
}

void mostrar(){

char lin[CN];
printf("%6s; %20s; %5s;\n","Nro T:", "   NickUsuario", " PIN ");
for(i=0;i<CN; i++)
{
if (cli[i].ape[0]=='\x0') break;
printf("%#05i; %20s; %5s;\n",i, cli[i].ape, cli[i].pin);
/*sprintf(lin, "echo %#05i; %20s; %20s; %5s;%3c ;%7.2f >>cli.txt\n",
i, cli[i].ape,cli[i].name,cli[i].pin, cli[i].tipo, cli[i].saldo);
system(lin); */
}
getchar();
}


Hay programas, rutinas o funciones que reciben parametros, o sea cuando son llamadas, se les pasa un
conjunto de datos, que luego serán usados en la ejecucion del programa.

En este caso, haremos un ejecutable, que reciba un parametro, el codigo está diseñado para que verifique si es un numero entero, y lo muestre.
Los parametros pasados desde la llamada del ejecutable, son una matriz de cadenas de texto, la primera es el nombre del ejecutable, la segunda es la que verificamos, si no existe entonces pide que se ingresen mas parametros, si lo que se ingresa no es un entero, sale sin mostrarlo, si se ingresan mas de un parametro dirá que se han ingresado demasiados parametros.

Para comprobar si el codigo funciona y lee los parametros, tenemos que compilarlo y si la compilacion es correcta se crea el ejecutable, luego ese ejecutable se copia a una linea de comandos conocida, y usando la consila dos, (ejecutar ---> cmd) posicionamos el sistema donde está el ejecutable, generalmente se abre en la carpeta de ususario y poniendo cd escritorio pasa a posicionarse en el escritorio.
Luego llamamos el ejecutable y le agregamos el parametro, No lleva barra inversa adelante como algunos comandos msdos, sino que seria, ejecutable parametro.  Recordemos que en este codigo tiene que ser un numero entero.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
/*argv[0] es el nombre del ejecutable, el parametro que sigue el dato*/
{
int i, largo,nro=0;//para recorrer la cadena ingresada

   if (argc==1)
   {
       printf("Debes ingresar mas parametros...\n");
       getchar();
       return 1;  //salida con error 1
   }else if (argc>1 && argc<3)
   {
   for(i=0; i<100; i++)
   {
   if(argv[1][i] == '\0')
   {largo=i; break;}
   }
for(i=0; i<largo; i++) /*control si cada elemento es digito*/
   {
   if(int(argv[1][i]) >47 &&  int(argv[1][i]) <58){}
   else //por la negativa de la condicion
   { printf("No es un numero entero"); getchar(); return(3); }
   }


   printf("Fin del programa %s...\n\n", argv[0]);
   nro=atoi(argv[1]);
   printf("El numero ingresado como par metro es: %i\n\n", nro);
   getchar();

   return 0;  //salida sin errores
   }
   else{
       printf("Debes ingresar menos parametros...\n");
       getchar();
       return 2;//salida con error 2
       }

}

En este caso, aunque no es la unica forma, las salidas del programa son a travez del return, que devuelve a su vez un numero de error,  0 (cero) si el programa termina segun lo previsto, y 1, 2, 3 etc segun el error encontrado.
Tambien se puede usar exit(num error); de la misma manera cuando se trata de solo na funcion como en este caso el main,


Luego analizaremos mas adelante, el pasaje de parametro entre funciones y entre el main y funciones, pero por ahora he desarrollado solo esto

 
 
 
Hoy habia 8 visitantes (11 clics a subpáginas) ¡Aqui en esta página!
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis