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 - do-while

#671
Programación C/C++ / Re: Ayuda ejercicio
17 Julio 2012, 01:48 AM
Se agradecen las gracias.  :xD
#672
Programación C/C++ / Re: Ayuda ejercicio
17 Julio 2012, 01:24 AM
¡Buenas!

La verdad es que intentar leer ese codigo era un horror. Lo he pasado por el taller y ha quedado asi: (Ahora encontraras los errores mas facil. Intenta escribir codigo siguiendo este formato o uno parecido, pero que este ordenado por favor...)

#include <stdio.h>
#include <conio.h>
#include <string.h>

void menu1(int);
void idatos(int);
void menu2(int);
void pto1(int);
void pto2(char*);
void pto3(int);
void pto4(int, int, int);


int main ()
{
   
//Datos registrados
char s1[]="asd";
char s2[]= "asd2";
   
   
   //Verificacion de datos
   char usuario[32];
   char contrasena[32];
   
   //Enteros
   int i,k,j,menu;

   
   //Comienzo para los intentos de contraseña, maximo 3
   for(i=1;i<=3;i++)
   {
printf("\nIngrese usuario: ");
scanf("%s",&usuario);                            
k = strcmp( s1, usuario );

if (k != 0)
{
printf("\nUsuario incorrecto\n");
}

if(k == 0)
{    
printf("\nIngrese contrasena: ");
scanf("%s",&contrasena);
j = strcmp( s2, contrasena);

if (j == 0)
{
printf("\nDatos correctos\n");
printf("\nBienvenido al programa del servicio penintenciario\n");
printf("\n");
printf("\n");
menu1(menu);

//Comienzo de Switch Menu

getch();
}

if(j != 0)
{
printf("\ncontrasena incorrecta\n");
}
}
}
}

void menu1(int a)
{

printf("*********Menu**********\n");
printf("\n1-Cargar datos\n2-Resultado punto A\n3-Resultado punto B\n4-Resultado punto C\n5-Resultado punto D\n6-Salir del sistema\n");
printf("\nPor favor elija una opcion: ");
scanf("%d",&a);

while (a!=1)
{
printf("Elija otra opcion");
scanf("%d",&a);
}    

switch (a)
{
case 1:
printf("Por favor ingrese los datos\n");
int b;
idatos(b);
break;

case 2:
printf("Opcion no disponible sin la carga de datos");
break;

case 3:
printf("Opcion no disponible sin la carga de datos");
break;

case 4:
printf("Opcion no disponible sin la carga de datos");
break;

case 5:
printf("Opcion no disponible sin la carga de datos");
break;

case 6:
getch();
break;
}
}

void idatos()
{
char nombre[32];
int i;
int j;

for(i=1;i<=10;i++)
{
for(j=1;j<=40;j++)
{
int nr,np,nc,ll,cp,c,cont;
nr=np=nc=ll=cp=cont=0;
int Mll[10][40]={0};
int Mct[10][40]={0};
int VP[10]={0};
printf("Ingrese numero de recluso");
scanf("%d",&nr);
printf("Ingrese numero de piso\n");
scanf("%d",&np);
printf("Ingrese numero de celda\n");
scanf("%d",&nc);
printf("Ingrese numero de lugares libres\n");
scanf("%d",&ll);
printf("Ingrese numero de capacidad total\n");
scanf("%d",&cp);

while(nr!=0)
{
printf("Ingrese nombre y apellido: ");
fflush(stdin);
gets(nombre);
int x,f,c;
x=0;
for(f=1;f<=10;f++)
{
for(c=1;c<=40;c++)
{
if(Mll[f][c] > 0 && x==0)
{
x=1;
Mll[f][c]=Mll[f][c]-1;
}
}

if(x==0)
{
cont=cont+1;
}
}
}


pto1(cont);
pto2(nombre);
pto3(Mll[10][40]);
pto4(VP[10], Mll[10][40], Mct[10][40]);
}

void pto1(int cont)
{
printf("%d no pudieron ser alojados por falta de lugar",cont);
}

void pto2(char* nombre)
{
printf("Los rechazados son:\n", nombre);
}

void pto3(int a)
{
int f;

for(f=1;f<=10;f++)
{
int c;
for(c=1;c<=40;c++)
{
if(a[f][c] > 0)
{
printf("Para el piso %d, la celda %d tiene aun disponibilidad",a,c);
}
}
}
}

void pto4(int a, int b, int c)
{
int f;

for(f=1;f<=10;f++)
{
int c;
for(c=1;c<=40;c++)
{
a[f]=a[f]+b[f][c]-c[f][c];
}
}

Max=a[f];
aux=f;

int i;

for(i=1;i<=10;i++)
{
if(a[i] > Max)
{
Max=a[i];
aux=i;
}
}

for(i=aux;i<=aux;i++)
{
if(a[i]==Max)
{
printf("El piso mas lleno es el piso %d",i)
}
}
}
}
}


