Herranz

Sesión 07: Programas y Make

LCG generando números aleatorios

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>

#define A 7
#define C 1
#define M 11

int x = 0;

int generar_aleatorio() {
  int anterior = x;
  x = (A * x + C) % M;
  return anterior;
}

int main()
{
  int i;

  for (i = 0; i < M; i++) {
    printf(
      "%i -> %i\n",
      i,
      generar_aleatorio());
  }
  
  return 0;
}

Make

1
2
3
4
CFLAGS=-Wall -Wextra -g

lcg1: lcg1.o
	$(CC) $(CFLAGS) -o lcg1 lcg1.o
1
2
3
4
$ make lcg1
cc -Wall -g   -c -o lcg1.o lcg1.c
cc -Wall -g -o lcg1 lcg1.o
$ 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ ./lcg1
0 -> 0
1 -> 1
2 -> 8
3 -> 2
4 -> 4
5 -> 7
6 -> 6
7 -> 10
8 -> 5
9 -> 3
10 -> 0
$ 

Makefile explicado

1
 CFLAGS=-Wall -Wextra -g
1
2
lcg1: lcg1.o
	$(CC) $(CFLAGS) -o lcg1 lcg1.o
1
2
lcg1.o: lcg1.c
	$(CC) $(CFLAGS) -c lcg1.c

La inteligencia del Make

Include, macros, variables globales y locales

Recursión

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

unsigned sum(unsigned i) {
  if (i < 1) {
    return 0;
  }
  else {
    return i + sum(i-1);
  }
}

int main() {
  unsigned n = 10;
  printf(
    "0+1+...+%u = %u\n ",
    n,
    sum(n)
  );
  
  return 0;
}
1
Segmentation fault (core dumped)