tomasfdel

Cee Práctica 3

Nov 4th, 2016
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.51 KB | None | 0 0
  1. Ejercicio 1)
  2. struct punto{
  3.     double x,y;
  4. };
  5.  
  6.  
  7. double proyeccion(struct punto p, char eje){
  8.     if (eje=='x')
  9.         return p.x;
  10.     if (eje=='y')
  11.         return p.y;
  12.     return 0;
  13. }
  14.  
  15.  
  16. double dist (struct punto p1, struct punto p2){
  17.     return sqrt(pow((p1.x-p2.x),2)+pow((p1.y-p2.y),2));
  18. }
  19.  
  20.  
  21. char cuadrante(struct punto p){
  22.     if (p.x==0){
  23.         if (p.y==0)
  24.             return 'o';
  25.         return 'y';
  26.     }
  27.  
  28.     if (p.y==0)
  29.         return 'x';
  30.  
  31.     if(p.y>0){
  32.         if(p.x>0)
  33.             return '1';
  34.         return '2';
  35.     }
  36.  
  37.     if (p.x<0)
  38.         return '3';
  39.     return '4';}
  40.  
  41.  
  42.  
  43. Ejercicio 2)
  44. a INT - 3
  45. &a *INT
  46. *a NO EXISTE
  47. ptr *INT - &a
  48. &ptr *PUNTERO
  49. *ptr INT - 3
  50. qtr *INT - vector
  51. &qtr *PUNTERO
  52. *qtr INT - 10
  53. vector *INT
  54. &vector *PUNTERO
  55. *vector INT - 10
  56. ++qtr *INT - vector+1
  57. ++*qtr  INT - 11
  58. ++*vector INT - 11
  59. *&ptr *INT - &a
  60.  
  61.  
  62. Ejercicio 3)
  63. cp = &'a' trata de igualar a un puntero la dirección de memoria de un caracter.
  64. *ip1 = ip2 trata de igualar lo que apunta ip1 a ip2, cuando el puntero no está inicializado.
  65.  
  66.  
  67. Ejercicio 4)
  68. 1- Se usan variables globales y no se utilizan paréntesis en la llamada a initialize.
  69. #include <stdio.h>
  70.  
  71. void initialize(int a, int *b) {
  72.     if (a>0) *b=1; else *b=0;
  73. }
  74.  
  75. int main() {
  76.     int a, b;
  77.     a=1;
  78.     initialize(a,&b);
  79.     printf("%d %d\n", a, b);
  80.  
  81. return 0;
  82.  
  83. }
  84.  
  85.  
  86. 2- Se pierde la referencia a la memoria reservada para pj, además que creo que para liberar memoria debería usarse el puntero al que originalmente se le asignó con malloc en vez de otro que casualmente apunta a la misma dirección.
  87.  
  88. #include <stdio.h>
  89.  
  90. int main() {
  91.     int *pi = malloc(sizeof(int)), *pj;
  92.     *pi = 11;
  93.     pj = pi;
  94.     printf("*pi= %d, *pj= %d", *pi, *pj);
  95.     free(pi);
  96.     // resto de código
  97.     return 0;
  98. }
  99.  
  100.  
  101. 3- No se declara b antes de asignarle a un puntero su dirección de memoria, además que se sobreescribe memoria utilizando un puntero no inicializado.
  102.  
  103. #include <stdio.h>
  104.  
  105. int main() {
  106.     int a=34, *ptr=&a;
  107.     int b=45, *ptr2=&b;
  108.     *ptr = 34;
  109.     printf(" %d =?= %d", a, *ptr);
  110.     return 0;
  111. }
  112.  
  113.  
  114. 4- Esto es horrible...
  115.  
  116.  
  117. 5- WTF esa asignación.
  118. i. nuevo->apellido; Es incorrecto pues nuevo no es un puntero.
  119. ii. pest->division; Correcto, vale 'a'.
  120. iii. (*pest)->apellido; Es incorrecto pues (*pest), o sea, nuevo, no es un puntero. Similar al apartado i.
  121. iv. *pest->apellido+2; Correcto, vale 'N'.
  122. v. *(pest->apellido+2); Correcto, vale 'p'.
  123. vi. pest->apellido[2]; Correcto, vale 'p'.
Add Comment
Please, Sign In to add comment