Ahora te voy contando lo que veo...

||In function 'idatos':|
|114|error: number of arguments doesn't match prototype|
|6|error: prototype declaration|

Hasta aqui te dice que en la funcion idatos, no corresponde el prototipo con la declaracion.

||In function 'pto3':|
|192|error: subscripted value is neither array nor pointer|

Te esta diciendo que estas intentando utilizar como vector (o en este caso matriz) algo que no lo es, es decir estas poniendo subindices a algo que no los puede llevar.

||In function 'pto4':|
|209|error: subscripted value is neither array nor pointer|
|209|error: subscripted value is neither array nor pointer|
|209|error: subscripted value is neither array nor pointer|
|209|error: subscripted value is neither array nor pointer|

Lo mismo que el apartado anterior

|213|error: 'Max' undeclared (first use in this function)|
|213|error: (Each undeclared identifier is reported only once|
|213|error: for each function it appears in.)|

Una variable que esta utilizando sin haberla declarado

|213|error: subscripted value is neither array nor pointer|

Otra vez estas intentando utilizar como matriz o vector algo que no lo es.

|214|error: 'aux' undeclared (first use in this function)|

Otra variable sin declarar

|220|error: subscripted value is neither array nor pointer|
|222|error: subscripted value is neither array nor pointer|
|229|error: subscripted value is neither array nor pointer|

Otra vez lo de los vectores o matrices

|232|error: expected ';' before '}' token|

Y la ultima es que falta un punto y coma por algun lado...

||=== Build finished: 16 errors, 0 warnings ===|
#673
[offtopic] Me acabo de enterar de que son los pochoclos. Me ha gustado la palabrilla y me la apunto. ¿Se utiliza en toda mesoamerica y sudamerica (paises de habla hispana...)?[/offtopic]
#674
Programación C/C++ / Re: Ayuda con cadenas.
17 Julio 2012, 00:31 AM
¡Buenas!

XD, ahora te explico el codigo, que veo que te faltan algunos conocimientos.

1- primera = strtok(cadena," ");

Si lees el enlace a la referencia sobre strtok que te han dejado, veras que esta llamada ignora los primeros caracteres que se encuentran en los delimitadores y empieza a contar el primer token (no se si esta palabra tiene traducciona al castellano...) desde el primer caracter que no este entre los delimitadores hasta el primer caracter que encuentre en los delimitadores. En este punto marca el delimitador encontrado con el caracter '\0', y devuelve un puntero al primer token (las siguientes llamadas funcionan igual, pero con el primer parametro NULL).

Asi si tenemos la cadena {'a','b',' ','c','\0'}, despues de esta llamada cadena quedaria:  {'a','b','\0','c','\0'} y primera seria {'a','b','\0'}

Si no encontrase el delimitadore devolveria NULL, y aqui viene la segunda parte:

2- if(primera): Si hemos encontrado un delimitador, primera apuntara a alguna parte de la memoria, y tendra un valor distinto de NULL (o distinto de cero). Las condiciones logicas en C son valores numericos. Cero o NULL significa falso y distinto de cero verdadero. Por lo tanto estamos diciendo que ejecute el codigo del if si primera es distinto de NULL (cero).

3- En esta parte he tenido un error. Ahora lo corregimos.

resto = &cadena[strlen(primera) + 1]

Tendria que ser:

resto = &cadena[strlen(cadena) + 1];

¿Porque?

Strlen nos devuelve la longitud en caracteres de una cadena. Siguiendo el ejemplo anterior, como hemos cortado el primer delimitador con un caracter nulo, se tendra que strlen(cadena) = strlen({'a','b','\0','c','\0'}) = strlen({'a','b','\0'}) = 2. cadena[2] = '\0', asi que por eso le sumo 1, para pasar al siguiente caracter despues de donde hemos cortado la cadena original.

