Форум программистов, компьютерный форум CyberForum.ru

Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.59
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 16:15     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #1
Нужно написать это на СИ!

Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами:
1)сложения;
2)вычитания;
3)скалярного умножения векторов;
4)умножения вектора на число;
5)нахождение длины вектора.
Используя этот модуль, решить задачу. Дан массив A - массив векторов. Отсортировать его в порядке убывания длин векторов.

Добавлено через 31 минуту
Помогите пожалуйста написать этот модуль!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2011, 16:15     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами
Посмотрите здесь:

Программа для операций над битами C++
Реализовать в виде модуля набор подпрограмм для работы с многочленами C++
C++ Написать функции для выполнения операций над одномерным массивом целых чисел
C++ Напишите по одному оператору для выполнения следующих операций с одномерным массивом:
C++ Программа для выполнения указанных операций над матрицами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.06.2011, 16:22     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #2
векторы бывают 2-х, 3-х и многомерными, вам какие?
использовать при этом структуры?
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 16:24  [ТС]     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #3
Достаточно и двумерных векторов. Да, лучше использовать структуры.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.06.2011, 17:24     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <math.h>
 
struct Vector2D {
    float x;
    float y;
};
 
void Add(const struct Vector2D* l, const struct Vector2D* r, struct Vector2D* res)
{
    res->x = l->x + r->x;
    res->y = l->y + r->y;
}
 
void Sub(const struct Vector2D* l, const struct Vector2D* r, struct Vector2D* res)
{
    res->x = l->x - r->x;
    res->y = l->y - r->y;
}
 
void MulD(struct Vector2D* vec, float number)
{
    vec->x *= number;
    vec->y *= number;
}
 
float Length(const struct Vector2D* l)
{
    return sqrtf(l->x * l->x + l->y * l->y);
}
 
float MulS(const struct Vector2D* l, const struct Vector2D* r, float fi)
{
    return Length(l) * Length(r) * cos(fi);
}
 
