3 / 3 / 2
Регистрация: 09.12.2017
Сообщений: 111
1

Указатели, вычисление арифметических операций

20.05.2018, 15:11. Показов 802. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ввести с клавиатуры четыре числа: A, B, C, D. Вычислить:
A + B + C + D, если A, B, C, D не равны между собой;
(A + B) * (C + D), если A, B и C, D попарно равны;
4*A, если A, B, C, D между собой равны;
(A - B) * (C -D), в других случаях.
Решить задачу с использованием указателей. Верно?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
#include<conio.h>
int main()
{
    int A,B,C,D,*p1,*p2,*p3,*p4;
    clrscr();
    puts("Vvedite 4 4icla:\n");
    scanf("%d%d%d%d",A,B,C,D);
    if(A!=B!=C!=D)
    *p1=A+B+C+D;
    if(A==B&&C==D)
    *p2=(A+B)*(C+D);
    if(A==B==C==D)
    *p3=4*A;
    else
    *p4=(A-B)*(C-D);
    printf("%d\n%d\n%d\n%d",*p1,*p2,*p3,*p4);
    getch();
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2018, 15:11
Ответы с готовыми решениями:

Неверный результат после арифметических операций над float
Добрый день. Возникла проблема, которую я никак не могу понять и решить, а именно: На приложенном...

Создать функции для выполнения арифметических операций над комплексными числами
Заданные два комплексных числа (a + ib) и (c + id) и тип операции (Сложение, умножение, вычитание,...

Пользователь вводит два целых числа, а компьютер выводит результат 5 арифметических операций над ними
Всем привет!Выручите с программой!Код написал,но выдает ошибку! Вот задание: Написать программу,...

Вычисление арифметических выражений
Здравствуйте, помогите, пожалуйста, с задачей: Дано арифметическое выражение, например: 2+3*2-1+1...

3
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,220
20.05.2018, 16:03 2
В целом указатели тут даром не нужны. Так что кто его знает.

Однако в вашей программе куча ошибок. Ошибка в scanf(), ошибка в условиях if(A!=B!=C!=D) и if(A==B==C==D), и ошибка в присваиваниях *p1=A+B+C+D;
Так что в целом все неправильно.

В чем заключается ошибка в присваивании? У вас создается нулевой указатель int *p1 = NULL; т.е. изначально этот указатель ведет куда-то в NULL, затем вы пытаетесь применить разыменование к ... нулевому указателю... т.е. вы пытаетесь взять адрес NULL и посмотреть что же там лежит, и вполне ожидаемо получаете ошибку сегментации.

Так что подумайте вот о чем, может ваши указатели должны вести не на результат, а на переменные A, B, C и D?

Добавлено через 2 минуты
условие составлено каким-то ... ну очень грамотным специалистом.

Добавлено через 5 минут
По условиям и scanf() дам небольшую подсказку:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int foo (int a, int b, int c, int d)
{
    if (a != b && a != c && a != d && b != c && b != d && c != d)
        return a+b+c+d;
    else if (a == b && a == c && a == d) return 4*a;
    else if (a == b && c == d) return (a+b)*(c+d);
    else return (a-b) * (c-d);
}
 
int main (void)
{
    int a, b, c, d;
    printf("a = ");     scanf("%d", &a);
    printf("b = ");     scanf("%d", &b);
    printf("c = ");     scanf("%d", &c);
    printf("d = ");     scanf("%d", &d);
 
    printf("result: %d\n", foo(a, b, c, d));
    return 0;
}
а вот на счет указателей подумайте как следует.
1
3 / 3 / 2
Регистрация: 09.12.2017
Сообщений: 111
20.06.2018, 13:01  [ТС] 3
stake-k26,
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
#include <stdio.h>
 
int main() {
    int result;
    int a, b, c, d;
 
    int buf;
    int *pointer = &buf;
 
    printf("Please, enter A, B, C, D: ");
    scanf("%d %d %d %d", &a, &b, &c, &d);
 
    if (a != b && a != c && a != d && b != c && b != d && c != d) {
        *pointer = a + b + c + d;
    } else if (a == b && c == d) {
        *pointer = (a + b) * (c + d);
    } else if (a == b && a == c && a == d && b == c && b == d && c == d) {
        *pointer = 4*a;
    } else {
        *pointer = (a - b) * (c - d);
    }
 
    result = buf;
 
    printf("Result = %d\n", result);
 
    return 0;
}
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
20.06.2018, 13:49 4
Лучший ответ Сообщение было отмечено kibo_kern как решение

Решение

Чисто на указателях:
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
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int* pA;
    int* pB;
    int* pC;
    int* pD;
    int* result;
 
    pA = malloc(5 * sizeof(*pA));
    pB = &pA[1];
    pC = &pA[2];
    pD = &pA[3];
    result = &pA[4];
 
    scanf("%d %d %d %d", pA, pB, pC, pD);
 
    if ((*pA != *pB) && (*pB != *pC) && (*pC != *pD) && (*pA != *pD) && (*pB != *pD) && (*pA != *pC))
    {
        *result = (*pA) + (*pB) + (*pC) + (*pD);
    }
    else if ((*pA == *pB) && (*pC == *pD))
    {
        *result = ((*pA) + (*pB)) * ((*pC) + (*pD));
    }
    else if ((*pA == *pB) && (*pB == *pC) && (*pC == *pD))
    {
        *result = 4 * (*pA);
    }
    else
    {
        *result = ((*pA) - (*pB)) * ((*pC) - (*pD));
    }
 
    printf("result = %d\n", *result);
 
    free(pA);
 
    return 0;
}
0
20.06.2018, 13:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2018, 13:49
Помогаю со студенческими работами здесь

Найти все варианты размещения знаков арифметических операций на месте вопросительных знаков в выражении
Составить программу, которая бы нашла все варианты размещения знаков арифметических операций +,-,*...

Вычисление количества арифметических операций
Задание такое: нужно вектор-столбец, состоящий из 16 элементов умножить на матрицу 16x16, затем...

Рекурсия функции. Сумма целых чисел n и m, в которой из арифметических операций используется только прибавление и вычисление единицы
Напишите рекурсивную функцию, вычисляющую сумму целых чисел n и m, в которой из арифметических...

Заменить в данной строке знаки арифметических операций названиями противоположных им операций
Заменить в данной строке знаки арифметических операций названиями противоположных им операций.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru