Вопрос по С++

Ashtaret

Филаретовый пизироq
Код:
#include<stdio.h>
#include<math.h>

struct geron{
  int a;
  int b;
  int c;
};

float obh(struct geron *ptr){
  float p;
  p=(ptr->a + ptr->b + ptr->c)/2.0;
  return sqrt(p*(p-ptr->a)*(p-ptr->b)*(p-ptr->c));
}

int main(){
  struct geron s1,  s2={2,3,4}, *ptrs1=&s1, *ptrs2=&s2;
  scanf("%d%d%d",&s1.a,&s1.b,&s1.c);
  printf("s1=%2.2f, s2=%2.2f",obh(ptrs1),obh(ptrs2));
  return 0;
}
вроде так.

Можно исправить быстро твой код, там 2 ошибки:

1)
int / int = int.
нужно делать примерно так:

int / float = float;

2)формула Герона

у тебя формула немного другая..
все спасибо исправил
Код:
(*S).p=((*S).a+(*S).b+(*S).c)/2.0;
return sqrt((*S).p*((*S).p-(*S).a)*((*S).p-(*S).b)*((*S).p-(*S).c));
пашед
 

Pain+

New Member
Подскажите пожалуйста мне нужен массив 10000000001 елементов и больше, динамически пробовал, компилятор ругается, как еще можно создать?
или просто создать указатель и работать сним как с массивом в надежде что эти ячейки памяти не будут задейстованы?
 

TraNceR

Member
купи 10 гигов памяти и поставь 64тирех битную винду и молись :)
то число не помещается в 32 бита, плюс всеавно скорее всего прога упадет.
Скорее всего в зависимости от того что тебе нада самому чтото вроде свопа делать из большого файла.

но скорее всего ты чтото нето задумал :)
 

dreamer

Member
Подскажите пожалуйста мне нужен массив 10000000001 елементов и больше, динамически пробовал, компилятор ругается, как еще можно создать?
или просто создать указатель и работать сним как с массивом в надежде что эти ячейки памяти не будут задейстованы?
Работа с такими объемами данных требует специальных подходов, например . Если вам уж никак не обработать данные по частям то можно использовать набор массивов меньшего размера, динамически выделенных разумеется.
 

Пух

كنت بلهاء
Модератор
есть массив с 16ти элементов. Нужно заполнить его так, что бы было 12 нулей и 4 единицы. Единицы и нули должны быть в случайном порядке.

Код:
#include<stdio.h>
#include<stdlib.h>

void sl(int a[],int size,int q){
int i,j,k,flag;
 for (i=0;i<size;i++){
   a[i]=-1; 
     do{
	flag=0;
	k=random(q);
	    for (j=0;j<i;j++){
		if (k==a[j])
		   flag=1;
	     }
       }while(flag);
    a[i]=k;
  }
}

void main(){
  int a[16]={0},i, *p=NULL;
  randomize();
  p=(int*)malloc(4*sizeof(int));

  if (p==NULL){
    printf("ERROR");
    exit(1);
  }
  sl(p,4,16);

  for (i=0;i<4;i++)
     a[*(p+i)]=1;
  
  for (i=0;i<16;i++)
     printf("%d ",a[i]);
  
  free(p);
}
делал вот так. Функция sl генерирует массив размером size так, что в нем расположенные случайные числа в диапазоне [0;q) и эти числа не повторяются.
Я свой массив "а" заполняю изначально нулями, а потом в 4х случайных местах нули меняю на 1.
Вопрос: можно это сделать как-то красивей и короче?
 

TraNceR

Member
Код:
int a[16] = {0};
int num = 0;
while (num != 4)
{
       int n = rand()%16;
       if (a[n] == 1) continue;
       a[n]  = 1;
       num++;
}
если я верна понял)
код не проверял
 

dreamer

Member
есть массив с 16ти элементов. Нужно заполнить его так, что бы было 12 нулей и 4 единицы. Единицы и нули должны быть в случайном порядке.
Вопрос: можно это сделать как-то красивей и короче?
Лучше всего делать нужный массив и перемешивать:
Код:
алгоритм перемешивание массива:
    для каждого элемента массива кроме последнего:
        поменять местами текущий элемент и случайный, находящийся не перед текущим 

перемешать массив[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0]
надеюсь псевдокод разберете
 

Пух

كنت بلهاء
Модератор
Как "длинное" число поделить на "длинное" ? Напишите хотя бы алгоритм.
 

TraNceR

Member
Пух,
ето не тривиальный алгоритм, также столбиком делишь как и руками :)
 
Зверху