Fondamenti di Programmazione a.a. 2011-2012
Soluzioni esercizi di preparazione alla prova intermedia 2011
#include <stdio.h>
int main() {
int n;
printf("inserire un intero: ");
scanf("%d", &n);
int plus = 2 - (n % 2);
for (int r = 0 ; r < n ; r++) {
int minus = (n - plus)/2;
for (int c = 0 ; c < minus ; c++) printf("-");
for (int c = 0 ; c < plus ; c++) printf("+");
for (int c = 0 ; c < minus ; c++) printf("-");
printf("\n");
if (r < n/2) plus += 2;
else plus -= 2;
if (plus > n) plus = n;
}
return 0;
}
void minmax(float A[], int n) {
int i, imin = 0, imax = 0;
for (i = 1 ; i < n ; i++) {
if (A[i] < A[imin])
imin = i;
if (A[i] > A[imax])
imax = i;
}
float x = A[imin];
A[imin] = A[imax];
A[imax] = x;
}
int charinstr(char c, char *s) {
int i = 0;
while (s[i] != '\0' && s[i] != c) i++;
return (s[i] == c);
}
int maxsubstr(char *s, char *sc) {
int i, len = 0, max = 0;
for (i = 0 ; s[i] != '\0' ; i++) {
if (charinstr(s[i], sc)) {
len++;
if (len > max) max = len;
} else
len = 0;
}
return max;
}
float maxR(int n, float M[n][n], int r) {
float max = M[r][0];
for (int i = 1 ; i < n ; i++)
if (M[r][i] > max) max = M[r][i];
return max;
}
float minC(int n, float M[n][n], int c) {
float min = M[0][c];
for (int i = 1 ; i < n ; i++)
if (M[i][c] < min) min = M[i][c];
return min;
}
int saddle(int n, float M[n][n]) {
int j = 0;
while (j < n && maxR(n, M, j) != minC(n, M, j))
j++;
if (j < n) return j;
else return -1;
}
#include <stdlib.h>
int *maxind(int V[], int n, int *nMax) {
int *ind = NULL;
*nMax = 0;
if (n > 0) {
int i, k, max = V[0];
for (i = 1 ; i < n ; i++)
if (V[i] > max) max = V[i];
for (i = 0 ; i < n ; i++)
if (V[i] == max) (*nMax)++;
ind = malloc((*nMax)*sizeof(int));
for (k = 0, i = 0 ; i < n ; i++)
if (V[i] == max) ind[k++] = i;
}
return ind;
}