elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  funciòn en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: funciòn en C  (Leído 2,689 veces)
fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
funciòn en C
« en: 4 Julio 2018, 00:09 am »

Buenas, ando necesitando ayuda para entender una función en c que imprimir un triangulo rectángulo de asteriscos de la siguiente manera:
      *
    **
  ***
****
el codigo ya esta resuelto pero no lo entiendo,es el siguiente:

void ImprimirCaracter(char caracter);
void ImprimirCaracteres(char caracteres,int veces);
void ImprimirFila(char caracter, int vecesespacio,int vecescaracter);

int main()
{
int f,esp;
char c;
printf("Ingrese el numero de filas:");
scanf("%d",&f);
fflush(stdin);
printf("Ingrese el caracter: ");
scanf("%c",&c);
fflush(stdin);
esp=f-1;
ImprimirFila(c,esp,f);
}
void ImprimirCaracter(char caracter)
{
printf("%c",caracter);
}

void ImprimirCaracteres(char caracteres,int veces)
{
int i;
for(i=0;i<veces;i++)
{
    ImprimirCaracter(caracteres);
}
}

void ImprimirFila(char caracteress, int vecesespacio,int vecescaracter)
{
    int h=1,j;

    for(j=0;j<vecescaracter;j++)
    {
        ImprimirCaracteres(' ',vecesespacio);
        ImprimirCaracteres(caracteress,h);
        h++;
        vecesespacio--;
        printf("\n");
    }
}
Para empezar la variable veces, no la ingresa en ningún momento..., eso significa que la esta pasando como parámetro?,  tampoco entiendo porque usa la variable esp... esp=f-1, si ingreso por teclado 4 esp=4-1=3 eso significa 3 espacios en blanco?,lo mismo ocurre con veces caracter y vecesespacio... las usa pero no las ingresa en ningún momento


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: funciòn en C
« Respuesta #1 en: 4 Julio 2018, 09:50 am »

Las variables, como sabes (o debieras saber) contienen valores...

Por lo general son declaradas en alguna parte (hay lenguajes que no exigen una declaración explícita (se deduce implícitamente de su uso)).

Sin embargo parece que tú esperas o crees que solo pueden estar declaradas en el cuerpo del código... pero también pueden estar declaradas como constantes, como retorno de funciones  (en ese caso, la función actuaría como una variable), como parámetros en funciones, etc... ése último caso descrito, es el tuyo.

Si se tienes un código como este:

Código:
entero edad
edad = DameMiEdad(fechaNacimiento, AñoActual)
mostrar edad

Y tu pasas estos datos:
Código:
edad= DameMiEdad(2000, 2018)
Te dirá que tu edad es 18 años...

Tu e parte alguna haces una asignación:
Código:
fechanacimiento= 2000
AñoActual = 2018
Esos son los nombres de los parámetros de la función... tu puedes pasar una contante (valor inmediato, como en el jeemplo), u otra variable o expresión numérica, siempre que sea del mismo tipo o sea convertida a dicho tipo (para que no genere error)...

es decir perfectamente podrías haber hecho:

así...
Código:
propiedad get DosMileniosDC
    Devolver 2000
fin propiedad
edad = DameMiEdad(DosMileniosDC, 2018)

ó...
Código:
entero malditoaño = 20 * 100
edad = DameMiEdad(malditoaño, 2018)

ó...
Código:
entero e = 8
entero c = 22
edad = DameMiEdad(((50 +10) * e) - (c * 40) ,  2018)

en el primer caso, al parámetro se la pasa el valor que devuelve una propiedad, en el segundo caso, el valor de otra variable, en el 3º caso, el valor de una expresión... y en ningún caso se ha hecho:
Código:
fechanacimiento= .....

Por que la idea de una función (del diseño léxico de una función), es precisamente decorrar la asignación de variables de una forma que nos parezca un único bloque, coherente, donde se exige el pasó de cada parámetro.... por supuesto el compilador,  tendrá que señalar una posición de memoria y pasar un valor a dicha posición o a un registro de la CPU, es decir a nivel atómico, es lo mismo que asignar el valor a una variable mediante el símbolo '=' ... pero más eficaz en el diseño, más rápido e intuitivo...

