Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Pino1952

Páginas: [1] 2
1
Hola a todos.
Citar
¿Y por qué no puedes colgarlo?
A mí me enseñaron que en la vida hay palabras muy importante y una de ellas se llama ética, en realidad si el código lo hubiese elaborado yo con teorías y pequeños trozos del moderador de turno, seria medianamente coherente pasarlo tal cual a otro foro, pero en este caso me lo postearon completo.-
Mastermind, debo suponer que no te agrado demasiado el desarrollo de este post, en todos los casos (estuve leyendo unos cuantos) saludas al comienzo y al despedirte y no es este el caso, por lo tanto debo suponer que en tu mente estoy causando una especie de antipatía y he decidido no efectuar más post en este foro, espero de corazón a ambos que les valla muy pero muy bien con el foro y en general en la vida.-
Agradezco el tiempo que han dedicado a mis temas y un gran abrazo a Príncipe_Azul que seguramente nos seguiremos comunicándonos vía MP.-         

Saludos.
Daniel

2
Hola Alex Rodriguez.
Muchas gracias por ocuparte, una verdadera lástima por no interpretar completo mi pedido, además de saber la cantidad de punteros en el array de punteros solicitaba que me enseñaran a hacerlo con funciones y no todo dentro de la función principal, digo una lástima porque todo aquel que llegue con la esperanza de aprender como yo a pasar un array de puntero a función en este post, se va a encontrar que no está contemplado en tu código, en mi caso ya lo aprendí pero no puedo colgarlo porque me lo enseñaron en otro foro.-

Saludos.
Daniel

3
Hola a todos.
El programa que dejo a continuación funciona correctamente, lo que no logro hacer son 2 cosas que desearía me enseñen a concretarlas.-
Quiero en primer lugar eliminar esta línea.

Código: [Seleccionar]
#define ELEMENTOS 15
Como debo hacer con sizeof para saber cuántos punteros tengo declarado en el array de punteros provincias, me funciona con char, int, pero no con array de punteros.-
Lo otro que no puedo lograr es pasar el array provincias a una función, para que se entienda quiero hacer lo mismo pero con 2 funciones, una que se llame mostrar y la otra ordenar, en este caso me interesaría más que me escriban un poco de teoría que la sintaxis (si es mucho pedir, mil disculpas).-

Código: [Seleccionar]
#include <stdio.h>
#include <string.h>

#define ELEMENTOS 15

int main(void){
char *provincias[ELEMENTOS] = {"Tucuman", "Santa Fe", "Buenos Aires", "Rio Negro", "Neuquen",
"Misiones", "Catamarca", "Santa Cruz", "Jujuy", "Chaco",
"Formosa", "Corrientes", "Salta", "La Rioja", "Cordoba"};
char *temp;
int i, j;

printf("\n provincias Argentinas desordenadas\n\n" );
for(i=0; i<ELEMENTOS; i++){
printf(" %s\n", provincias[i]);
}

for(i=0; i<ELEMENTOS-1; i++){
for(j=i+1; j<ELEMENTOS; j++){
if(strcmp(provincias[i], provincias[j]) > 0){
temp = provincias[i];
provincias[i] = provincias[j];
provincias[j] = temp;
}
}
}

printf("\n Ordenadas alfabeticamente\n\n" );
for(i=0; i<ELEMENTOS; i++){
printf(" %s\n", provincias[i]);
}

printf("\n Pulse [Enter] para finalizar..."); getchar();
return 0;
}

//http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/lengua_C/cadenas.htm#strcmp

Saludos.
Daniel
 

