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 - MAFUS

#1211
Mira si el número de asteriscos en 4. Si es así para el bucle. Puedes ponerlo en la condición del while: intentos<100 && asteriscos!=4
#1212
Estoy oxidado en matemáticas.

Tengo los siguientes resultados:
d(20º) = 1837.556662
d(40º) = 4492.157928
d(60º) = 5087.585718
d(80º) = 2250.260680

¿Tienes los resultados de la ecuación para compararlos?
#1213
Bueno, vamos con unos pocos fallos, los más fáciles:

Controla las asignaciones porqué lo que haces es mirar igualdad:
donde escribes j==4 e intentos==100
debe haber j=4 e intentos=100

Tienes un fallo en scanf: el nombre de un array ya es un puntero.
donde escribes scanf("%s", &resp)
debes haber scanf("%s", resp)

Para contar el número de asteriscos, barras verticales y barras bajas en cada iteración estos deben empezar a contar a partir de 0. Así después de do{ debe haber
asteriscos=0, barras=0, bajas=0;

Para el problema de lógica: sea cual sea lo que ha ocurrido acabas haciendo que j=4 y por tanto se detiene ese bucle y por tanto siempre comparas cad==resp[0]. Hay que reescribir eso totalmente.
#1214
Las pautas que te dan te solucionan casi todo el problema.
Empieza por crear la estructura de los números complejos.
#1215
Empecemos por el principio.
cad es el array que guarda la cadena en bruto. Se puede considerar cad como un puntero al primer elemento de dicho array.
pos es un puntero que recorre todo el array en bruto. De él se toman los caracteres para decidir que hacer con ellos.
des es un puntero que va a ser usado para formar el array nuevo. Solo se actualiza su posición cuando se ha soltado un carácter válido.

Para empezar hacemos que pos y des apunten al principio de cad.

Una bandera, espacio_escrito, sirve para saber si hemos escrito un carácter espacio y para marcar que no se escriban más en caso de que hubieren varios seguidos en la cadena en bruto.

Tip: en C, y para operaciones lógicas, todo valor 0 es falso y todo valor diferente de 0 es cierto.

Sí !espacio_escrito es igual a espacio_escrito==0.

Dentro del if que mira si estamos ante un espacio en blanco (un espacio o una tabulación) debemos mirar que no estemos al principio de la cadena nueva: no nos interesa poner espacios al principio de ella. Y esto es lo que hace des != cad: mira las direcciones a las que apuntan los dos punteros. Si son iguales no debemos escribir ningún espacio y por lo tanto saltamos todo el código de ese if.
De igual forma, si ya no estamos al principio de esa cadena, debemos mirar si con anterioridad hemos escrito un espacio o no, y eso es lo que hacemos mediante la bandera espacio_escrito. Si no se ha escrito un espacio debemos escribir uno y eso es lo que hace el código, además activamos la bandera a 1; así en los posteriores caracteres, si son blancos ya no escribiremos nada en la nueva cadena. Fíjate que, más adelante, nos encontramos un carácter no espacio en blanco, ponemos la bandera a 0.
Como consideramos espacios en blanco espacios y tabulaciones, y no nos interesa que en la cadena nueva haya tabulaciones, no podemos hacer *des = *pos porque *pos podría contener una tabulación. Para evitar esto y hacer que se escriba un espacio hacemos que *des = ' ', es decir escribamos un espacio en el caracter *des.
#1216
Tal y como está planteado el código pon un campo más en el struct paciente que indique si está ingresado en el hospital o no. Para darlo de alta o ingresarlo modifica ese dato. La consulta de pacientes de un médico también debe usarlo.
#1217
Es un ejemplo para que veas que hasta en la librería estándar usan el mismo código que tu, y que tanto odia tu manual. En serio, tíralo.
#1218
En verdad no sé que manual estás siguiendo pero tíralo.
El programa está bien y, por ejemplo, así funciona la función de libreria fopen.


FILE *f = fopen(ruta, modo);


Date cuenta que tu función retorna la dirección de inicio del bloque que has adquirido de memoria. Lo único que tienes que hacer es no perderlo en ningún momento para pasárselo a free.
#1219
Mira si las fórmulas son correctas. Obtengo valores extraños y, al menos la fórmula de la ecuación de 2º grado que has dado en el enunciado está mal.
#1220
Algo así:

#include <stdio.h>

int tolower(int __c) {
   if(__c >= 'A' && __c <= 'Z')
       __c ^= 32;
   return __c;
}

int toupper(int __c) {
   if(__c >= 'a' && __c <= 'z')
       __c ^= 32;
   return __c;
}

int isblank(int __c) {
   return __c == ' ' || __c == '\t';
}

int main() {
   char cad[50];
   char *pos=cad;
   char *des=cad;
   int espacio_escrito = 0;
   
   printf("Ingrese la cadena: ");
   fgets(cad, sizeof(cad), stdin);
   puts(cad);
   
   while(*pos) {
       if(isblank(*pos)) { /* Trato de todo tipo de espacios en blanco */
           if(!espacio_escrito  && des != cad) { /* No se ha escrito el espacio en la cadena final Y no estamos en el primer carácter de la cadena final */
               *des = ' ';
               des++;
               espacio_escrito = 1;
           }
       }        
       else {
           *des = tolower(*pos); /* Todo en minúscula */
           des++;
           espacio_escrito = 0;
       }
       
       pos++;
   }
   
   *des='\0';
   cad[0] = toupper(cad[0]); /* Primera letra en mayúscula */
   
   puts(cad);
   return 0;
}