Помош: Средна Висина

Член од
9 декември 2010
Мислења
9
Поени од реакции
0
Потребен ми е кодот од следната задача:
Бројот на членови во еден клуб е N. Да се направи програма во која ќе се внесуваат висините на играчите во сантиметри. Внесените вредности може да се повторуваат. Интервалот на внесувани висини да биде помеѓу 150 и 200 сантиметри. Во случај на внес на висина надвор од овој интервал таа да не биде прифатена.
-Да се пресмета просечната висина.
-Да се издвојат оние вредности на висини кои варираат за +/- 10 сантиметри во однос на просечната висина.
-Да се издвојат оние вредности за висините кои варираат од 0 до + 15% во однос на минималната висина и од 0 до -20% во однос на максималната висина.
Се препорачува да се работи со функции
Резултатите да се тестираат со по 3 низи за висина и тежина кои ќе имаат ист бр. на елементи.
 
Член од
4 декември 2010
Мислења
18
Поени од реакции
4
Потребен ми е кодот од следната задача:
Бројот на членови во еден клуб е N. Да се направи програма во која ќе се внесуваат висините на играчите во сантиметри. Внесените вредности може да се повторуваат. Интервалот на внесувани висини да биде помеѓу 150 и 200 сантиметри. Во случај на внес на висина надвор од овој интервал таа да не биде прифатена.
-Да се пресмета просечната висина.
-Да се издвојат оние вредности на висини кои варираат за +/- 10 сантиметри во однос на просечната висина.
-Да се издвојат оние вредности за висините кои варираат од 0 до + 15% во однос на минималната висина и од 0 до -20% во однос на максималната висина.
Се препорачува да се работи со функции
Резултатите да се тестираат со по 3 низи за висина и тежина кои ќе имаат ист бр. на елементи.
Во кој јазик ?
 
Член од
4 декември 2010
Мислења
18
Поени од реакции
4
Еве код во Ц ако врши работа ок. Ако сака некој нека го преведе во Ц ++ оти јас незнам Ц++.

поздрав :)

Код:
#include <stdio.h>
#include <stdlib.h>
float prosek(float a[], int n);
int varira_plus(float n, float sredna);
int varira_minus(float n, float sredna);
void MaxMin(float a[], int n, float *max, float *min);
int varira_min(float n, float *min);
int varira_max(float n, float *max);
float procent20(float n);
float procent15(float n);

int main(int argc, char *argv[])
{
  int n,i,j = 0,k = 0,q = 0,p = 0;
  
  printf("Kolku igraci? ");
  scanf("%d",&n);
  float a[n],b[n],c[n],d[n],e[n];
  for (i = 0; i < n; i++){
      printf("Vnesete visina na %d - tiot igrac ",i+1);
      scanf("%f",&a[i]);
      if (a[i] < 150 || a[i] > 200){
         printf("Vnesete validna visina (150 - 200)\n ");
         i--;
         }
      printf("\n");
      }
  
  float max = *a,min = *a;
  MaxMin(a,n,&max,&min);
  printf("Prosekot e %.2f \n",prosek(a,n));
  
  for(i = 0; i < n; i++){
        if (varira_plus(*(a+i),prosek(a,n))){
           b[j] = *(a+i);
           j++;
           }
        else
            if (varira_minus(*(a+i),prosek(a,n))){
               c[k] = *(a+i);
               k++;
               }
        if (varira_min(*(a+i),&min)){
           d[q] = *(a+i);
           q++;
           }
        else
            if (varira_max(*(a+i),&max)){
               e[p] = *(a+i);
               p++;
               }
               }
  if (j){
  printf("Visini sto varirat do + 10 vo odnos na prosekot \n");
  for (i = 0; i < j; i++)
      printf("%d - %.2f \n",i+1,b[i]);
}
  if (k){
  printf("Visini sto variraat do - 10 vo odnos na prosekot \n");
  for (i = 0; i < k; i++)
      printf("%d - %.2f \n",i+1,c[i]);
}
  if (q){
  printf("Visini sto variraat od 0 do +15%% vo odnos na minimalnata visina se slednite : \n");
  for (i = 0; i < q; i++) 
      printf("%d - %.2f \n",i+1,d[i]);
}
  if (p){
  printf("Visini sto variraat od 0 do -20%% vo odnos na maximalnata visina se slednite : \n");
  for (i = 0; i < p; i++)
      printf("%d - %.2f \n",i+1,e[i]);
}
      
  
  
  printf("Max = %.2f , Min = %.2f \n",max,min);
  system("PAUSE");	
  return 0;
}

float prosek(float a[], int n){
    int i;
    float zbir = 0;
    for (i = 0 ; i < n; i++)
        zbir+=*(a+i);
    return zbir/n;
}

int varira_plus(float n, float sredna){
    if (n > sredna && n <= sredna + 10)
       return 1;
    else
        return 0;
}

int varira_minus(float n, float sredna){
    if (n < sredna && n >= sredna - 10)
       return 1;
    else
        return 0;
}

void MaxMin(float a[], int n, float *max, float *min){
      int i;
      *max = *a;
      *min = *a;
      for(i = 0; i < n; i++){    
            if (*max < *(a + i))
               *max = *(a + i);
            if (*min > *(a + i))
               *min = *(a + i);
               }
}
            
       
float procent15(float n){
      return (n * 15)/100;
      }
float procent20(float n){
      return (n * 20)/100;
      }
      
int varira_min(float n, float *min){
    if (n > *min && n <= (*min + procent15(*min)))
       return 1;
    else
        return 0;
}

int varira_max(float n, float *max){
    if (n < *max && n > *max - procent20(*max))
       return 1;
    else
        return 0;
}
 
Член од
9 декември 2010
Мислења
9
Поени од реакции
0
Еве код во Ц ако врши работа ок. Ако сака некој нека го преведе во Ц ++ оти јас незнам Ц++.

поздрав :)

Код:
#include <stdio.h>
#include <stdlib.h>
float prosek(float a[], int n);
int varira_plus(float n, float sredna);
int varira_minus(float n, float sredna);
void MaxMin(float a[], int n, float *max, float *min);
int varira_min(float n, float *min);
int varira_max(float n, float *max);
float procent20(float n);
float procent15(float n);

int main(int argc, char *argv[])
{
  int n,i,j = 0,k = 0,q = 0,p = 0;
  
  printf("Kolku igraci? ");
  scanf("%d",&n);
  float a[n],b[n],c[n],d[n],e[n];
  for (i = 0; i < n; i++){
      printf("Vnesete visina na %d - tiot igrac ",i+1);
      scanf("%f",&a[i]);
      if (a[i] < 150 || a[i] > 200){
         printf("Vnesete validna visina (150 - 200)\n ");
         i--;
         }
      printf("\n");
      }
  
  float max = *a,min = *a;
  MaxMin(a,n,&max,&min);
  printf("Prosekot e %.2f \n",prosek(a,n));
  
  for(i = 0; i < n; i++){
        if (varira_plus(*(a+i),prosek(a,n))){
           b[j] = *(a+i);
           j++;
           }
        else
            if (varira_minus(*(a+i),prosek(a,n))){
               c[k] = *(a+i);
               k++;
               }
        if (varira_min(*(a+i),&min)){
           d[q] = *(a+i);
           q++;
           }
        else
            if (varira_max(*(a+i),&max)){
               e[p] = *(a+i);
               p++;
               }
               }
  if (j){
  printf("Visini sto varirat do + 10 vo odnos na prosekot \n");
  for (i = 0; i < j; i++)
      printf("%d - %.2f \n",i+1,b[i]);
}
  if (k){
  printf("Visini sto variraat do - 10 vo odnos na prosekot \n");
  for (i = 0; i < k; i++)
      printf("%d - %.2f \n",i+1,c[i]);
}
  if (q){
  printf("Visini sto variraat od 0 do +15%% vo odnos na minimalnata visina se slednite : \n");
  for (i = 0; i < q; i++) 
      printf("%d - %.2f \n",i+1,d[i]);
}
  if (p){
  printf("Visini sto variraat od 0 do -20%% vo odnos na maximalnata visina se slednite : \n");
  for (i = 0; i < p; i++)
      printf("%d - %.2f \n",i+1,e[i]);
}
      
  
  
  printf("Max = %.2f , Min = %.2f \n",max,min);
  system("PAUSE");	
  return 0;
}

float prosek(float a[], int n){
    int i;
    float zbir = 0;
    for (i = 0 ; i < n; i++)
        zbir+=*(a+i);
    return zbir/n;
}

int varira_plus(float n, float sredna){
    if (n > sredna && n <= sredna + 10)
       return 1;
    else
        return 0;
}

int varira_minus(float n, float sredna){
    if (n < sredna && n >= sredna - 10)
       return 1;
    else
        return 0;
}

void MaxMin(float a[], int n, float *max, float *min){
      int i;
      *max = *a;
      *min = *a;
      for(i = 0; i < n; i++){    
            if (*max < *(a + i))
               *max = *(a + i);
            if (*min > *(a + i))
               *min = *(a + i);
               }
}
            
       
float procent15(float n){
      return (n * 15)/100;
      }
float procent20(float n){
      return (n * 20)/100;
      }
      
int varira_min(float n, float *min){
    if (n > *min && n <= (*min + procent15(*min)))
       return 1;
    else
        return 0;
}

int varira_max(float n, float *max){
    if (n < *max && n > *max - procent20(*max))
       return 1;
    else
        return 0;
}
Џими дали може да ми дадеш опис на кодот?
Благодарам!
 
Член од
4 декември 2010
Мислења
18
Поени од реакции
4
Џими дали може да ми дадеш опис на кодот?
Благодарам!
Код:
float prosek(float a[], int n);
int varira_plus(float n, float sredna);
int varira_minus(float n, float sredna);
void MaxMin(float a[], int n, float *max, float *min);
int varira_min(float n, float *min);
int varira_max(float n, float *max);
float procent20(float n);
float procent15(float n);
Дефинираме прототипови на функции коишто подоцна долу после главната функција се напишани целосно.

Код:
int main(int argc, char *argv[])
{
  int n,i,j = 0,k = 0,q = 0,p = 0;
  
  printf("Kolku igraci? ");
  scanf("%d",&n);
  float a[n],b[n],c[n],d[n],e[n];
Почнуваме со главната функција. Дефинираме неколку променливи кои подоцна ке ни се потребни. Внесуваме број на играчи во n. Дефинираме низи од по n елементи кои подоцна ке ги наполниме.

Код:
for (i = 0; i < n; i++){
      printf("Vnesete visina na %d - tiot igrac ",i+1);
      scanf("%f",&a[i]);
      if (a[i] < 150 || a[i] > 200){
         printf("Vnesete validna visina (150 - 200)\n ");
         i--;
         }
      printf("\n");
      }
Со овој дел се полни низата со висините на играчите, и се проверува дали внесената висина е од 150 до 200.

Код:
float max = *a,min = *a;
Дефинираме променливи од типот интеџер кои што на почетокот ја добиваат вредноста на првиот елемент од низата а

Код:
MaxMin(a,n,&max,&min);
Овде ја повикуваме функцијата за наоѓање на максималниот и минималниот елемент во низата а. Функцијата е дефинирана подолу којашто подоцна ке ја разгледаме.

Код:
 if (varira_plus(*(a+i),prosek(a,n))){
           b[j] = *(a+i);
           j++;
           }
Овој дел од кодот поставен во фор циклус секој елемент го испитува дали варира за плус 10 во однос на просекот.
Ако некој елемент го исполнува условот тогаш се внесува во низата b и се зголемува бројачот j за внесување на следниот елемент. Функциите varira_plus и prosek се подолу напишани и ке бидат објаснети подоцна.

Код:
else
            if (varira_minus(*(a+i),prosek(a,n))){
               c[k] = *(a+i);
               k++;
               }
Ако не варира во +10 тогаш испитуваме дали варира во -10 во однос на просекоти го внесуваме во низата C

Код:
if (varira_min(*(a+i),&min)){
           d[q] = *(a+i);
           q++;
           }
Исто како претходно испитуваме дали варира за +15 % во однос на мин, но со повикување на функцијата varira_min

Код:
else
            if (varira_max(*(a+i),&max)){
               e[p] = *(a+i);
               p++;
               }
Ако не варира во однос на минимум тогаш проверуваме дали варира во однос на максимум за -20%.

Код:
 if (j){
  printf("Visini sto varirat do + 10 vo odnos na prosekot \n");
  for (i = 0; i < j; i++)
      printf("%d - %.2f \n",i+1,b[i]);
}
Ако j != 0 тоа значи дека имаме висини коишто варираат во однос на просекот за +10 и ги печатиме сите елементи од низата. Соодветно и подолу за останатите услови ги печатиме соодветните низи.


Завршивме со главната програма сега следува да ги објасниме функциите што ги користевме.

Код:
float prosek(float a[], int n){
    int i;
    float zbir = 0;
    for (i = 0 ; i < n; i++)
        zbir+=*(a+i);
    return zbir/n;
}
Оваа функција ни пресметува просек на низата а кој што има n елементи. Внатре во функцијата дефинираме променлина i што ја користиме за поминување низ целата низа, имаме дефинирано и променлива збир каде што се сместува збирот на елементите во низата. И на крај ја
враќаме вредноста zbir/n што ни дава просек.

Код:
int varira_plus(float n, float sredna){
    if (n > sredna && n <= sredna + 10)
       return 1;
    else
        return 0;
}
Оваа функција прима вредност n и споредува дали варира за +10 во однос на просекот. Ако ми е исполнет условот if (n > sredna && n <= sredna + 10) тоа значи дека вредноста варира и функцијата ке ми врати вредност 1, ако не е исполнет условот ке ми врати 0

Код:
int varira_minus(float n, float sredna){
    if (n < sredna && n >= sredna - 10)
       return 1;
    else
        return 0;
}
Слично како и претходната функција оваа функција ми враќа вредност 0 или 1 соодветно дали е исполнет условот. Разликата е во условот имаме -10 и знаците за > i < сe обратно

Код:
void MaxMin(float a[], int n, float *max, float *min){
      int i;
      *max = *a;
      *min = *a;
      for(i = 0; i < n; i++){    
            if (*max < *(a + i))
               *max = *(a + i);
            if (*min > *(a + i))
               *min = *(a + i);
               }
}
Ова е void функција која прима вредности, но не ми враќа туку само се извршува. Овде работиме со покажувачи, кога повикуваме функција со покажувач тоа значи дека работиме директко со вредноста на местото каде што покажува покажувачот, а не со копија како претходно што имавме во погорните функции. На почеток на вредноста каде што покажуват max и min им ја доделуваме вредноста на првиот елемент од низата. Потоа со фор циклус секој елемент од низата а го споредуваме дали е поголем од вредноста на max, ако е исполнет условот тогаш на местото каде што покажува max се доделува вредноста од поголемиот елемент. Соодветно и зa min.

Код:
float procent15(float n){
      return (n * 15)/100;
      }
float procent20(float n){
      return (n * 20)/100;
      }
Ови се 2 едноставни функции коишто ми враќаат 15 и 20 проценти од некој број n.

Код:
int varira_min(float n, float *min){
    if (n > *min && n <= (*min + procent15(*min)))
       return 1;
    else
        return 0;
}
Со оваа функција проверуваме дали бројот варира во однос на минимум за + 15 %. Значи ако условот ми е исполнет враќа 1 а ако не е 0

Код:
int varira_max(float n, float *max){
    if (n < *max && n > *max - procent20(*max))
       return 1;
    else
        return 0;
}
Исто и оваа функција дава резултат 0 или 1 во зависност од условот.


Ова беше објаснување набрзина, ако нешто конкретно има нејасно во задачата слободно прашај. поздрав :)
 
Член од
9 декември 2010
Мислења
9
Поени од реакции
0
Благодарам Џими!
Мислам дека немам сега нешто нејасно.
Поздрав
 

Kajgana Shop

На врв Bottom