Y el porque deberia de ser cadena el parametro de strlen y no primero, es por lo que he dicho en el primer punto: Si una cadena contiene al principio caracteres que esten contenidos entre los delimitadores, strtok los ignora y contara el primer token a partir del primer caracter de la cadena que no este contenido entre los delimitadores. Si utilizasemos primera como referencia para "saltar" esos primeros caracteres y la cadena comenzase con delimitadores, estariamos contando menos caracteres de los necesarios, en cambio utilizando cadena como parametro para strlen, nos aseguramos de que esos primeros caracteres que pueden ser delimitadores tambien se esten contando.

entonces en este caso la expresion

resto = &cadena[strlen(cadena) + 1];

seria lo mismo que resto = &cadena[3];

& nos da la direccion en memoria de una variable, por lo que estamos asignando a resto la posicion en memoria de cadena[3], que sera la cadena restante de quitar la primera parte de cadena: {'c','\0'}

Si algo no te ha quedado claro no dudes en preguntar.

¡Saludos!

PD: El else no sobraba, en la cadena que has puesto tu si que hay espacios, pero una cadema cualquiera puede no tenerlos.

Ademas, tendrias que comprobar que, despues de "quitar" la primera palabra de la cadena, el resto no sea el caracter '\0', o una cadena compuesta por espacios en blanco, tabuladores..., ya que tendrias una cadena, en principio, sin ninguna informacion util...
#675
Programación C/C++ / Re: Ayuda con cadenas.
16 Julio 2012, 22:28 PM
¡Buenas!

Asi esta bien, pero puedes hacerlo un poco menos complicado:

char cadena[UNA_CANTIDAD],*primera,*resto;

primera = strtok(cadena," ");

if(primera)
    resto = cadena + strlen(primera) + 1; //pasamos al siguiente caracter despues del primer espacio
else
    //no hay espacios en blanco


O si no estas familiarizado con la aritmetica de punteros, esta otra:

char cadena[UNA_CANTIDAD],*primera,*resto;

primera = strtok(cadena," ");

if(primera)
    resto = &cadena[strlen(primera) + 1]; //pasamos al siguiente caracter despues del primer espacio
else
    //no hay espacios en blanco


¡Saludos!
#676
¡Buenas!

Este año voy a ir al cine el doble que el año pasado: el año pasado, nada, este año, nada de nada...

¡Saludos!
#677
Programación C/C++ / Re: Ayuda con cadenas.
16 Julio 2012, 17:48 PM
Cita de: User en 16 Julio 2012, 17:38 PM
Muchas gracias por la respuesta BlackZeroX , pero creo que no me explique bien, lo que deseo no es un array, si no separar la primera palabra de cada frase de las demas palabras, y almacenar el resultado en 2 variables, espero se me haya entendido y gracias nuevamente :)

"Hola"                 "como estas ?"
  "Yo"                   "muy bien ?"

Algo asi es lo que deseo obtener


Y eso es lo que haces (o puedes hacer) con strtok...

¡Saludos!
#678
¡Buenas!

Solo es por ampliar un poco mas la explicacion que te han dado.

Para introducir parametros en tu programa desde la linea de comandos, tendras que entrar en la consola, o el terminal o como quiera que se llame en tu sistema, y añadirlos despues del nombre de tu programa:

linea de comandos? nombre_de_tu_programa parametro1 parametro2 ... parametroN


En este caso argc valdra N+1 (ahora veras porque), y argv tendra los siguientes valores (seran cadenas de caracteres):

argv[0] = "nombre_de_tu_programa"
argv[1] = "parametro1"
...
argv[N] = "parametroN"

¡Saludos!
#679
¡Buenas!

Otro detalle, para dar el tiempo estas dividiendo dos enteros, asi que estas truncando el valor real. Hazle un cast a float a alguna de las dos variables e imprime el valor como si fuese float, no int.

¡Saludos!
#680
Cita de: NEXUS978 en 15 Julio 2012, 02:57 AM
yo esta noticia en particular la cogeria un poco con pinzas.
Me refiero a que las paginas que niegan el holocausto y de contenido nazi si son un problema ya no solo de antisemitismo sino de convivencia.
Pero CUIDADO que para esta gente una pagina donde se apoye la causa palestina o  se critique lo que el estado de israel esta haciendo con los palestinos en la franja de gaza tambien es considerado antisemitismo, de hecho desde hace tiempo todo lo que sea llevar la contraria a israel y su politica hacia palestina sobre todo en los usa ya es considerado antisemitismo.
de hecho hasta algunos intelectuales judios como noam chomsky han sido tachados de antisemitismo por esta misma razon.
Por lo que la noticia tiene un matiz mas amplio de lo que pueda parecer en un primer momento.

+1