Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2009, 23:40   #1
PbIska
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 17
По умолчанию Дробные на полусумму

(СИ) Заданы одномерные массивы А(N),B(M),C(L) для каждого из них:
a) вычислить полусумму положительных элементов;
б) дробные элементы умножить на полусумму. подсчитать число преобразованных элементов.
Код:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>

float *mem(char a, int kol);
float summapol(float *mas, int kolvo);
void ymnnasumpol(float *mas,int k, float Spol);
main()
{
  int N,M,L;
  float SpolX=0,SpolY=0,SpolZ=0,Spol;
  float *X=NULL, *Y=NULL, *Z=NULL ;
  clrscr();
  printf("vvedite N,M,L:\n");
  scanf ("%d,%d,%d", &N,&M,&L);
  if ((X=mem ('X',N))!=NULL)
  {
   SpolX=summapol(X,N);
   ymnnasumpol(X,N,SpolX);
   getch();
   free(X);
  }
  if ((Y=mem ('Y',M))!=NULL)
      {
      SpolY=summapol(Y,M);
      ymnnasumpol(Y,M,SpolY);
      getch();
      free(Y);
     }
  if ((Z=mem ('Z',L))!=NULL)
     {
      SpolZ=summapol(Z,L);
      ymnnasumpol(Z,L,SpolZ);
      getch();
      free(Z);
    }
   }

float *mem(char a, int kol)
{int k;
  float *mas=NULL;

  if ((mas=(float*)malloc(kol*sizeof(float)))==NULL)
     printf("net svobodnoi pamayti dlay massiva %C!n",a);
  else
  {  printf("vvedite elementi massiva %c\n",a);
      for (k=0;k<kol;k++)
  {printf("%c[%d]=",a,k);
   scanf("%f",mas+k);
  }
  }
  return mas;
  }


 float summapol(float *mas, int kolvo)
 {int c;
  float S,Spol;
 for (c=0;c<kolvo;c++)
 if (*(mas+c)>0)
 {
  S+=*(mas+c);
  Spol=S/2;
 }
 if (Spol==0) printf("\n pologitelnix elementov net");
    else
    printf("summa pologitelnix elementov=%5.2f\n",Spol);
 return Spol;
 }

 void ymnnasumpol(float *mas,int k,float Spol)
 { int t,kol=0;
  double *ptr=NULL;

   for (t=0;t<k;t++)
      { if (modf(*(mas+t),ptr)!=0)
       {*(mas+t)*=Spol;
       kol++;
       }
       }
       if (kol==0) printf("net drobnix elementov");
       else printf("kol=%d\n",kol);
   for (t=0;t<k;t++)
       printf("%5.2f\t",*(mas+t));
       printf("\n");
       }
вроде все ок, но когдаполусумма=0, а дробный элемент в массиве равен -1,5 он выводит -0.00
PbIska вне форума Ответить с цитированием
Старый 19.05.2009, 19:13   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Код:
 void ymnnasumpol(float *mas,int k,float Spol)
 { int t,kol=0;
  float ptr;

   for (t=0;t<k;t++)
      { if (modf(*(mas+t),&ptr)!=0)
       {*(mas+t)*=Spol;
       kol++;
       }
       }
       if (kol==0) printf("net drobnix elementov");
       else printf("kol=%d\n",kol);
   for (t=0;t<k;t++)
       printf("%5.2f\t",*(mas+t));
       printf("\n");
       }
counter вне форума Ответить с цитированием
Старый 20.05.2009, 00:09   #3
PbIska
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 17
По умолчанию

не вышло....
PbIska вне форума Ответить с цитированием
Старый 20.05.2009, 00:24   #4
PbIska
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 17
По умолчанию

HEEEEEEEEEEEEEEEEEEEEELP
PbIska вне форума Ответить с цитированием
Старый 20.05.2009, 17:40   #5
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
вроде все ок, но когдаполусумма=0, а дробный элемент в массиве равен -1,5 он выводит -0.00
а вы про функцию modf читали? она возвращает значение дробной части со знаком аргумента, так что может быть и из-за этого
counter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дробные в DBGrid Veiron Общие вопросы Delphi 4 22.12.2008 16:53
Дробные числа EAAlien Общие вопросы Delphi 8 13.05.2008 19:09
подскажите какая процедура округляет дробные числа , а не откидывает дробную часть, к ***СкаЙ*** Помощь студентам 5 13.06.2007 16:03