int main()
{
    struct Vector2D a, b;
    a.x = 2.0f;
    a.y = b.x = 0.0f;
    b.y = 3.0f;
    MulD(&a, 3.0f);
    MulD(&b, 4.0f);
    struct Vector2D c; 
    Sub(&a, &b, &c);
    printf("Length of vector C = %f", Length(&c));
    getchar();
    return 0;
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
29.06.2011, 18:30     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #5

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <stdio.h>
#include <math.h>
 
 
struct vector {
   long x, y;
};
 
 
// сложение векторов
struct vector  add(struct vector* a, struct vector* b) {
    struct vector res;
    res.x = a->x + b->x;
    res.y = a->y + b->y;
    return res;
}
 
// вычитание векторов
struct vector  sub(struct vector* a, struct vector* b) {
    struct vector res;
    res.x = a->x - b->x;
    res.y = a->y - b->y;
    return res;
}
 
// скалярное произведение векторов
struct vector  scale(struct vector* a, struct vector* b) {
    struct vector res;
    res.x = a->x * b->x;
    res.y = a->y * b->y;
    return res;
}
 
// умножение вектора на число
struct vector  mul(struct vector* a,long N) {
    struct vector res;
    res.x = a->x * N;
    res.y = a->y * N;
    return res;
}
 
// длина вектора
long length(struct vector*  vec) {
    long result = sqrtl(powl(vec->x, 2) + powl(vec->y, 2));
    return result;
}
 
// сортировка векторов по длине, от большего к меньшему
void  sort(struct vector*  vec, struct vector*  end) {
     int id;
     struct vector* last;
     struct vector* first;
     struct vector  tmp;
 
     while(1) {
           id = 0;
           first = vec;
           last  = vec + 1;
           for( ; last != end; ++last, ++first) {
 
               if(length(first) < length(last)) {
                   tmp    = *first;
                   *first = *last;
                   *last  = tmp;
                   id |= 1;
               }
           }
           if(! id)
              break;
     }
}
 
 
 
 
int main(int argc, char* argv[])
{
     struct vector a = { 3, 5 };
     struct vector b = { 2, 3 };
     struct vector c;
 
     struct vector vec[5] = { { 2, -2 }, { 2, 4 }, { -5, 9 }, { 9, -7 }, { 2, 3 } };
 
     int i, size   = sizeof(vec) / sizeof(struct vector);
     sort(vec, vec + size);
     for(i = 0; i < size; i++)
            printf("|%d,%d|, ", vec[i].x, vec[i].y);
 
 
     c = add(&a, &b);
     printf("\n\nadd(%d, %d)\n", c.x, c.y);
 
     c = sub(&a, &b);
     printf("sub(%d, %d)\n", c.x, c.y);
 
     c = scale(&a, &b);
     printf("scale(%d, %d)\n", c.x, c.y);
 
     c = mul(&a, 4);
     printf("mul(%d, %d)\n", c.x, c.y);
 
     printf("a - %d, b - %d\n", length(&a), length(&b) );
 
 
     getchar();
     return 0;
}
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 19:08  [ТС]     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #6
Спасибо большое, в этом еще надо как следует разобраться мне... А как написать модуль? Ну то есть чтоб был заголовочный файл и файл реализации с расширениями .h и .c соответственно?
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 19:12     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #7
Protected_fleur,

Файл module.h
C
1
2
3
4
5
6
7
#ifndef _MODULE_H
#define _MODULE_H
 
//описание структуры вектора
//прототипы функций
 
#endif
module.c
C
1
2
3
4
//Подключайте необходимые библиотеки, в том числе
#include "module.h"
//Реализация функций
//описываете главную функция (main)
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.06.2011, 19:13     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #8
deleted
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 19:35     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #9
Protected_fleur, забыл написать, что реализацию функции main, нужно выделить в отдельный файл main.c

C
1
2
3
4
5
//подключаете библиотеки, в том числе "module.h"
int main()
{
    //какие-то действия над векторами..
}
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 19:38  [ТС]     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #10
Ну то есть у нас получается будет module.h, module.c и main.c ?
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 19:39     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #11
Protected_fleur, Верно.
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 20:50  [ТС]     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #12
res.x = a->x + b->x;
что это означает? именно a->x ? впервые вижу... нельзя по-другому это написать?
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 20:54     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #13
Protected_fleur, можно (*a).x ..
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
29.06.2011, 20:55     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #14
nameless, или всё-таки (*a).x?

Protected_fleur, а не лучше ли разобраться, что означает именно эта запись?
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 20:56     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #15
C
1
a->x
А означает это разыменование указателя и обращение к элементу структуры.
schdub
 Аватар для schdub
2903 / 1247 / 223
Регистрация: 19.01.2009
Сообщений: 3,219
Завершенные тесты: 1
29.06.2011, 20:56     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #16
Цитата Сообщение от nameless Посмотреть сообщение
(*a)->x
(*a).x

Добавлено через 13 секунд
Цитата Сообщение от nameless Посмотреть сообщение
(*a)->x
(*a).x
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 20:57     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #17
silent_1991, Ну да, описался слегка..) Спасибо, что поправили..
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
30.06.2011, 15:51  [ТС]     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #18
xAtom, я не могу разобраться в сортировке...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// сортировка векторов по длине, от большего к меньшему
void  sort(struct vector*  vec, struct vector*  end) {
     int id;
     struct vector* last;
     struct vector* first;
     struct vector  tmp;
 
     while(1) {
           id = 0;
           first = vec;
           last  = vec + 1;
           for( ; last != end; ++last, ++first) {
 
               if(length(first) < length(last)) {
                   tmp    = *first;
                   *first = *last;
                   *last  = tmp;
                   id |= 1;
               }
           }
           if(! id)
              break;
     }
}
Добавлено через 1 минуту
Цитата Сообщение от Protected_fleur Посмотреть сообщение
for( ; last != end; ++last, ++first)
почему в этой строчке перед ";" нет ничего???

Добавлено через 3 минуты
Цитата Сообщение от xAtom Посмотреть сообщение
size = sizeof(vec) / sizeof(struct vector);
еще вот эта строчка непонятна... объясните пожалуйста
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
30.06.2011, 20:17     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #19
Protected_fleur,
Цитата Сообщение от Protected_fleur Посмотреть сообщение
Добавлено через 1 минуту
Сообщение от Protected_fleur
for( ; last != end; ++last, ++first)
почему в этой строчке перед ";" нет ничего???
А что тут должно еще стоять?

Цитата Сообщение от Protected_fleur Посмотреть сообщение
id = 0;
first = vec;
last = vec + 1;
Данные переменные инициализированы непосредственно перед описанием цикла.. Все в порядке..


Цитата Сообщение от Protected_fleur Посмотреть сообщение
Добавлено через 3 минуты
Сообщение от xAtom
size = sizeof(vec) / sizeof(struct vector);
еще вот эта строчка непонятна... объясните пожалуйста
Вычисляем количество элементов в vec..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2011, 20:24     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами
Еще ссылки по теме:

Класс для выполнения арифметических операций над числами с учётом абсолютной и относительной погрешностей C++
Используя перегрузки, написать функцию для выполнения действий, для следующих типов данных: float, int, double C++
C++ Реализовать класс Строка (String) для хранения и выполнения операций над строкой

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
30.06.2011, 20:24  [ТС]     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами #20
не совсем понятно...просто я недавно с программированием столкнулась...и везде как бы встречала
например, for(i=1;i<n;i++) это к примеру...так вот меня и смутило...

Добавлено через 1 минуту
nameless, спасибо)))
Yandex
Объявления
30.06.2011, 20:24     Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами
Ответ Создать тему
Опции темы

Текущее время: 17:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru