Salve, approfitto di questo topic per presentarmi, sono Andrea ho 19 anni e attualmente studio informatica.
Tra qualche giorno ho programmazione e ammetto di averlo sottovalutato un pò troppo visto che avevo conoscenze (arrugginite tra l'altro, sul c++)
Sfogliando il libro ho notato un esercizio vi posto la traccia.
Sia dato un vettore A di interi di lunghezza L ed un intero n<L con L multiplo di n. Scrivere una funzione che restituisca TRUE se la media dei valori di ogni n-upla coincide con in minimo dell'n-upla successiva.
Esempio: L=16; n=4
A=|4|28|10|18||42|36|15|31||50|31|60|63||70|51|77| 82||
L'output sarà true.
Questo è quello che son riuscito a stendere al momento, però qualunque valore metta mi dà sempre TRUE, problema credo di averlo capito.. in pratica nn mi và al blocco successivo, dovrei mettere un istruzione a fine for del main del tipo n=n*k; solo che al primo ciclo k=0 e quindi mi crasha.. idee? ecco il codice.
codice:
#include <stdio.h>
void leggi(int A[],int l);
int media(int A[],int n,int k);
int minimo(int A[],int n,int k);
int main()
{
int l,n,k,b,m,minim;
printf("Quanto deve essere lungo l'array?\n");
scanf("%d",&l);
int A[l];
do
{
printf("Inserire n\n");
scanf("%d",&n);
}while(l%n!=0||l<=n);
leggi(A,l);
for (k=0;l>k+1;k++)
{
m=media(A,n,k);
minim=minimo(A,n,k);
if (m==minim)
b=1;
else
b=0;
}
if (b=0)
printf("FALSE");
else
printf("TRUE");
scanf("%d",&l);
return 0;
}
void leggi(int A[],int l)
{
int i;
for (i=0;i<l;i++)
{
printf("Inserisci il valore della cella [%d]:\n",i);
scanf("%d",&A[i]);
}
}
int media(int A[],int n,int k)
{
int s=0,m=0,i=k,j;
for(j=0;j<n;j++)
{
s=s+A[i];
i++;
k++;
}
m=s/n;
return m;
}
int minimo(int A[],int n,int k)
{
int minim,j,i=k;
minim=A[k];
for(j=0;j<n;j++)
{
if (minim>A[i])
minim=A[i];
i++;
}
return minim;
}