4
Hola.
Muchas gracias a ambos dos por ocuparse del tema.-
Bueno a continuación dejo el código que como verán está basado en array de puntero a función, funciona óptima mente y es lo que pretendía lograr, si bien ya pase por puntero a función no lograba implementarlo y lo puse de esa manera (mi primer post de este tema) porque no sabía cómo mostrarlo con puntero a función, la idea rondaba mi subconsciente pero no lograba plasmarlo.-
Mastermind, entiendo perfectamente a que te refieres, pero los de capricornios somos así de obstinados y cuando una idea ronda nuestro bocho no respetamos demasiado las lógicas y además viene al caso aclarar que soy un apasionado del código conciso (utilizar la menor cantidad de líneas posibles), si bien no hace al código muy legible para otros es mi pasión y gracias a esta técnica aprendí muchas cosas (en los foros y buscando en la web) que de otra manera me hubiesen resultado esquivas.-
Principe_Azul, muchas gracias por tus consejos y por exponer tu experiencia, es muy reconfortante para gente como yo que está tan sólo estudiando encontrar este tipo de exposiciones, es como que se creara una pequeña amistad, en general la gente que responde en los foros es muy técnica y ni siquiera te saluda al despedirse, tal vez sea porque Uds. Tienen 20 años y yo pronto a cumplir los 63, no sé pero el saludo acerca a la gente.-               

Código: [Seleccionar]
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(int argc,char **argv){
int (*pFun[3])(int) = {islower, isupper, isdigit};
char a, *mensaje[] = {"una letra minuscula", "una letra mayuscula", "un numero"};
int i;
   
printf("\n Ingrese un caracter cualquiera [confirme con Enter]...:");
a = getchar();

for(i=0; i<3; i++){
if(pFun[i](a)){
printf("\n Ingreso %s", mensaje[i]);
}   
}
 
printf("\n\n Pulse [Enter] para finalizar..."); getchar();getchar();
return 0;
}
/*
islower  -  Determina si el argumento es ua minuscula.
Devuelve un valor distinto de cero si es cierto. en otro caso devuelve 0
isupper  -  Determina si el argumento es una mayuscula.
Devuelve un valor distinto de cero si es cierto; en otro caso devuelve 0
isdigit  -  Determina si el numero es un digito decimal.
Devuelve un valor disitinto de cero si es cierto; en otro caso devuelve 0
isalpha  -  Determina si el argumento es alfabetico.
Devuelve un valor distinto de cero si es cierto; en otro caso devuelve 0.
isalnum  -  Determina si el argumento es alfanumerico.
Devuelve un valor disitinto de cero si es cierto; en otro caso devuelve 0
isxdigit -  Determina si el argumento es un digito hexadecimal.
Devuelve un valor distinto de cero si es cierto; en otro caso devuelve 0
isspace  -  Determina si el argumento es un espacio en blanco.
Devuelve un valor distinto de cero si es cierto; en otro caso devuelve 0
('\f' - '\n' - '\r' - '\t' - '\v')
ispunct  -  Determina si el argumento es un caracter de puntuacion.
Devuelve un valor distinto de cero si es cierto; en otro caso devuelve 0

isascii  -  Determina si el argumento es un caracter ASCII.
Devuelve un valor disitinto de cero si es cierto; en otro caso devuelve 0
isblank  -  Devuelve cierto si caracter es un espacio en blanco o un tabulador.
iscntrl  -  Determina si el argumento es un caracter ASCII de control.
- Devuelve un valor distinto de cero si es cierto; en otro caso devuelve 0
isgraph  -  Determina si el argumento es un caracter ASCII grafico (hex 0x21 -0x7e; octal 041 -176).
Devuelve un valor distinto de cero si es cierto; en otro caso devuelve 0
isprint  -  Determina si el el argumento es un caracter ASCII imprimible (hex 0x20 -0x7e; octal 040 -176).
Devuelve un valor distinto de cero si es cierto; en otro caso devuelve 0
*/

Citar
Te mando 1 abrazo hermano, saludos y éxitos con tus códigos, seguí así inventando cosas que alguna vez vas a lograr algo innovador o alguna cosa que quizás muy pocos la saben, ¿porqué no?.
Muy pero muy reconfortante.-

saludos.
Daniel

5
Hola a todos.

Nuevamente por aquí, el enunciado del libro con el que estoy estudiando dice:

Citar
Escriba un programa que lea un carácter desde el teclado y que pruebe el carácter con cada una de las funciones de la biblioteca de manipulación de caracteres.


Como no quiero utilizar 20 if ni switch se me antojo hacerlo de esta manera, obviamente me da un error que no puedo solucionar, me podrían informar si esto es posible o si estoy proponiendo un disparate.-   
 
Código: [Seleccionar]
#include<stdio.h>
#include<string.h>

int main(int argc,char **argv){
char a, *funManCad[] = {"islower", "isupper", "isdigit"};
char *mensaje[] = {"una letra minuscula", "una letra mayuscula", "un numero"};
int i;

printf("\n Ingrese un caracter cualquiera [confirme con Enter]...:");
a = getchar();
for(i=0; i<3; i++){
if(funManCad[i](a)){
printf("\n Ingreso %s", mensaje[i]);
}
}

printf("\n\n Pulse [Enter] para finalizar..."); getchar();getchar();
return 0;
}

A simple vista se nota que me faltan muchas funciones, pero esto es sólo para la consulta.-

Saludos.
Daniel

6
Hola nosferacento.
Gracias por ocuparte, desconozco las veces que lo corriste para que te dé siempre el resultado esperado, no obstante (sin validación) podemos deducir que el resultado en algún momento va a ser incorrecto, por si no conoces el juego hay que repartir 6 cartas y lo que no puede ocurrir es que haya cartas duplicadas, por ejemplo no puede haber 2 dos del mismo palo , 2 siete del mismo palo etc,etc.-

Citar
Estas son las 40 cartas:
[1] [2] [3] [4] [5] [6] [7] [10] [11] [12] de Basto     
[1] [2] [3] [4] [5] [6] [7] [10] [11] [12] de Oro     
[1] [2] [3] [4] [5] [6] [7] [10] [11] [12] de Espada     
[1] [2] [3] [4] [5] [6] [7] [10] [11] [12] de Copa

Bueno el programa que dejo a continuación parece que funciona correctamente.-     
Código: [Seleccionar]
//Programa para jugar al truco

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

void darCartas(const char *palo[], const char *numero[]);

int main(void){
const char *palo[4] = {"Espadas", "Oro", "Basto", "Copa"};
const char *numero[10] = {"As", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Sota",
"Caballo", "Rey"};
srand(time(NULL));

printf("\n Cartas para la maquina\n");
darCartas(palo, numero);

printf("\n\n Pulse [Enter] para finalizar..."); getchar();
return 0;
}

void darCartas(const char *palo[], const char *numero[]){
int contWhile=0, conFor=0, _palo=0, _numero=0, ok=0;
int sel[12] = {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, *ptrSel = sel;

while(contWhile < 12){
_palo = rand() % 4;
_numero = rand() % 10;
for(conFor=0; conFor < 12; conFor += 2){
if(*(ptrSel + conFor) == _numero){
if(*(ptrSel + conFor+1) == _palo){
ok = 1;
}
}
}

if(ok == 0){
*(ptrSel + contWhile) = _numero;
contWhile++;
*(ptrSel + contWhile) = _palo;
contWhile++;
}else{ok=0;}
}

printf("\n");
for(conFor=0; conFor < 12; conFor +=2){
printf(" %s de %s\n", *(numero + *(ptrSel + conFor)), *(palo + *(ptrSel + conFor+1)));
if(conFor == 4) printf("\n Cartas para el humano\n\n");
}
}

Saludos.
Daniel

7
Hola a todos.
Desconozco si en sus países se juega al truco (Argentina), pero para el caso es irrelevante, lo que necesito es generar 6 pares de números y que ninguno de los 6 pares se duplique, ejemplos:
1 – 7
3 – 3
0 – 5
-------- 
0 – 5 <-- duplicado (lo que no tiene que ocurrir)
1 – 4
3 – 8

Pensé en sumar cada pares de números e ir poniéndolos en un vector y antes de confirmarlo recorrer con un bucle para establecer que realmente el número a ingresar no esté ya en el  vector, lo que pasa que parece un poco largo porque después tendría que separar los 2 números para buscar el palo y la cara para repartir las cartas.-   
Bueno es todo, ¿tienen una manera más sencilla para lograr lo mismo?.-

El programa:
Código: [Seleccionar]
//Programa para jugar al truco

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

void darCartas(const char *palos[], const char *caras[]);

int main(void){
const char *palos[4] = {"Espadas", "Oro", "Basto", "Copa"};
const char *caras[10] = {"As", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Sota",
"Caballo", "Rey"};
srand(time(NULL));


printf("\n Cartas para la maquina\n");
darCartas(palos, caras);

printf("\n\n Cartas para el humano\n");
darCartas(palos, caras);

printf("\n\n Pulse [Enter] para finalizar..."); getchar();
return 0;
}

void darCartas(const char *palos[], const char *caras[]){
int i, _palos, _caras;

for(i=0; i < 3; i++){
_palos = rand() % 4;
_caras = rand() % 10;
//printf("\n %d == cara = %d", _palos, _caras);
printf("\n %s de %s",  *(caras + _caras), *(palos + _palos));
}
}



Desde ya muchas gracias y Saludos.
Daniel

8
Hola Mastermind.
Muchas gracias por ocuparte y decirte que tu código funciona perfectamente, de cualquier manera expongo el mío que se asemeja un poco más a la manera que yo pretendía, hacer lo más posible  con notación de punteros.- 
Bueno a seguir leyendo, practicando y aprendiendo.-

Código: [Seleccionar]
#include <stdio.h>
#include<stdlib.h> 
#include<time.h>

#define MAX 10

int main(void){
int vector[MAX], *ptrVector = &vector[0], i, hora = time(NULL); 

srand(hora);

for(i=0; i<MAX; i++){
*(ptrVector + i) =  rand()% 100;
}

printf("\n\n ");
for(i=0; i<MAX; i++){
printf("%d ", *(ptrVector + i));
}

printf("\n\n Pulse una tecla para finalizar..."); getchar();
return 0;
}

Saludos.
Daniel

9
Hola a todos.
Primero una pequeña aclaración, créanme que tengo toda la mañana consultando al maestro google y no puedo dar con la  solución.
El caso es que estoy en el capítulo punteros y cree un programita que dejo a continuación de un apuntador a un arreglo de 10 enteros, me parece que la manera de cargar los datos es correcta pero en lo que estoy lidiado es con imprimirlos.-

Código: [Seleccionar]
#include <stdio.h>

#define MAX 10

int main(void){
int *ptrVector[MAX], i;

for(i=0; i<MAX; i++){
*(ptrVector + i) = &i;
}

for(i=0; i<MAX; i++){
printf("%d ", *(ptrVector + i));
}


printf("\n\n Pulse una tecla para finalizar..."); getchar();
return 0;
}


Citar
C:\ProgramasNotepad\Punteros.c: In function 'main':
C:\ProgramasNotepad\Punteros.c:13:3: warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]
   printf("%d ", *(ptrVector + i));
   ^

Es todo, espero que puedan ayudarme a encontrar la sintaxis correcta.-
Saludos.
Daniel

10
Hola Mastermind.
Muchas gracias por la ayuda, no tenía que ver con la compilación ni printf, los virus me afectaron al usuario y el mismo día del post ya no pude arrancar la máquina y tuve que formatearla.-
Por algo el dicho: no hay mal que por bien no venga, gracias a esto me enteré que con notepad y un plugin se podía compilar sin tener que utilizar el CMD de Windows para compilar y ejecutar un programa.- 

Saludos Daniel.

