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

#331
Hola a todos y que tengan un muy buen día.-
Por el enunciado se darán cuenta de lo que deseo hacer, si me dejan ser prejuicio muchos dirán que ganas de complicarse por algo que el compilador de C lo efectúa perfectamente, si bien esto es cierto tengo mucha fe que este hilo me proporcionara mucho conocimiento (intuición, corazonada).-
Lo primero que deseo hacer es poner en una variable int (9 - 2) y borrarlo de la variable cadena, si bien logro extraer la cadena con un inicio correcto pero no logro el corte en el último paréntesis.-
Por último ¿lo harian de otra manera?.-     

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

int main(){
char cadena[100] = "3 * 5 + (9 - 2) + 5", *enc = NULL;

enc = strchr(cadena, '(');

printf("\n %s", enc);

printf("\n\n");
return 0;
}


Saludos y desde ya muchas gracias.
Daniel
#332
Hola.
Muchas gracias a los 4 me han sido de gran ayuda.

Saludos.
Daniel
#333
Hola a todos y que tengan un muy buen día.-
En este caso estoy estudiando operadores, Prioridad y asociatividad y realmente estoy trabado, en el programa, la segunda sentencia logro establecer qué el resultado sea 119 (creo estar en lo correcto).-

#include <stdio.h>

int main(){
int a = 3 + 4 *(8 * (4 - ( 9 + 3) /6)); //67
int b = 4 * 3 * 5 + 8 * 4 * 2 - 5; //119

printf("\n El resultado de 3 + 4 *(8 * (4 - ( 9 + 3) /6)) es...: %d", a);
printf("\n\n El resultado de 4 * 3 * 5 + 8 * 4 * 2 - 5 es........: %d", b);

printf("\n\n");
return 0;
}


Citar
  4 * 3 * 5 + 8 * 4 * 2 - 5

4 * 3 = 12
12 * 5 = 60

8 * 4 = 32
32 * 2 = 64

64 + 60 = 124

124 – 5 = 119


Pero la primera ni hay logro plasmar los pasos, bueno espero como siempre que me ayuden a descifrar el enigma que me tiene bastante ocupado.-
Por otro lado, quisiera saber si les parece muy difícil hacer un programa para emular el compilador, o sea, mostrar paso a paso la fórmula para llegar al resultado final, alguien lo hizo alguna vez.-   
   
Saludos.
Daniel
#334
Hola a todos.

Citarfgets - Leerá hasta n-1 caracteres o hasta que lea un retorno de línea (\n).
En este último caso , el carácter de retorno de línea también es leído.-

unsigned int descartar=0, numeroFinal=0, i=0, ok=0, longitud=11;
char digitos[12] = {'\0'}, cualDescartar[3] = {'\0'};



fgets(digitos, longitud, stdin);

Para dejarlo en mi caso del todo claro, ¿esta es la manera correcta de declarar el array y fgets(longitud) para capturar un máximo de 10 dígitos?         

Saludos.
Daniel
#335
Hola Ivancea99.-
Bueno no tengo nada para agregar es tal cual como dice leo, me pasa exactamente lo mismo.
CitarEDITO: Sin intercambiar los char, sólo con declarar cualDescartar con dimensión mayor de 2 funciona
Me gustó, funciona correctamente de esta manera, espero que a alguien más le pase lo mismo para que entre todos encontremos la explicación.-
         
Saludos.
Daniel
#336
Hola leo.-
Dios mío vaya alegrón al ser vos uno de los que me ayuda, en cuanto al caso en si no puedo creer que esto pase,  no parece tener ninguna lógica.-
         
Saludos.
Daniel
#337
Hola a todos y que tengan un muy buen día.-
Muchas gracias eferion por la orientación, ahora el caso es que funciona pero me queda una duda que me ha hecho practicar todo un día y tuve que hacer algo muy rebuscado porque de lo contrario me desaparecía el contenido de la variable digitos, si lo desean pueden correrlo sin la variable _digitos y con ella para ver lo que pasa, por favor si alguien encuentra el porqué le agradecería me lo diga para no dar esto por terminado y desconocer el error.-
     
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>

int verifica(char ingreso[], int ok, int longitud, int maxDescartar);

int main(){
unsigned int descartar=0, numeroFinal=0, i=0, ok=0, longitud=11;
char digitos[12] = {'\0'}, _digitos[12] = {'\0'}, cualDescartar[2] = {'\0'};

printf("\n ---------- Programa que descompone un numero entero sin signo ----------");

do{
ok=0;
printf("\n\n Ingrece un numero entero sin signo [minimo 100 maximo %u].........: ", UINT_MAX);
fgets(digitos, longitud, stdin);
ok = verifica(digitos, ok, longitud, i);
}while(ok);

printf("\n\n");

for(; digitos[i] != NULL; i++){
printf(" [%d] = %c \n", i, digitos[i]);
}

do{
longitud=2;
ok=0;
printf("\n\n Indique con un entero sin signo del [0] al [%d] que numero desea descartar..: ", i-1);
fgets(cualDescartar, longitud, stdin);
ok = verifica(cualDescartar, ok, longitud, i);
}while(ok);

descartar = atoi(cualDescartar);

for(i=descartar; digitos[i] != NULL; i++){
digitos[i] = digitos[i+1];
}
numeroFinal = atoi(digitos);
printf("\n\n El numero final es = %d", numeroFinal);

printf("\n\n");
return 0;
}


int verifica(char ingreso[], int ok, int longitud, int maxDescartar){
long long temp=0, auxiliar=0;
int ch=0, i=0, ingresoInt=0;
char *p=NULL;

if((p=strchr(ingreso, '\n'))){
*p='\0';
}
else{
ingreso[longitud] = '\0';
while((ch = getchar()) !='\n' && ch!=EOF);
}

for(; ingreso[i] != NULL; i++){
if(ingreso[i] <= 47 || ingreso[i] >= 58){
ok=1;
return ok;
}
}

if(longitud == 11){
for(i=0; ingreso[i] != NULL; i++){
auxiliar = ingreso[i] - 48;
temp=10*temp+auxiliar;
}

if(temp <= 99 || temp > UINT_MAX){
ok=1;
return ok;
}
}
else{
ingresoInt = atoi(ingreso);
if(ingresoInt > maxDescartar){
ok=1;
return ok;
}
}

return ok;
}
   

Saludos.
Daniel
#338
Hola a todos y que tengan un muy buen dia.

Lenguaje......................: "C"
Sistema operativo......: Windows XP
Compilador..................: MinGW
Problema.....................: No puedo concluir el programa porque no logro mover
                                asía la izquierda los dígitos restantes e insertar el '\0'.-                                                   
Error..............................: Ninguno.
Otras Observaciones: Para todo aquellos que tengan mucho tiempo, me
                                podrían indicar que debo cambiar para obtimizarlo .     
Código..........................:

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

int verifica(char ingreso[], int ok, int longitud, int maxDescartar);

int main(){
unsigned int descartar=0, numeroFinal=0, i=0, ok=0, longitud=11;
char digitos[12] = {'\0'}, cualDescartar[2] = {'\0'};
printf("\n ---------- Programa que descompone un numero entero sin signo ----------");
do{
ok=0;
printf("\n\n Ingrece un numero entero sin signo [minimo 100 maximo %u].........: ", UINT_MAX);
fgets(digitos, longitud, stdin);
ok = verifica(digitos, ok, longitud, i);
}while(ok);

printf("\n\n");
for(; digitos[i] != NULL; i++){
printf(" [%d] = %c \n", i, digitos[i]);
}

do{
longitud=2;
ok=0;
printf("\n\n Indique con un entero sin signo del [0] al [%d] que numero desea descartar..: ", i-1);
fgets(cualDescartar, longitud, stdin);
ok = verifica(cualDescartar, ok, longitud, i);
}while(ok);

descartar = atoi(cualDescartar);
//En este lugar va lo que me falta...

printf("\n\n");
return 0;
}


int verifica(char ingreso[], int ok, int longitud, int maxDescartar){
long long temp=0, auxiliar=0;
int ch=0, i=0, ingresoInt=0;
char *p=NULL;

if((p=strchr(ingreso, '\n'))){
*p='\0';
}
else{
ingreso[longitud] = '\0';
while((ch = getchar()) !='\n' && ch!=EOF);
}

for(; ingreso[i] != NULL; i++){
if(ingreso[i] <= 47 || ingreso[i] >= 58){
ok=1;
return ok;
}
}

if(longitud == 11){
for(i=0; ingreso[i] != NULL; i++){
auxiliar = ingreso[i] - 48;
temp=10*temp+auxiliar;
}

if(temp <= 99 || temp > UINT_MAX){
ok=1;
return ok;
}
}
else{
ingresoInt = atoi(ingreso);
if(ingresoInt > maxDescartar){
ok=1;
return ok;
}
}
return ok;
}

/*
sprintf(digitos, "%d", 56789);
*/


Saludos y muchas pero muchas gracias por el tiempo dedicado a este tema.-
Daniel
#339
Hola a todos.
CitarSe que dijiste que ibas a investigar todo esto, y deseo que lo hagas pero no me costaba nada dedicar 5 minutos a aclarar unas cosas que te hubieran demandado quiźa 2 horas (y así usas esas 2 horas en investigar otros temas  ;D
No te das una idea lo que se estima estas frases cuando uno tiene 62 años y a nadie al alcance para pedir ayuda, lo digo más que nada por la seguridad que brinda el hecho de saber que podes levantar el tubo y tener la respuesta a tú duda o mandar un mail y del otro lado contar con un amigo que tiene todas las respuestas a tus inquietudes, bueno por algo será, por lo menos cuento con Uds.-
Gracias eferion y a vos rir3760 por la participación, en cuanto a este tema para mí lo podemos dar por solucionado.-

Saludos.
Daniel

#340
Hola a todos.
Como siempre en este foro la ayuda es muy abundante y esmerada, con los últimos 2 post me queda bien claro como imprimir un número en binario, que es en definitiva lo que quería aprender.-
En definitiva voy a tratar de interpretar el código de rir3760, voy a correrlo, pero de principio no entiendo que valores arrojan size_t i y size_t j  y para que el doble for, ya me pongo a buscar información.-

Saludos.
Daniel