Autor Tema: El for en el programa solo se ejecuta una vez código C (lenguajeC) switch break  (Leído 2895 veces)

Deus Duet

  • Sin experiencia
  • *
  • Mensajes: 4
  • Me gusta conocer... ¡¿Qué va?!
    • Ver Perfil
Hola, disculpen. Necesito hacer un programa en C para que el usuario ingrese una matriz y de ahí poderle aplicar gauss-jordan y sacarle la determinante. El caso es que lo quise hacer lo más general posible, por lo que agarré como modelo a Matlab para la lectura de las entradas (Por ejemplo A=[1 2 3;4 5 6;7 8 9]). Todo parecía ir bien, pero en un momento el programa se queda trabado, es decir ya no corre. Lo revisé barias veces pero no encuentro el error (Lógico supongo). Les dejaré el codigo, espero alguien me pueda ayudar.

*Perdonen ustedes las palabras. jeje

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main()
{
int nr,nc,k,nca,ck,kc;
char e[777];
printf("Hola maldito infeliz, escribe las entradas de la matrix con el formato:\n\na b c;d e f;g h i[...]\nLa matrix aparecera de la siguiente manera:\n\na b c\nd e f\ng h i\n\nPuedes poner las entradas que se te de la puta gana\nIMPORTANTE: Las entradas deben ser valores enteros y NO simbolicos\n");
gets(e);
/*Vamos a sacar el numero de columnas*/
nc=0;
for(k=0;e[k]!=';';k++)
{
if(e[k]!=' ')
{
nc=nc+1;
}
}
printf("\nEl arreglo tiene %d columnas\n", nc);
/*Vamos a sacar el numero de renglones*/
nr=1;
for(k=0;e[k]!='\0';k++)
{
if(e[k]==';')
{
nr=nr+1;
}
}
printf("El arreglo tiene %d renglones\n", nr);
nca=nc*nr;
printf("Numero total de entradas: %d\n\n", nca);
/*(insulto)*/
int decod[nr][nc];
/*Vamos a decodificar la matrz*/
k=0;
for(ck=1;ck<=nr;k++);
{
for(kc=1;kc<=nc;kc++);
{
switch(e[k])
{
case ' ':
kc=kc-1;
break;
case ';':
kc=1;
kc=kc+1;
break;
default:
decod[ck][kc]=e[k];
break;
}
k=k+1;
}
}
printf("%d",decod);
return 0;
}

El código está acomodado de una manera tan burda porque le moví muchas cosas para ver si enconraba entre tanto el error. Además he omitido la parte de la transuesta y gauss-jordan, porque con eso no tengo problema.

Espero que alguien me pueda ayudar, gracias de antemano. :D
« Última modificación: 24 de Noviembre 2015, 08:13 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Creación de una matriz
« Respuesta #1 en: 22 de Noviembre 2015, 00:17 »
Hola he revisado el código y después de un buen rato la recomendación sería que lo vuelvas a construir basándote en otra idea y paso a paso, porque realmente no le encuentro lógica.

Te quieres basar en caracteres, ¿qué ocurre si un número en la matriz tiene dos cifras?

Introduces un break dentro de un switch que a su vez está dentro de un for... esto genera que el bucle for sólo se ejecute una vez...

Tienes esta condición en un bucle for(ck=1;ck<=nr;k++); donde la variable de control luego es manipulada y no es la que se incrementa

Demasiados errores en tan poco código, en casos así mejor replantearlo

Salu2

Deus Duet

  • Sin experiencia
  • *
  • Mensajes: 4
  • Me gusta conocer... ¡¿Qué va?!
    • Ver Perfil
Re:Creación de una matriz
« Respuesta #2 en: 23 de Noviembre 2015, 23:17 »
Hola, encontré un error muy tonto en una variable que hacía todo se asignara mal, pero eso que me dices que hace que mi for solo se reproduzca una vez no lo sabía. Muchas gracias.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".