//ejercicio 6 #include #include #include <string.h

Anuncio
//ejercicio 6
#include&lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;math.h&gt;
struct TipoPunto{
double abcisa;
double ordenada;
};
struct TipoCiudad{
struct TipoPunto situacion;
char nombre[50];
};
void Reordenar (struct TipoCiudad ciudades[], int num_ciudades, const char
nombre_ciudad_referencia[])
{
int i,j,k;
struct TipoCiudad temp;
double distancia,dist;
for(i=0;i&lt;num_ciudades;i++)
if(strcmp(nombre_ciudad_referencia,ciudades[i].nombre)==0)//tiene en //
cuenta mayusculas y minusculas
{
temp=ciudades[0];
ciudades[0]=ciudades[i];
ciudades[i]=temp;
break;
}
for(i=1;i&lt;num_ciudades-1;i++){
distancia=sqrt(pow((ciudades[0].situacion.abcisaciudades[i].situacion.abcisa),2)+ pow((ciudades[0].situacion.ordenadaciudades[i].situacion.ordenada),2));
k=i;
for(j=i+1;j&lt;num_ciudades;j++){
dist=sqrt(pow((ciudades[0].situacion.abcisaciudades[j].situacion.abcisa),2)+ pow((ciudades[0].situacion.ordenadaciudades[j].situacion.ordenada),2));
if(dist&lt;distancia){
distancia=dist;
k=j;
}//fin if
}//fin for j
temp=ciudades[i];
ciudades[i]=ciudades[k];
ciudades[k]=temp;
}//fin for i
}
void main()
{
int canti,i;
struct TipoCiudad *tipo;
char nombre[50];
printf(&quot;Cuantas ciudades quiere ordenar?\n&quot;);
scanf(&quot;%d&quot;,&amp;canti);
fflush(stdin);
tipo=(struct TipoCiudad*)malloc(canti*sizeof(struct TipoCiudad));
for(i=0;i&lt;canti;i++){
printf(&quot;Ingrese nombre ciudad: &quot;);
gets(tipo[i].nombre);
fflush(stdin);
printf(&quot;Ingrese abcisa ciudad: &quot;);
scanf(&quot;%lf&quot;,&amp;tipo[i].situacion.abcisa);
fflush(stdin);
printf(&quot;Ingrese ordenada ciudad: &quot;);
scanf(&quot;%lf&quot;,&amp;tipo[i].situacion.ordenada);
fflush(stdin);
}
printf(&quot;Ingrese nombre ciudad de referencia para ordenar: &quot;);
gets(nombre);
Reordenar(tipo, canti,nombre);
printf(&quot;Las ciudades ordenadas segun la ciudad de referencia %s:\n&quot;,nombre);
for(i=1;i&lt;canti;i++)
printf(&quot;%s\n&quot;,tipo[i].nombre);
free(tipo);
}
//ver ejercicio 7 en transparencias punteros
//ejercicio 14, resuelto con punteros
#include &lt;stdio.h&gt;
void main()
{
unsigned int myInt=355;
unsigned char *p=(unsigned char*)&amp;myInt;
printf(&quot;INT: %d\n&quot;,myInt);
printf(&quot;CHAR[0] %d\n&quot;,*p);//p[0]=99
printf(&quot;CHAR[1] %d\n&quot;,*(p+1));//p[1]=1
printf(&quot;CHAR[2] %d\n&quot;,*(p+2));//p[2]=0
printf(&quot;CHAR[3] %d\n&quot;,*(p+3));//p[3]=0
}
//ejercicio 15, resolver con uniones
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
union {
unsigned int myInt;
unsigned char myByteArray[4];
} TheUnion;
void main()
{
char buffer[33];
TheUnion.myInt=355;
printf(&quot;%s\n&quot;,itoa(355,buffer,2));
printf(&quot;INT: %d\n&quot;,TheUnion.myInt);
printf(&quot;CHAR[0] %d\n&quot;,TheUnion.myByteArray[0]);//99
printf(&quot;CHAR[1] %d\n&quot;,TheUnion.myByteArray[1]);//1
printf(&quot;CHAR[2] %d\n&quot;,TheUnion.myByteArray[2]);//0
printf(&quot;CHAR[3] %d\n&quot;,TheUnion.myByteArray[3]);//0
}
//con desplazamientos de bits
void main()
{
unsigned int colour = 355;
unsigned char a = colour &gt;&gt; 24 &amp; 0xFF;
unsigned char r = colour &gt;&gt; 16 &amp; 0xFF;
unsigned char g = colour &gt;&gt; 8 &amp; 0xFF;
unsigned char b = colour &amp; 0xFF;
printf(&quot;INT: %d\n&quot;,colour);
printf(&quot;nuevo\n&quot;);
printf(&quot;CHAR[0] %d\n&quot;,b);
printf(&quot;CHAR[1] %d\n&quot;,g);
printf(&quot;CHAR[2] %d\n&quot;,r);
printf(&quot;CHAR[3] %d\n&quot;,a);
}
//ejercicio 10 paridad par
#include &lt;stdio.h&gt;
int parity(unsigned int x) {
int parity=0;
while (x &gt; 0) {
parity = (parity + (x &amp; 1)) % 2;
x &gt;&gt;= 1;
}
return parity;
}
void main() {
unsigned int i;
for (i = 0; i &lt; 256; i++) {
printf(&quot;%d\t%s&quot;, i, parity(i)?&quot;impar&quot;:&quot;par&quot;);
if(parity(i))
printf(&quot;\t%d&quot;,i|0x80);
printf(&quot;\n&quot;);
}
}
//el 11 est&aacute; resuelto en la guia de la pr&aacute;ctica
//ejercicio 12
#include &lt;stdio.h&gt;
/* SETBITS: SET THE n BITS THAT BEGIN IN POSITION p OF x TO THE
/*
RIGHTMOST BITS n BITS OF y.
*/
unsigned setbits(unsigned x, int p, int n, unsigned y)
{
unsigned msk = ~(~0 &lt;&lt; n);
/*1&ordm; pone a 0 los bits a reemplazar en x
2&ordm; pone a 0 los bits mas significativos de y y luego
mueve el resto a la posici&oacute;n donde tiene que reemplazar en x*/
return (x &amp; ~(msk&lt;&lt; p+1-n)) | ((y &amp; msk)&lt;&lt; p+1-n);
}
void main(void)
{
int off = 4;
int len = 3;
unsigned x = 0x55;//85:01010101
unsigned y = 0XAA;//170:10101010
printf(&quot;x: %u y: %u\n&quot;,x,y);
printf(&quot;%u\n&quot;,setbits(x,off,len,y));//73 01001001
}
//ejercicio 13
#include &lt;stdio.h&gt;
unsigned int getbits(unsigned int x, int p, int n) {
/*x &gt;&gt; (p + 1 - n) mueve el campo deseado al borde derecho del nro.
~0, todos unos, los desplazo n lugares a la izquierda y relleno a la derecha con 0s,
y complementado hace una mascara de n bits en 1 en los bits mas a la derecha*/
return (x &gt;&gt; (p + 1 - n)) &amp; ~(~0 &lt;&lt; n);
}
int main(void) {
int x = 0xF994, p = 4, n = 3;
int z = getbits(x, p, n);
printf(&quot;getbits(%u (%x), %d, %d) = %u (%X)\n&quot;, x, x, p, n, z, z);
return 0;
}
*/
Descargar