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

#231
Ivancea96, cuando corro lo que me sugeriste agregar me pasa esto:



compila a la perfección solo que cambie el %i por %li (me daba error).-

Daniel.




MAFUS.
Lo tuyo funciona solo que no se cierra el programa hasta apretar Enter por lo tanto en segundos el tiempo tomado no es tan preciso. -
En cuanto a Windows el que dejo a continuación, funciona (no lo verifique, pero debe ser muy parecido al de ivancea96 ) como lo posteo, pero si lo aplico al programa me hace exactamente lo mismo que al principio. -
desconozco que efecto extraño produce el programa que ordena que si le agrego esas pocas líneas revienta, seguiremos investigando, igual espero que alguien se ilumine y pueda hallar la solución. -

#include <stdio.h>
#include <time.h>

int main( void )
{
long int i=0;
clock_t comienzo;

comienzo=clock();
for( i=0; i<10000; i++ ){
printf("*");
}

printf( "\n Sgundos transcurridos.....: %f s\n", (clock()-comienzo)/(double)CLOCKS_PER_SEC );

return 0;
}


Daniel.
#232
Hola, gente.
Esta vez los molesto por poco, me podrían decir que tengo que agregar a mi código para medir el tiempo que tarda en ejecutarse, busqué en foros y lo que intené no funcionó. -
Es probable que me quieran dar un tirón de orejas por tratar de reinventar la rueda, pero créanme que es tan solo para practicar con punteros y de paso cotejarlo con el método de la burbuja y saber que es más rápido si un doble for o un bucle while. -

#include <stdio.h>

void ordenar(size_t *ptrV, size_t elementos);
void mostrar(size_t *ptrV, size_t elementos);

int main( void ){
size_t vector[] = {99, 8, 13, 6, 104, 40, 7, 2, 1}, *ptrV = vector;
static size_t elementos = sizeof (vector) / sizeof (size_t);

ordenar(ptrV, elementos);
mostrar(ptrV, elementos);

return 0;
}

void ordenar(size_t *ptrV, size_t elementos){
size_t i, tmp = 0;

while(1){
if( *(ptrV+i) >  *(ptrV+(i+1)) ){
tmp = *(ptrV+i);
*(ptrV+i) = *(ptrV+(i+1));
*(ptrV+(i+1)) = tmp;
}
if( i+1 == elementos ){
if( tmp == 0) break;
else{tmp = 0; i = -1;}
}
i++;
}
}

void mostrar(size_t *ptrV, size_t elementos){
size_t i;

for( i = 0; i < elementos; i++ )
printf( " %u", *(ptrV+i) );
}


Desde ya muchas gracias. -

Saludo.
Daniel

#233
Hola, idzen.
Yo estoy estudiando C y me encanta utilizar Notepad++ como ide y MinGW como compilador, ambos son gratuitos, si lo vas a utilizar no te desanimes si no compila en el primer intento tenes que configurar correctamente Variables de entorno en Windows, te puedo ayudar a lograrlo. -

saludos.
Daniel
#234
Hola, MAFUS.
Funciona a la perfección, tome la segunda opción porque todavía tengo que repasar memoria dinámica, dejo el programa funcionando para que si alguien pasa por esto tenga alguna idea.-
No prometo nada, pero si logro mejorarlo lo corrijo. -

#include <stdio.h>
#include <ctype.h>
#include <windows.h>

int ingreso( int monto[] );
void mostrar( int monto[], int contador );


int main( void ){
int monto[3], contador = 0;

contador = ingreso( monto );
mostrar( monto, contador );

return 0;
}

int ingreso( int monto[] ){
int ch, ok, contador ;

do{
system("cls||clear");
ok = 1; contador = 0;
printf("\n\n Ingrese monto del cheque (superior a \"0\" e inferior a \"1000\")....:" );
while(( ch = getchar()) != '\n'){
if( isdigit(ch) ){
if( contador < 3 ){
monto[contador] = ch - '0';
contador++;
}
else{
ok = 0;
}
}
else{
ok = 0;
}
}
if( ok == 0 || monto[0] == '0'){
printf( "\n Ingreso incorrecto...\n\n\tPulse <Enter> para intentarlo nuevamente..." );
getchar(); 
ok = 0;
}
}while(!ok);

return contador;
}

void mostrar( int monto[], int contador ){
char  *unidades[] = { "", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez" },
      *decenas[]  = { "veinte", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa" },
  *centenas[] = { "", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos",
"Seiscientos", "Setecientos", "Ochocientos", "Novecientos" },
  *especiales[] = { "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciseis", "Diecisiete",
  "Dieciocho", "Diecinueve", "Veinti" };
int tmp = monto[0]-2;
char m = toupper(decenas[tmp][0]);

if( contador == 1 ){
tmp = monto[0];
m = toupper(unidades[tmp][0]);
printf( "\n %c%s", m, &unidades[tmp][1] );
}

if( contador == 2 ){
if( monto[0] == 1)
printf( "\n %s ", especiales[monto[1]] );
else if( monto[1] == 0 ){
printf("\n %c%s", m, &decenas[tmp][1] );
}
else if( monto[0] == 2 && monto[1] > 0 )
printf( "\n %s%s", especiales[10], unidades[monto[1]] );
else{
printf("\n %c%s y %s", m, &decenas[tmp][1], unidades[monto[1]]);
}
}

if( contador == 3 ){
if( monto[0] == 1 && monto[1] == 0 && monto[2] == 0)
printf( "\n %s ", "Cien" );
else
printf( "\n %s ", centenas[monto[0]] );

if( monto[1] == 0 )
printf( "%s", unidades[monto[2]] );
else if( monto[1] == 1 ){
tmp = monto[2];
m = tolower(especiales[tmp][0]);
printf( "%c%s", m, &especiales[tmp][1] );
}
else if( monto[2] == 0)
printf( "%s", decenas[monto[1]-2] );
else if( monto[1] == 2 )
printf( "%s%s", "veinti", unidades[monto[2]] );
else
printf( "%s y %s", decenas[monto[1]-2], unidades[monto[2]] );
}
}


Saludos.
Daniel
#235
Hola.
Nada de eso, es lo que muestra la captura.



Gracias.
Daniel


Perdón por leer apurado, por Ej. 35 todo número que tenga 2 cifras, para escribir Treinta y cinco, debo pasar treinta a Treinta. - 
#236
Hola, gente.
Tengo un error que por más que investigo no logro solucionar, hice un montón de pruebas como con la función printf para saber si accedía a la posición de memoria correcta y realmente en todos los casos imprimía la fila correcta y el contenido de la primer columna, pero siempre al acceder a esta parte del programa el mismo se cierra. -
Un favorcito más, si alguien conoce otra manera para lograr lo mismo le agradecería me dé alguna pista. - 


lineas 67 y 73
#include <stdio.h>
#include <ctype.h>
#include <windows.h>

int ingreso( int monto[] );
void mostrar( int monto[], int contador );


int main( void ){
int monto[3], contador = 0;

contador = ingreso( monto );
mostrar( monto, contador );

return 0;
}

int ingreso( int monto[] ){
int ch, ok, contador ;

do{
system("cls||clear");
ok = 1; contador = 0;
printf("\n\n Ingrese monto del cheque (superior a \"0\" e inferior a \"1000\")....:" );
while(( ch = getchar()) != '\n'){
if( isdigit(ch) ){
if( contador < 3 ){
monto[contador] = ch - '0';
contador++;
}
else{
ok = 0;
}
}
else{
ok = 0;
}
}
if( ok == 0 || monto[0] == '0'){
printf( "\n Ingreso incorrecto...\n\n\tPulse <Enter> para intentarlo nuevamente..." );
getchar(); 
ok = 0;
}
}while(!ok);

return contador;
}

void mostrar( int monto[], int contador ){
char  *unidades[] = { "", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez" },
      *decenas[]  = { "veinte", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa" },
  *centenas[] = { "", "Cien", "Doscientos", "Trescientos", "Cuatrociento", "Quinientos",
"Seiscientos", "Setecientos", "Ochocientos", "Novecientos" },
  *especiales[] = { "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciseis", "Diecisiete",
  "Dieciocho", "Diecinueve", "Veinti" };
int tmp;
 
if( contador == 1 ){
printf( "\n %s", unidades[monto[0]] );
}

if( contador == 2 ){
tmp = monto[0]-2;
if( monto[0] == 1)
printf( "\n %s ", especiales[monto[1]] );
else if( monto[1] == 0 ){
decenas[tmp][0] = toupper(decenas[tmp][0]); 
printf( "\n %s", decenas[monto[0]-2] );
}
else if( monto[0] == 2 && monto[1] > 0 )
printf( "\n %s%s", especiales[10], unidades[monto[1]] );
else{
decenas[tmp][0] = toupper(decenas[tmp][0]); 
printf( "\n %s y %s", decenas[monto[0]-2], unidades[monto[1]] );
}
}

if( contador == 3 ){
printf( "\n %s ", centenas[monto[0]] );
if( monto[1] == 0 )
printf( "%s", unidades[monto[2]] );
else if( monto[1] == 1 )
printf( "%s", especiales[monto[2]] );
else
printf( "%s y %s", decenas[monto[1]-2], unidades[monto[2]] );
}
}


/*
Ejercicio 6-1. Escriba un programa que solicite un número entero positivo menor que 1000
y a continuación, cree y genere un valor de tipo string que es el valor del entero en palabras.
Por ejemplo, si 941 es introducido, el programa creará la cadena "Novecientos cuarenta y uno".
*/


Saludos.
Daniel
#237
Hola, MAFUS.
ahora sí que queda todo clarísimo ;-) ;-) ;-), gracias por el tiempo que le dedicaste y te debo una cerveza con maníes. -

Saludos.
Daniel


#238
Hola, MAFUS.
Ahora si me que más claro, por lo menos la primer pregunta, en cuanto a la segunda no logro interpretarte demasiado, no obstante, hice mis propias pruebas y en la práctica pasa lo siguiente:
si por Ej. la cadena soporta 10 caracteres, si ingreso 9 o menos se ejecuta la línea que está a continuación del if, en cambio si ingreso 10 o más caracteres se ejecutan las líneas que estan a continuación del else, o sea en la práctica todo funciona correctamente, en la teoria no me queda claro lo siguiente:
De las dos formas (ingrece menos de 10 o ingrece mas de 9 ) el caracter \n va a estar siempre y como está escrito el programa nunca deberia ejecutarse la sentencia else.-
espero encontrar la explicación a esto.- 

Saludos.
Daniel
#239
Hola.

fgets( word[i], MAX_COL , stdin );

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



En este trozo de código está mi gran duda, según lo que tengo leído es que si ingreso menos caracteres que  MAX_COL fgets los guarda desde el buffer de teclado en la variable indicada, en este caso word y también el carácter de nueva línea (\n) que se produce al apretar < Enter >, la primera duda, ¿es estrictamente necesario remplazar el carácter \n por \0? -
En el caso de ingresar más caracteres del establecido por MAX_COL fgets lee  MAX_COL – 1 y en la última casilla de memoria asignada a MAX_COL copia el carácter \n, de ser esto cierto la otra duda es:  ¿la sentencia else no se ejecuta nunca en este caso, o estoy equivocado?

Es todo y desde ya muchas gracias por el tiempo que le dediquen al tema,-

Saludos.
Daniel

#240
Hola.
Muchas gracias por ocuparte, tienes toda la razón debo tener problemas con la tarjeta gráfica, lo que ocurre es que me pidieron mas por ella que lo que sale la maquina completa,
AMD phenom II x 2 560 procesador, 2.0 GB RAM, NVIDIA GeForce 7025/NVIDIA nForce 630a crei ilusamente que si ponia otro sistema operativo más antiguo podria solucionarlo.-
Bueno, vere si la descarto o sigo renegando.-

Saludos.
Daniel