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

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

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2020, 14:07   #1
lisua
Новичок
Джуниор
 
Регистрация: 27.01.2020
Сообщений: 1
По умолчанию Сложение векторов на интервале

Требовалось создать 1) структуру векторов и массив который будет хранить N кол-во (x,y) A[1000000],
2)50000 запросов с различными интервалами (a,b)
Реализовать 2 функции 1) Простая, 2) Сложная с пред расчетом (сложность О(1)) которая бы вычисляла сумму векторов на интервале (a,b) и результаты выводила в текстовый файл.

Получился такой код, но что простая функция, что сложная выдает в ответе только нули.
Не понимаю где может быть ошибка, или чего не хватает в коде.
Заранее спасибо за помощь!
Код:
#include <stdio.h>
#include <math.h>
#include<stdlib.h>
 
 
 
int const N=1000000;
int const n=50000;
int x,y;
int a,b;
int B[N];
int C[N];
 
struct vec 
{
    int x,y;
 
};
    vec A[1000000];
 
    vec simple(int a,int b) {
        vec res;
        int stopx=0;
        int stopy=0;
        for (int i=a;i<=b ;++i){
            stopx=stopx+A[i].x;
            
        }
        for (int i =a;i<=b ;++i){
        stopy=stopy+A[i].y;
        }
        res.x=stopx;
        res.y=stopy;
 
        return res;
        
            
    }
    void hard(int *B,int *C){
  
    B[0]=0;
    C[0]=0;
    for (int i=1;i<=N;++i) {
 
    B[i]=B[i-1]+A[i-1].x;
    C[i]=C[i-1]+A[i-1].y;
        
    }
    }
    vec result (int *B,int *C, int a, int b)
    {
     vec res1;
     int resultx=0;
     int resulty=0;
     
    
    for (int i=a;i<=b;++i)
    {
        resultx=B[i+1]-B[b];
        resulty=C[i+1]-C[b];
    }
 
    res1.x=resultx;
    res1.y=resulty;
 
    return res1;
    }
 int main()
{
    
    for (int i=0; i<=N-1;++i)
    {
 
    A[i].x=rand()%N;
    A[i].y=rand()%N;
    
    }
    
for (int i=0;i<=n;++i)// генерация a и b для запросов
    
{       
    a=rand()%50000;
    b=rand()%50000;
        
        }
 
 
 
   FILE *pFile;
  pFile = fopen("C:\\Users\\Student\\Desktop\\ab.txt", "w");
  for (int i=0;i<=n; i++){
 
 
      vec z=simple(a,b); 
      vec u=result(B,C,a,b);
 
 
  fprintf(pFile,"simple method x=%d y=%d hard method x1=%d y1=%d\n ",z.x,z.y,u.x,u.y);
} 
 
 fclose(pFile);
 
 
 }

Последний раз редактировалось lisua; 27.01.2020 в 14:13.
lisua вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти базис системы векторов и координаты все векторов в найденном базисе - Александр121 Помощь студентам 1 05.01.2018 12:49
Сложение и умножение векторов Zaraaa Помощь студентам 0 09.04.2014 16:34
Сложение двух векторов Shkolota Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 14.05.2013 22:02
Ввод векторов и матриц, умножение матрицы на вектор и вычисление скалярного призведения двух векторов zverushka Помощь студентам 18 20.02.2009 15:25