Lo demás, que preguntas no tiene sentido... si tu mismo dices que funciona el código, y si lo has programado tú, se supone que cada línea está ahí, porque la entiendes y has puesto lo que entendías que cabe poner...
Cuando un programador da nombres a variables, debe darles nombres de tal modo  que entienda su cometido, que su solo nombre sea autoexplicativo... la única razón para no hacerlo así es que sea algo tan sencillo, que no requiera más complicaciones, pero aún así, sobretodo para los novatos y estudiantes es buena práctica que el nombre dado a una variable autoexplique lo que hace.

Entonces:
Código:
esp=f-1
' esto lo hace a medias... esp, podría ser 'espacios' como podría ser 'esparragos', ó 'espera' ó 'espabiado' ó 'español' ó 'espartaco', ó... si es 'espacio', por qu´leches nio poner 'espacios = ...' te cobran por cada carácter que escribes?????.
En los 80 había que conformarse con una letra y a lo sumo con una letra seguida de un número porque la memopria era muy , muy limitada, ahora resulta de risa la estupidez en ahorrar caracteres a las variables.

Igualmente 'f'... por qué rayos no poner 'filas', pero más aún dado el que esa filas son las filas que tendrá el ejercicio, mejor sería señalarlo como: FilasDeAsteriscos...
Y finalmente llegamos al autoentendimiento del código:
Código:
EspaciosPorLinea = (AsteriscosPorLinea - 1)

Es un problema matemático, antes que de programación que... ...si "unos quedan delimitados por otros", la cantidad de delimitadores siempre es 1 menos, salvo que lo delimite también por fuera en cuyo caso es 1 más...  Así "As" delimitadas por "Bs"...
ABA
ABABA
ABABABA
ABABABABABABABABABABA
...siempre habrá una 'B' menos que 'A'
entonces aún mejor que:
Código:
EspaciosPorLinea = (AsteriscosPorLinea - 1)
"
que es específico al problema sería
Código:
NumDelimitadores = (NumDelimitados -1)
es genérico se aplica a cualquier caso o cosa, pero si te resulta más abstracto, y te deja perplejo o con dudas, sigue siendo válido el
Código:
EspaciosPorLinea = (AsteriscosPorLinea - 1)
pero:
Código:
esp = f-1
Resulta lastimosos de entender...

...falta ver si te lo aplicas en adelante...


« Última modificación: 4 Julio 2018, 09:54 am por NEBIRE » En línea

fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: funciòn en C
« Respuesta #2 en: 5 Julio 2018, 21:14 pm »

Hola gracias por la respuesta, el codigo compila bien lo que pasa que no lo hice yo, lo hizo una amiga que hizo esta materia y me paso sus ejercicios resueltos, pero particularmente a mi me cuesta un montón programar...
saludos
En línea

e

Desconectado Desconectado

Mensajes: 177


e


Ver Perfil
Re: funciòn en C
« Respuesta #3 en: 6 Julio 2018, 19:21 pm »

¡Todo es aprender! ¡Y ponerse!   :D
fox459
En línea

e
fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: funciòn en C
« Respuesta #4 en: 7 Julio 2018, 00:32 am »

si olvidate ATR
En línea

e

Desconectado Desconectado

Mensajes: 177


e


Ver Perfil
Re: funciòn en C
« Respuesta #5 en: 7 Julio 2018, 17:42 pm »

¿? :huh:
fox459
En línea

e
fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: funciòn en C
« Respuesta #6 en: 8 Julio 2018, 00:32 am »

ATR=a todo ritmo ;D
En línea

e

Desconectado Desconectado

Mensajes: 177


e


Ver Perfil
Re: funciòn en C
« Respuesta #7 en: 8 Julio 2018, 11:40 am »

 ;-)
Te recomiendo aprender C y Python si te interesa la programación.
fox459
En línea

e
fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: funciòn en C
« Respuesta #8 en: 8 Julio 2018, 21:53 pm »

hola fox, en verdad yo estudio ingenieria industrial en la Argentina (UNLP), y esta materia es de tercer año el tema es que no la puedo aprobar y me està trabando las correlativas  :-[
En línea

e

Desconectado Desconectado

Mensajes: 177


e


Ver Perfil
Re: funciòn en C
« Respuesta #9 en: 9 Julio 2018, 10:59 am »

Pues suerte  ;).
En línea

e
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines