Esercizi prova 13_02_14

18 February 2017

Views: 143

Esercizio 1:
array.h
#if !defined ARRAY_H
#define ARRAY_H

#include <stdio.h>
#include <stdlib.h>

extern double media(double *arr, size_t n);

#endif

array.c
#include "array.h"

double media(double *arr, size_t n) {
double somma = 0, ris;
int i;
for (i = 0; i < n;i++) {
somma = somma + arr[i];
}
ris = somma / n;
return ris;
}

Esercizio 2:
conta.c
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

size_t conta_parole(const char *s) {
if (s[0] == 0)
return 0;
if (s == NULL)
return 0;
size_t numeroparole = 0;
for (int i = 0; i < strlen(s); i++) {
if (s[i] != ' ') {
while (1) {
if (s[i] == ' ') {
numeroparole++;
break;
}
i++;
if (s[i] == 0)
break;
}
}
}
if (s[strlen(s) - 1] != ' ')
numeroparole++;

return numeroparole;
}
Esercizio 3:
Versione Artiol:
cono.c
#include <stdio.h>
#include <stdlib.h>

void stampa_cono(unsigned int h) {
int primariga = 0;
int ultimariga = h;
int ncol = h * 2 + 3;
int cen = h + 1;
int c = cen - 1;
int n = cen + 1;
for (int j = 0; j <= h; j++) {
if (j == primariga) {
for (int k = 0; k < ncol;k++) {
if (k == cen)
fprintf(stdout, "_");
else
fprintf(stdout, " ");
}
fprintf(stdout, "
");

}
if (j != primariga) {
if (j != ultimariga) {
for (int k = 0; k < ncol; k++) {
if (k == c)
fprintf(stdout, "/");
else if (k == n)
fprintf(stdout, "");
else
fprintf(stdout, " ");
}
n++;
c--;
fprintf(stdout, "
");
}
else {
for (int k = 0; k < ncol; k++) {
if (k == 0)
fprintf(stdout, "_");
else if (k == ((h*2 + 3) -1))
fprintf(stdout, "_");
else if(k == ((h*2)+3)-2)
fprintf(stdout, "");
else if (k == 1)
fprintf(stdout, "/");
else
fprintf(stdout, " ");
}
fprintf(stdout, "
");
}

}
}
}
Versione Davide:
#include <stdio.h>
#include <stdlib.h>

void stampa_cono(unsigned int h) {
//stampo prima riga
int riga = h * 2 + 3;
int cen = h + 1;
for (int i = 0; i < riga; i++) {
if (i == cen)
fprintf(stdout, "_");
else
fprintf(stdout, " ");
}
fprintf(stdout, "
");
if (h > 1) {
//corpo centrale
int c = cen - 1;
int n = cen + 1;
for (int j = 0; j < (h - 1); j++) {
for (int k = 0; k < riga; k++) {
if (k == c) {
fprintf(stdout, "/");
}
else if (k == n) {
fprintf(stdout, "");
}
else
fprintf(stdout, " ");

}
n++;
c--;
fprintf(stdout, "
");
}
}
//ultima riga
for (int i = 0; i < riga; i++) {
if (i == 0)
fprintf(stdout, "_");
else if (i == (riga - 2))
fprintf(stdout, "");
else if (i == 1)
fprintf(stdout, "/");
else if (i == (riga - 1))
fprintf(stdout, "_");
else
fprintf(stdout, " ");
}
fprintf(stdout, "
");

}
Esercizio 4:
stringhe.h
#if !defined STRINGHE_H
#define STRINGHE_H
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

struct stringa {
unsigned char length;
char *s;
};

extern struct stringa *read_stringhe_bin(const char *filename, unsigned int *pn);

#endif

stringhe.c
#include "stringhe.h"

struct stringa *read_stringhe_bin(const char *filename, unsigned int *pn) {
FILE *f = fopen(filename, "rb");
if (f == NULL)
return NULL;
struct stringa *str = NULL;
*pn = 0;
while (1) {
unsigned char n;
int r2 = fread(&n, sizeof(unsigned char), 1, f);
if (r2 != 1 ) {
return str;
}
char *stringa = malloc(sizeof(char)*n);
int r3 = fread(stringa, sizeof(char), n, f);
if (r3 != n) {
return str;
}
stringa[n] = 0;
*pn = *pn + 1;
str = realloc(str, *pn * sizeof(struct stringa));
str[*pn - 1].s = malloc(sizeof(char)*n);
str[*pn - 1].length = n;
for (int i = 0; i < n; i++) {
str[*pn - 1].s[i] = stringa[i];
}
str[*pn - 1].s[n] = 0;
}
}
Esercizio 5:
matrici.h
#ifndef MATRICI_H
#define MATRICI_H
#include <stdio.h>
#include <stdlib.h>
extern double *diag(double *matr, size_t n);
#endif //MATRICI_H

matrici.c
#include "matrici.h"

double *diag(double *matr, size_t n)
{
double *dia = malloc(sizeof(double)*n);
int c = 0;
for (int r = 0; r < n; r++) {
dia[c] = matr[r*n + r];
c++;
}
return dia;
}

Share