Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - SoyelRobert

#31
Cita de: amchacon en 27 Diciembre 2013, 14:41 PM
Cierto.

Quizás sería mejor hacer solo la triangulación y resolverla recursivamente. Si te encuentras con alguna paridad (0x = 4) entonces ya paras.

pero las matrices no tienen porque representar un sistema de ecuaciones a menos que se indique lo contrario, ademas si se llegase a esa prioridad ( 0x = 4) seria conveniente seguir aplicando el algoritmo para obtener unas ecuaciones parametricas facilmente.

Se podria hacer con una funcion recursiva hasta que unicamente queden unos y por arriba y por debajo de estos, ceros...

que al acabar te da la identidad? pues ok, que no? se concluye que el determinante de la matriz debia ser cero o no cuadrada, etc

salu2!
#32
Cita de: jesus++ en 25 Diciembre 2013, 18:12 PM
un problema q me dejaron, pense hacerlo de esta manera:
primero escalonar la matriz inferior y superiormente, luego pasarla a la matriz identidad y tomar una matriz q empiece en la identidad y realizar las mismas operaciones q a la matriz q ingrese por teclado... el problema esta en escalonarlo, si bien lo he probado manualmente, la computadora solo atina a escalonar, pero los terminos centrales no cambian de valor... el primer paso (y en el q busco ayuda seria escalonar la matriz superiormente) el resto ya lo tengo pensado


Mmm a ver, esto solo a nivel de matematicas y concepto:

Para escalonar una matriz has de seguir el algoritmo de gauss, ahora bien si lo que quieres es obtener la matriz identidad entonces has de usar el algoritmo de gauss yordan sin embargo ten en cuenta que no te vale cualquier matriz, hay matrices que al utilizar gauss yordan no te van a dar la identidad, te dara una escalonada reducida si pero no la identidad
#33
perdon por el reflote pero no soy capaz de sacar las quinielas simples a partir de la multiple... llevo desde el último mensaje intentandolo y no hay manera

Reto a ver si alguien es capaz de sacarlo y me ilumina porque esto ya me supera

