Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
#1

Структур комплексных чисел - C++

09.09.2010, 09:18. Просмотров 2637. Ответов 37
Метки нет (Все метки)

Задание: Организовать структуру комплексных чисел и для неё реализовать операции: +, -, *, /, и нахождение сопряженного числа. Результат вывести на экран. Для демонстрации работы функции сделать меню с возможностью выбора. (это я думаю про знаки операции)

вот что у меня выходит по тексту, проблема в том что, сначала компилируется все норм, и даж выводит первый запрос, потом все глючит, выдается ошибка по переменным - a, f, k - вот что с ними можно сделать я и не могу понять, объясните пж.
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
#include "stdafx.h" 
#include "string.h"
#include "stdio.h"
#include "locale.h"
#include "iostream"
#include "conio.h"
using namespace std;
 
struct KOMPLEX
        {
            float Re;
            float Im;   
        };
 
int _tmain()
{
setlocale (LC_ALL, "Russian");
KOMPLEX a, f, k;
char w;
    printf ("Введите действительную чать 1ого числа \n");
    scanf_s("%f", a.Re);         
    printf ("Введите мнимую чать 1ого числа \n");
    scanf_s("%f", a.Im);    
 
    printf ("Введите действительную чать 2ого числа \n");
    scanf_s("%f", f.Re);        
    printf ("Введите мнимую чать 2ого числа \n");
    scanf_s("%f", f.Im);
 
    printf ("Введите знак действи который хотите совершить -, +, *, /  или  s -  что будет означать что вам необходимо найти сопряженное  для 1ого комплексного числа \n");
    scanf_s ("%s", w);
 
    switch (w)
    {
    case '-': k.Re = a.Re - f.Re;
              k.Im = a.Im - f.Im;
              break;
    case '+': k.Re = a.Re + f.Re;
              k.Im = a.Im + f.Im; 
              break;
    case '*': k.Re = a.Re * f.Re - a.Im * f.Im;
              k.Im = a.Re * f.Im + a.Im * f.Re; 
              break;
    case '/': k.Re = (a.Re * f.Re + a.Im * f.Im)/(f.Re * f.Re + f.Im * f.Im);
              k.Im = (a.Im * f.Re - a.Re * f.Im)/(f.Re * f.Re + f.Im * f.Im); 
              break;
    case 's': k.Re = a.Re;
              k.Im = -a.Im; 
              break;
    };
 
printf (" Ответ");
scanf_s ("%f", k.Re+k.Im);
 
 
_getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2010, 09:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Структур комплексных чисел (C++):

Умножение комплексных чисел - C++
у меня имеется прога, по решению данной задачи, с помощью структуры struct complex { int re; int img; } a, b; ...

Класс комплексных чисел - C++
Ребят, помогите пожалуйста написать класс комплексных чисел... Я плохо разбираюсь в объектно-ориентированном программировании, учусь,...

Калькулятор комплексных чисел - C++
Помогите пожалуйста с задачей. Выполнить структурную декомпозицию, разработать структурную схему и алгоритмы программ. Реализовать на...

Структура комплексных чисел - C++
Задание такое: создать структуру комплексных чисел для записи комплексных чисел. Реализовать арифметические операции с комплексными...

Класс комплексных чисел - C++
Помогите пожалуйста реализовать (без использования <complex>) класс комплексных чисел с простейшими операциями и ВЫВЕСТИ результат на...

Класс комплексных чисел - C++
Нужно создать программу (два класса) Класс комплексных чисел Базовый класс (мнимых чисел): Конструкторы: по умолчавнию, с параметрами...

37
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 16:23  [ТС] #16
Цитата Сообщение от silent_1991 Посмотреть сообщение

White Luna,
Тогда к вам то же вопрос. Выводить результат надо так:
C
1
printf ("%lf + %lf\n", k.Re, k.Im);
погоди а почему lf ведь % при float помойму просто f
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.09.2010, 16:25 #17
White Luna,
А, ну да, я просто всегда double использую, поэтому по привычке lf написал, но суть-то не в этом.
0
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 16:28  [ТС] #18
silent_1991, я не знаю, у ми пока до туда не доходит он у ми заедает, так скажем на строчке
C++
1
 scanf_s ("%*c%c", &w);
после того, как ввели знак действия, прога вылетает и покрайней мере какая то зеленая стрелка указывает на эту строчку
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.09.2010, 16:30 #19
White Luna,
Для проверки попробуйте убрать %*c
0
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 16:35  [ТС] #20
Цитата Сообщение от silent_1991 Посмотреть сообщение
White Luna,
Для проверки попробуйте убрать %*c
уже, убрала и вместо "%*c%c" поставила "%s" прога прошла дальше терь ему не нравиться как у ми ответ выводится, пишет слово ответ иглохнет
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
09.09.2010, 16:39 #21
Цитата Сообщение от silent_1991 Посмотреть сообщение
я просто всегда double использую, поэтому по привычке lf написал
Я Вас удивлю, но и для вывода double модификатор l не нужен. При выводе long double используется %Lf.
Цитата Сообщение от silent_1991 Посмотреть сообщение
Для проверки попробуйте убрать %*c
Тогда вместо знака будет '\n' в переменную попадать. Можно вот так например сделать:
C
1
2
fflush(stdin);
scanf("%c", &w);
проверял - тоже работает. Но по-моему беда не в этом. Скопируйте из редактора весь текст и сюда выложите...
1
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.09.2010, 16:43 #22
easybudda,
Я Вас удивлю, но и для вывода double модификатор l не нужен
Хм... меня как научили на первом курсе писать lf, всегда этому следовал... И теперь, боюсь, уже не переучусь...

На счёт %*c, как выяснилось, именно это место компилятору и не понравилось...
1
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
09.09.2010, 17:03 #23
White Luna, да, кстати... Если используете русскую локаль, отделяйте в числах дробную часть запятой, а не точкой!

Добавлено через 10 минут
Цитата Сообщение от silent_1991 Посмотреть сообщение
меня как научили на первом курсе писать lf, всегда этому следовал...
Modifier a, A, e, E, f, F, g, G
l (ell) double (ignored, same behavior as without it)
L long double
man 3 printf
Цитата Сообщение от silent_1991 Посмотреть сообщение
На счёт %*c, как выяснилось, именно это место компилятору и не понравилось...
CONVERSIONS
Following the % character introducing a conversion there may be a number
of flag characters, as follows:

* Suppresses assignment. The conversion that follows occurs as
usual, but no pointer is used; the result of the conversion is
simply discarded.
man 3 scanf
у меня "%*c" прекрасно отработало, да и довольно давно так делаю - без проблем...

Добавлено через 9 минут
Цитата Сообщение от White Luna Посмотреть сообщение
"%s" прога прошла дальше терь ему не нравиться как у ми ответ выводится, пишет слово ответ иглохнет
Правильно - у Вас w объявлена как переменная типа char, а Вы туда строку запихнуть пытаетесь. То есть в ячейку памяти, находящуюся после w пишется '\0', вот отсюда и проблема. Попробуйте fflush() использовать (выше показал, как).
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.09.2010, 17:07 #24
easybudda,
Мне тоже так кажется, у меня в RAD studio всё работает...
0
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 17:33  [ТС] #25
Вот полный текст проги, вот тока после строчк вывода выходит окно Run-Time Check Failure #3 - The variable 'k' is deing used without deing initialized.
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
#include "stdafx.h"
#include "tchar.h"
#include "string.h"
#include "stdio.h"
#include "locale.h"
#include "iostream"
#include "conio.h"
using namespace std;
 
struct KOMPLEX
        {
            float Re;
            float Im;   
        };
 
int _tmain()
{
setlocale (LC_ALL, "Russian");
KOMPLEX a, f, k;
char w;
    printf ("Введите действительную чать 1ого числа \n");
    scanf_s("%f", &a.Re);        
    printf ("Введите мнимую чать 1ого числа \n");
    scanf_s("%f", &a.Im);   
 
    printf ("Введите действительную чать 2ого числа \n");
    scanf_s("%f", &f.Re);       
    printf ("Введите мнимую чать 2ого числа \n");
    scanf_s("%f", &f.Im);
 
    fflush(stdin);
    printf ("Введите знак действи который хотите совершить -, +, *, /  или  s -  что будет означать что вам необходимо найти сопряженное  для 1ого комплексного числа \n");
    scanf_s ("%c", &w);  // конструкция %*c, "проглатывает" символ '\n', который в потоке после предыдущего ввода остался,
                            // %с - считывает 1 символ и помещает его в переменную w;
 
    switch (w)
    {
    case '-': k.Re = a.Re - f.Re;
              k.Im = a.Im - f.Im;
              break;
    case '+': k.Re = a.Re + f.Re;
              k.Im = a.Im + f.Im; 
              break;
    case '*': k.Re = a.Re * f.Re - a.Im * f.Im;
              k.Im = a.Re * f.Im + a.Im * f.Re; 
              break;
    case '/': k.Re = (a.Re * f.Re + a.Im * f.Im)/(f.Re * f.Re + f.Im * f.Im);
              k.Im = (a.Im * f.Re - a.Re * f.Im)/(f.Re * f.Re + f.Im * f.Im); 
              break;
    case 's': k.Re = a.Re;
              k.Im = -a.Im; 
              break;
    };
 
printf (" Ответ");
 
 scanf_s ("%f + %f \n", k.Re, k.Im);
 
 
_getch();
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от easybudda Посмотреть сообщение
White Luna Попробуйте fflush() использовать (выше показал, как).
попробовала тоже самое

Добавлено через 15 минут
easybudda, мож выложить свой вариант проги еще раз, а то не понимаю почему у меня не считает, точнее не выводит результат
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
09.09.2010, 17:38 #26
Цитата Сообщение от White Luna Посмотреть сообщение
scanf_s ("%f + %f \n", k.Re, k.Im);
это... тут же ответ выводиться должен...
C++
1
printf("%f + %f \n", k.Re, k.Im);
0
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 17:41  [ТС] #27
Цитата Сообщение от easybudda Посмотреть сообщение
это... тут же ответ выводиться должен...
C++
1
printf("%f + %f \n", k.Re, k.Im);
это то верно но у меня выводит тока то что перед этим Ответ и дальше прога глючит и выходит окошко вот с этим текстом Run-Time Check Failure #3 - The variable 'k' is deing used without deing initialized.
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.09.2010, 17:44 #28
White Luna,
А теперь ещё разок и помедленнее... Почему вы пишите scanf_s там, где должна быть printf?
0
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 17:46  [ТС] #29
Цитата Сообщение от silent_1991 Посмотреть сообщение
White Luna,
А теперь ещё разок и помедленнее... Почему вы пишите scanf_s там, где должна быть printf?
там scanf_s , просто описались наверно когда тут писали, просто чутьь выше последний вариант проги посмотри
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
09.09.2010, 17:47 #30
Цитата Сообщение от White Luna Посмотреть сообщение
это то верно но у меня выводит тока то что перед этим Ответ и дальше прога глючит и выходит окошко вот с этим текстом
Так Вы после слова "Ответ" scanf_s на printf поменяйте - вот я так сделал и всё работает!
Структур комплексных чисел
0
09.09.2010, 17:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2010, 17:47
Привет! Вот еще темы с ответами:

Деление комплексных чисел - C++
Запуталась с делением комплексных чисел. Помогите пожалуйста. struct complex { double a; double b; }A,B,C; void...

Класс комплексных чисел - C++
Сейчас начал изучение классов. Придумал себе задачку: написать класс комплексных чисел. Пока планирую так: PRIVATE: - переменные: ...

Калькулятор комплексных чисел - C++
помогите пожалуйста с курсовиком по информатике...

Сложение комплексных чисел - C++
Необходимо ввести с клавиатуры 2 комплексных числа, после чего получить результат их сложения. Использовать строки


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

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

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