11
Hola a todos.
En primer lugar aclarar que no encontré un foro adecuado para hacer esta pregunta (los moderadores decidirán).-
Bueno es más o menos así, si pongo por ejemplo printf(“\n”); el archivo ejecutable se crea normalmente, si por pongo printf(“***”); también funciona, si le agrego más cosas o pongo un espacio ya no me da ningún error pero me borra el .exe.- 
Pasé 2 antivirus, estoy compilando con gcc en línea de comando y lcc-win32, no espero que a alguien le haya ocurrido algo similar para poder ayudarme, si espero que me puedan tirar alguna idea, no se más que hacer.-  :(

Saludos.
Daniel

12
Hola Ogramar.
Un gusto conocerte, unas cosas para aclarar, el primer enlace es un post que yo mismo di de alta por mis dudas en cuanto a la recursión que si bien todavía persisten, tengo algunos conceptos bastante claro gracias a la ayuda de Alex, me gustó muchísimo la idea de sumar las columnas de una matriz con recursividad, solo que no sé si me voy a animar siquiera a intentarlo, veremos.-
En cuanto a la manera que yo preguntaba encontré un blog con el título
“Usar un array de una dimensión como si fuera de dos” me puse a practicar y parece que lo logré, a continuación dejo el código que está recién finalizado, acepto sugerencias para mejorarlo.-

Código: [Seleccionar]
/*
    Usar un array de una dimensión como si fuera de dos
    El programa suma todas las columnas del array con un sólo bucle for.
*/

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

#define FILAS 5
#define COLUMNAS 10

void llenar(int arreglo[], int elementos);
void mostrar(int arreglo[], int elementos);
void sumar(int arreglo[], int elementos);

int main(int argc,char **argv){
int elementos = FILAS * COLUMNAS, arreglo[elementos];

llenar(arreglo, elementos);
mostrar(arreglo, elementos);
sumar(arreglo, elementos);

return EXIT_SUCCESS;
}

void llenar(int arreglo[], int elementos){
unsigned int hora = time(NULL), i;
srand(hora);

for(i=0; i < elementos; i++){
arreglo[i] =  rand()% 100;;
}
}

void mostrar(int arreglo[], int elementos){
int i;
for(i=0; i < elementos; i++){
(i%COLUMNAS == 0) ? printf("\n") : printf("");
printf(" %3d ", arreglo[i]);
}
}

void sumar(int arreglo[], int elementos){
int fila=0, columna=0, i, resultado=0;
printf("\n---------------------------------\n");
for(i=0; i < elementos; i++){
resultado += arreglo[fila+columna];
columna += COLUMNAS;
if((i+1) % FILAS == 0){
printf(" %d ", resultado);
resultado = 0;
fila++; columna=0;
}
}
}


Saludos.
Daniel

13
Hola, y que tengan un muy buen día.
creo que en el enunciado está resumido lo que no supe responder a la pregunta que encontré en el libro con el que estoy estudiando C.-
Bueno es todo, ¿se entiende, se puede?.-

Saludos.
Daniel

14
Hola.
Citar
De todas maneras, creo que un bucle while o for sería mejor que llamadas a una misma función.
Estoy leyendo y escuchando mucho sobre el tema y realmente en teoría parece interesante pero en la práctica como dices  es más usada la forma interactiva que la recursiva, de cualquier manera le voy a dedicar un tiempito más para saber del todo como funciona y así lo tengo incorporado.- 

Saludos.
Daniel

15
Hola Alex.
Gracias por el aporte, si bien es muy esclarecedor todavía no me cae la ficha, considero que en menos de 1 semestre lo logro.- ::) ;D
Estoy con fe que lo voy a entender porque encontré un video (tengo visto como una decena sobre el tema) que lo explica de una manera por lo menos diferente.-   
Ni bien lo tenga claro se los comunico.-

Saludos.
Daniel

16
Un muy buen día para todos.

