Programación por contrato - Revision : 1,8

Anuncio
Programación por contrato - Revision : 1,8
Herramientas de Programación— Cuadernos de Prácticas
Soluciones
19 de noviembre de 2004
Resumen
Uso de la cabecera ’assert.h’. Uso de la librerı́a Nana.
Dpto. Lenguajes y Sistemas Informáticos
Universidad de Alicante
Índice
1. Uso de assert.h
2
2. Uso de Nana
2
1
1.
Uso de assert.h
1.
/* gcc nne.c -o nne -lm */
/* gcc -DNDEBUG nne.c -o nne -lm */
#include <stdio.h>
#include <math.h>
#include <assert.h>
float
float_sqrt(float d)
{
float result;
assert(d > 0.0);
result = sqrtf(d);
assert(result == (float) sqrt((double) d));
return result;
}
int
main()
{
int n[] = { 1, 2, 3, 4 };
printf("fsqrt(5)=%f\n", float_sqrt(5));
printf("fsqrt(-5)=%f\n", float_sqrt(-5));
#ifndef NDEBUG
int i, aux_s=0, aux_p=1;
for (i=0; i<4; i++)
{
aux_s += n[i];
aux_p *= n[i];
}
assert( (aux_s>9) && (aux_p==24) );
#endif
return 0;
}
2.
Uso de Nana
1.
2
/* gcc nne2.c -o nne2 -lnana */
/* nana nne2.c >nne2.gdb */
/* gcc -DWITHOUT_NANA nne2.c -o nne2 */
#include <stdlib.h>
#include <time.h>
#include <nana.h>
#include <stdio.h>
#define MAX 100
void Rellenar(int *v)
{
int i,j;
/*{P}*/ DI(v!=NULL);
v[0]=1+(int)(100.0*rand()/(RAND_MAX+1.0));
for(i=1;i<MAX;i++)
{
j=1+(int)(100.0*rand()/(RAND_MAX+1.0));
v[i]=j;
DL("j=%d\n", j);
}
/*{Q}*/ DI(i==MAX);
}
int numero_de_veces(int *v,int pos)
{
int cuenta,j;
cuenta=0;
/*{P}*/ DI((pos>=0) && (pos<MAX));
for(j=0;j<MAX;j++)
{
DS($c=cuenta);
if(v[pos]==v[j])
cuenta++;
}
DL("cuenta de posicion %d es %d\n",pos,cuenta);
/*{Q}*/ DI($c>=1);
return cuenta;
}
int main()
{
3
int vector[MAX],i;
srand(time(NULL));
printf("RAND_MAX=%d\n", RAND_MAX);
Rellenar(vector);
i=numero_de_veces(vector,50);
printf("Vector[50]: %d, %d veces",vector[50],i);
printf("\n");
}
4
Descargar