graciasss!!!
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ú
#include <math.h>
float distancia(float x1,float y1,float x2,float y2);
float distalorigen(float pt[]);
struct punto
{
float x;
float y;
}puntos[3];
int main()
{
int i;
float dist,resultado;
for(i=0;i<3;i++)
{
printf("ingrese los datos del punto %d\n",i+1);
scanf("%f",&puntos[i].x);
scanf("%f",&puntos[i].y);
}
for(i=0;i<3;i++)
{
printf("el punto ingresado es %d\n",i+1);
printf("%f ",puntos[i].x);
printf("%f ",puntos[i].y);
printf("\n");
}
dist=distancia(puntos[0].x,puntos[0].y,puntos[1].x,puntos[1].y);
printf("la distancia entre los puntos ingresados es \n %.2lf",dist);
resultado=distalorigen(puntos);
printf("el punto mas alejado del origen es \n %.2lf",resultado);
}
float distancia (float x1,float y1,float x2,float y2)
{
float d;
d=sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));
return d;
}
float distalorigen(float pt[])
{
int i;
float mayor=0;
float R;
for(i=0;i<3;i++)
{
R=sqrt(((pt[i]-0)*(pt[i]-0))+((pt[i+1]-0)*(pt[i+1]-0)));
if(R>mayor)
{
mayor=R;
}
}
return mayor;
}
int cuentavocales(char cadena[]);
void suprimirletra(char cadena[],char l);
void ponblancosalprincipio(char cadena[],int numblancos);
int main()
{
char cad[80],c;
int x,resultado;
printf("ingrese una cadena por favor\n");
gets(cad);
resultado=cuentavocales(cad);
printf("la cantidad de vocales es %d\n",resultado);
printf("que letra desea suprimir?\n");
scanf("%c",&c);
suprimirletra(cad,c);
printf("cuantos espacios en blancos desea tener\n");
scanf("%d",&x);
ponblancosalprincipio(cad,x);
return 0;
}
int cuentavocales(char cadena[])
{
int i=0,cont=0;
while(cadena[i]!='\0')
{
if(cadena[i]=='a'||cadena[i]=='e'||cadena[i]=='i'||cadena[i]=='o'||cadena[i]=='u'||cadena[i]=='A'||cadena[i]=='E'||cadena[i]=='U'||cadena[i]=='O'||cadena[i]=='I')
{
cont++;
}
i++;
}
return cont;
}
void suprimirletra(char cadena[],char l)
{
int i=0;
while(cadena[i]!='\0')
{
if(cadena[i]=='l')
{
printf(" ");
}
i++;
}
puts(cad);
return;
}
void ponblancosalprincipio(char cadena[],int numblancos)
{
int i=0,j;
while(cadena[i]==cadena[0])
{
for(j=0;j<numblancos;j++)
{
printf(" ");
}
i++;
}
puts(cadena);
return ;
}
Cita de: YreX-DwX en 13 Enero 2019, 11:11 AM
Aunque ya tengas el tema solucionado, lo importante es resolver las dudas que quedan así que...
- <sizeof()> se usa para obtener el número de bytes que ocupa un tipo de dato. En ese código te devuelve el número de bytes que ocupa un <unsigned long long>.
- <--s> significa decrementar <s> en 1. Al igual que se suele hacer <i++>, se puede hacer también <i-->, <++i> o <--i>. A veces da igual usar el prefijo o el sufijo (cuando es una sentencia aislada, que no va como "encadenada"). El prefijo primero hace el incremento/decremento y después el resto de la sentencia; el sufijo primero hace el resto de la sentencia y al final hace el incremento/decremento.
for(int i = 0; i < 5; i++) // aqui da igual i++ o ++i porque esta solo
printf("%d", i++); // primero muestra i y luego lo incrementa en 1. Salida: 0, 2, 4
for(int i = 0; i < 5; i++)
printf("%d", ++i); // incrementa i y luego lo muestra. Salida: 1, 3, 5 (el 5 se muestra aunque la condicion es i < 5)
Si haces <num >> 1> lo que haces es mover los bits de <num> una posición a la derecha. Si tienes:
a = 01011001
a >> 1
a = 00101100
Si el número es negativo se extiende con unos:
a = 11010011
a >> 1
a = 11101001
Como dato interesante que si no te paras a estudiar los bits no te das cuenta es que mover una posición a la izquierda un número en binario es equivalente a multiplicar ese número por 2. Y entonces moverlo una posición a la derecha es equivalente a dividirlo por 2, aunque si es impar se hará obviando los decimales.
Entonces para que entiendas el código ese que la verdad aunque poco efectivo, me parece impresionante:
Usa una función donde manda un <unsigned long long> que es el número a calcular y le pasa como segundo parámetro el número de bits que ocupa un número <unsigned long long> (con <sizeof()> saca el número de bytes y eso por 8, en bits).
Entonces cuando <s == 1> es decir, cuando sólo quede el bit más significativo se retorna ese bit (que valdrá 1 si el número es negativo o 0 si no lo es). Y si <s != 1>, mueve todos los bits una posición a la derecha y decrementa el número de bits que quedan todavía. Algo así en un caso simplificado:
n = 4 (0100) s = 4
s == 1? No -> n = 2 (0010) s = 3
s == 1? No -> n = 1 (0001) s = 2
s == 1? No -> n = 0 (0000) s = 1
s == 1? Si -> return n (return 0)
n = -2 (1110) s = 4
s == 1? No -> n = -1 (1111) s = 3 // los negativos se extienden con 1 para que sigan siendo negativos (cosas del complemento a 2)
s == 1? No -> n = -1 (1111) s = 2
s == 1? No -> n = -1 (1111) s = 1
s == 1? Si -> return n (return 1)
Una función de ese estilo es mejor que no muestre nada por pantalla por si quieres usar esa función dentro de un condicional, sería más funcional entonces sin los <printf()>:
int positivo(int n){
if(n >= 0)
return 1;
else
return !negativo(n);
}
int negativo(int n){
if(n < 0)
return 1;
else
return !positivo(n);
}
Espero que esto te ayude a entender y profundizar más en todo lo que se puede hacer con la programación. Suerte