salu2  :( :(
#34
Cita de: leosansan en 14 Diciembre 2013, 14:28 PM
*Como sólo vas a usar una sola matriz, no le veo mucho sentido el uso de typedef, sencillamente la declaro en main.

*La función main, por cuestiones del Standard, debe ser entera, con el consiguiente return al final de la misma.

*Creo que mejor definir las variables "alumno" y "asignatura" como iguales a uno, así no hay que  estar sumando +1 en cada bucle.

*Como picardía puedo aprovechar el postincremento y ahorrarme alumno ++ y asignatura ++, pero es cuestión de gustos y claridad.

*En el primer for i va hasta <10, en lugar de <9.

**Y especialmente es bueno "indentar" el código:


Si jaja la verdad es que el typedef lo he puesto casi que por costumbre en este caso efectivamente es tonteria

Pero lo de que Main debe ser entera? Si no se esta usando el retorno del main para nada, si se declara como void no habria problema... hasta donde yo tengo entendido...

Y respecto al fflush tampoco tiene mucha utilidad en este pequeño programa no?

salu2!
#35
Mmm a ver:

las variables i, j solo las usas para los fors por lo que no tiene utilidad declararlas como variables globales... Lo mismo para suma y promedio.

Luego, tu printf está dentro del segundo for eso implica que se repetirá en todas las compenetes de la matriz.

En C los arrays empiezan en la componente 0 (si es bidimensional, entonces 0,0)


mira:


#include <stdio.h>

typedef float mat [10][5];

void main()
{
int i, j;
int asignatura = 0;
int alumno = 0;
mat A;
float nota, promedio;
float suma = 0;
puts("NOTAS:\n");
for(i=0; i<9; i++){
    printf("Alumno %d\n", alumno+1);
    alumno ++;
for(j=0;j<5; j++){
    printf("asignatura %d: ", asignatura+1);
    scanf("%f", &A[i][j]);
    asignatura ++;
}
asignatura = asignatura -5;
}
asignatura = 0;

}


Eso seria un ejemplo de como cargar la matriz.

Ahora solo te queda calcular el promedio a ti  ;)
#36
Cita de: leosansan en  8 Diciembre 2013, 21:41 PM
Porque se quedaría en el buffer el \n del scanf y al introducir un valor, en lugar de tomar ese valor, primero toma lo que queda en el buffer - que era \n- por eso se salta el primer valor de la matriz. ¿Y que sucede con el valor que hubieras introducido?. Que estaría en el buffer pero ¡¡¡voilá ¡¡¡¡ con el segundo while se limpia antes de introducir el valor del segundo elemento de la matriz, y así sucesivamente.


Saluditos! ..... !!!!       

mm asi que los whiles digamos que "limpian" el buffer para que los scanf cojan el valor que deben tomar y no uno residual de un scanf anterior... lo cierto es que no tenía ni idea, digamos que ya se lo que hace pero no entiendo como la hace   :-[


scanf("%d", &N);
while ((ch = getchar()) != '\n');


veamos:

La scanf está tomando un valor y lo guarda en N, al darle al salto de linea -\n- la scanf también lee el -\n- pero no lo almacena en N (no se por que motivo) sino que se queda en el buffer y luego en el while la variable ch está recogiendo del teclado cualquier caracter excepto -\n-, por lo que el \n seguiria estando en el buffer incluso despues del while...

gracias por vuestro tiempo
#37
mm y por qué si quitas el primer while, no el que esta dentro del for sino el que esta al principio de todo, la primera componente de la matriz no la hace?

me cuesta bastante ver como esta funcionando el while la verdad jaja
#38
Cita de: leosansan en  8 Diciembre 2013, 16:49 PM
Concretando un poco más, el while es un bucle que se "come" lo que queda en el buffer.

Pruébalo quitandolo y verás lo que sucede, se podría  saltar algunos scanf.

Saluditos! ....


vale, hay algo que se me sigue escapando en esta parte del codigo:


for(j=0;j<3;j++){
        printf("\n A[%d][%d]: ",i+1,j+1);
        scanf("%c", &A[i][j]);
        while ((ch = getchar()) != EOF && ch != '\n');


vamos a ver:

En primer lugar ese "EOF" de poco sirve no? quiero decir, si la condición fuese únicamente que ch sea distinto del salto de línea sería suficiente no?.

Y que es lo que está pasando en ese for exactamente?

entiendo que:

desde j = 0 hasta j = 2 hace una printf y un scanf y luego el while...

entonces entiendo que siempre que de un salto de linea tanto el scanf como el while lo "notan", es decir, se guarda un salto de linea en la componente de la matriz que toque en ese momento y luego en el while ve que no se cumple la condicion, la variable ch no almacena nada y termina esa vuelta en el for. correcto?

por ejemplo:


partido 1:

A[1][1]: (y aqui doy un "enter", un salto de linea


en la componente A[0][0] de la matriz quedaría guardado un '\n'  y luego como no se cumple la condición la variable ch no almacena el salto de linea y sale del for...

entonces, si el contenido de ch no se tienen en cuenta para nada, como es posible que eso solucione el problema de poder "dejar en blanco" alguna componente de la matriz?

espero haberme explicado....
#39
sisi, me he comido el "ch" sin querer jaja   :rolleyes:
#40
mm todo claro!

Era simplemente que habeis usado una sintaxis un poco diferente a la que estoy usando yo, por ejemplo:


while ((ch = getchar()) != EOF && ch != '\n');

este código yo lo escribiría así:

while(ch != EOF && != '\n') ch = getchar();

supongo que son equivalentes, del mismo modo que tambíen lo sería:


do{
ch = getchar;
}while(ch != EOF && != '\n');


corregidme si me equivoco jeje

Por el resto todo entendido, muchisimas gracias! voy a ponerme ahora a intentar hacer una función que saque las quinielas simples equivalentes... cuando lo tenga lo subiré por aquí por si a alguien le pudiese interesar (si lo consigo, que no creo... ya que esto es digamos "la dificultad" del ejercicio.)

habeis sido de gran ayuda!