Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
0 / 0 / 1
Регистрация: 29.06.2011
Сообщений: 77
1

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

29.06.2011, 16:15. Просмотров 3810. Ответов 19
Метки нет (Все метки)

Нужно написать это на СИ!

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

Добавлено через 31 минуту
Помогите пожалуйста написать этот модуль!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2011, 16:15
Ответы с готовыми решениями:

Реализовать в виде модуля набор подпрограмм для выполнения операций над обыкновенными дробями вида P/Q
Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над обыкновенными...

Реализовать в виде модуля набор подпрограмм для работы с многочленами
Реализовать в виде модуля набор подпрограмм для работы с многочленами от одной переменной (1й...

Реализовать класс Строка (String) для хранения и выполнения операций над строкой
Реализовать класс Строка (String) для хранения и выполнения операций над строкой. Строка должна...

Напишите по одному оператору для выполнения следующих операций с одномерным массивом:
Напишите по одному оператору для выполнения следующих операций с одномерным массивом: а) присвойте...

19
Каратель
Эксперт С++
6596 / 4017 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
29.06.2011, 16:22 2
векторы бывают 2-х, 3-х и многомерными, вам какие?
использовать при этом структуры?
0
0 / 0 / 1
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 16:24  [ТС] 3
Достаточно и двумерных векторов. Да, лучше использовать структуры.
0
Каратель
Эксперт С++
6596 / 4017 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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;
}
1
929 / 754 / 299
Регистрация: 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;
}
1
0 / 0 / 1
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 19:08  [ТС] 6
Спасибо большое, в этом еще надо как следует разобраться мне... А как написать модуль? Ну то есть чтоб был заголовочный файл и файл реализации с расширениями .h и .c соответственно?
0
Эксперт С++
340 / 304 / 36
Регистрация: 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)
2
Каратель
Эксперт С++
6596 / 4017 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
29.06.2011, 19:13 8
deleted
0
Эксперт С++
340 / 304 / 36
Регистрация: 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()
{
    //какие-то действия над векторами..
}
1
0 / 0 / 1
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 19:38  [ТС] 10
Ну то есть у нас получается будет module.h, module.c и main.c ?
0
Эксперт С++
340 / 304 / 36
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 19:39 11
Protected_fleur, Верно.
0
0 / 0 / 1
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 20:50  [ТС] 12
res.x = a->x + b->x;
что это означает? именно a->x ? впервые вижу... нельзя по-другому это написать?
0
Эксперт С++
340 / 304 / 36
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 20:54 13
Protected_fleur, можно (*a).x ..
0
Эксперт С++
5037 / 3097 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
29.06.2011, 20:55 14
nameless, или всё-таки (*a).x?

Protected_fleur, а не лучше ли разобраться, что означает именно эта запись?
0
Эксперт С++
340 / 304 / 36
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 20:56 15
C
1
a->x
А означает это разыменование указателя и обращение к элементу структуры.
0
Эксперт С++
3056 / 1398 / 421
Регистрация: 19.01.2009
Сообщений: 3,763
29.06.2011, 20:56 16
Цитата Сообщение от nameless Посмотреть сообщение
(*a)->x
(*a).x

Добавлено через 13 секунд
Цитата Сообщение от nameless Посмотреть сообщение
(*a)->x
(*a).x
0
Эксперт С++
340 / 304 / 36
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 20:57 17
silent_1991, Ну да, описался слегка..) Спасибо, что поправили..
0
0 / 0 / 1
Регистрация: 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);
еще вот эта строчка непонятна... объясните пожалуйста
0
Эксперт С++
340 / 304 / 36
Регистрация: 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..
0
0 / 0 / 1
Регистрация: 29.06.2011
Сообщений: 77
30.06.2011, 20:24  [ТС] 20
не совсем понятно...просто я недавно с программированием столкнулась...и везде как бы встречала
например, for(i=1;i<n;i++) это к примеру...так вот меня и смутило...

Добавлено через 1 минуту
nameless, спасибо)))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2011, 20:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Программа для выполнения указанных операций над матрицами
в общем нужна помощ написать прогу которая выполныет действия над матрицами 1)Сложение...

Написать функции для выполнения операций над одномерным массивом целых чисел
Написать функции для выполнения операций над одномерным массивом целых чисел: • определить среднее...

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

Реализовать в виде модуля набор подпрограмм для выполнения операций над векторами
Доброе время суток. Прошу помощи опытных людей. Задача на Паскале по теме &quot;Модули&quot; Реализовать в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.