Lo que me tiene dando vueltas hace 2 días es el tema de la recursividad, el enunciado del libro con el que estoy estudiando c pregunta ¿Qué hace el siguiente programa?, lo que hace es dar como resultado 180 que parecería que está multiplicando 18 * 10 (x * y) pero no hay ninguna multiplicación, por lo menos es lo que me parece.-
En definitiva necesitaría (si disponen de tiempo ;)) que me den teoría sobre el tema recursividad.-   

Código: [Seleccionar]
#include<stdio.h>

int misterio(int a, int b);
 
int main(void){
int x = 18, y=10, result=0;
result = misterio(x, y);
printf("\n misterio develado ==> %d", result);

return 0;
}

int misterio(int a, int b){
/* caso base*/
printf("\n a=%d == b=%d", a, b); /* Esto no está en el libro*/
if(b == 1){
return a;
}
else{
return a + misterio(a, b-1);
}
}

Un gran abrazo a todos.

Daniel     

17
Hola Mastermind.
En primer lugar muchas gracias por ocuparte del tema, te cuento lo que me pasa con tú código , al crear el .exe me sale una caja del antivirus que me advierte que tengo un virus, lo corrí 3 veces y en las tres me ocurrió lo mismo, otra cosita, ¿tu programa no tiene nada que ver con una multiplicación byte a byte es con un bucle de sumas?, de ser así es lo que ya logré y me funciona, lo que necesito es multiplicar byte a byte.-   

Un gran abrazo.
Daniel     

18
Hola a todos.
Tengo que hacer una operación de multiplicación con resultado mayor a 50 dígitos,
consultando a él sabelotodo google me entero que se puede hacer de estas 2 maneras:

…puedes hacerlo byte a byte.
O hacer la multiplicación como un bucle de sumas.-

La segunda la logré, pero la primera apenas estoy en los inicios de la suma binaria, la ayuda que les solicito es la siguiente:
Si tengo estas 2 variables
Código: [Seleccionar]
char a[] = “32456987”, b[] = “23654”;
¿Cómo debo hacer para transformarlas a byte/bits? .- 

Desde ya muchas gracias por el tiempo, Saludos.
Daniel     

19
Hola a todos
Al fin pude lograrlo.-

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

void mostrar(int orden, int dd, int mm);

int main(void){

    int dd,mm,aaaa,orden,ok,ch; dd = mm = aaaa = orden = ok = ch = 0;
   
    do{
            system("CLS");
    printf("\n Ingrese dia...: ");
            ok = scanf("%d", &dd) == 1 && dd >= 1 && dd <= 31;
            while ((ch = getchar()) != EOF && ch != '\n');
}while(!ok);
       
    do{
mostrar(1, dd, mm);
        printf("\n Ingrese mes...: ");
        ok = scanf("%d", &mm) == 1 && mm >= 1 && mm <= 12;
        while ((ch = getchar()) != EOF && ch != '\n');
    }while(!ok);
       
    do{
        mostrar(2, dd, mm);
        printf("\n Ingrese anio..: ");
        ok = scanf("%d", &aaaa) == 1 && aaaa >= 1 && aaaa <= 9999;
        while ((ch = getchar()) != EOF && ch != '\n');
    }while(!ok);

    printf("\n La fecha ingresada es %d/%d/%d", dd,mm,aaaa);

    return 0;
}

void mostrar(int orden, int dd, int mm){
    system("CLS");
    if(orden == 1){
        printf("\n Ingrese dia...: %d", dd);
    }
    if(orden == 2){
        printf("\n Ingrese dia...: %d", dd);
        printf("\n Ingrese mes...: %d", mm);
    }
}
 

Igual tiene algo que no me gusta, si se ingresa 10.15 me toma el 10 me parece que voy a tener que modificar la validación.-

Un saludo.
Daniel

20
Hola Alex.
Muchas gracia por responder.-
Veo que no corriste mi programa, si algún día lo haces seguramente entenderas la lógica del mismo.-

Un gran saludo.-
Daniel

Páginas: [1] 2

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".