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

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

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

Студворк — интернет-сервис помощи студентам
Нужно написать это на СИ!

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

Добавлено через 31 минуту
Помогите пожалуйста написать этот модуль!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.06.2011, 16:15
Ответы с готовыми решениями:

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

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

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

19
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
29.06.2011, 16:22
векторы бывают 2-х, 3-х и многомерными, вам какие?
использовать при этом структуры?
0
0 / 0 / 1
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 16:24  [ТС]
Достаточно и двумерных векторов. Да, лучше использовать структуры.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
29.06.2011, 17:24
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
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
29.06.2011, 18:30

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  [ТС]
Спасибо большое, в этом еще надо как следует разобраться мне... А как написать модуль? Ну то есть чтоб был заголовочный файл и файл реализации с расширениями .h и .c соответственно?
0
Эксперт С++
 Аватар для nameless
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 19:12
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
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
29.06.2011, 19:13
deleted
0
Эксперт С++
 Аватар для nameless
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 19:35
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  [ТС]
Ну то есть у нас получается будет module.h, module.c и main.c ?
0
Эксперт С++
 Аватар для nameless
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 19:39
Protected_fleur, Верно.
0
0 / 0 / 1
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 20:50  [ТС]
res.x = a->x + b->x;
что это означает? именно a->x ? впервые вижу... нельзя по-другому это написать?
0
Эксперт С++
 Аватар для nameless
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 20:54
Protected_fleur, можно (*a).x ..
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
29.06.2011, 20:55
nameless, или всё-таки (*a).x?

Protected_fleur, а не лучше ли разобраться, что означает именно эта запись?
0
Эксперт С++
 Аватар для nameless
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 20:56
C
1
a->x
А означает это разыменование указателя и обращение к элементу структуры.
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
29.06.2011, 20:56
Цитата Сообщение от nameless Посмотреть сообщение
(*a)->x
(*a).x

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

Добавлено через 1 минуту
nameless, спасибо)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.06.2011, 20:24
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru