Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
kibo_kern
1 / 1 / 2
Регистрация: 09.12.2017
Сообщений: 82
1

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

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

Ввести с клавиатуры четыре числа: 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2018, 15:11
Ответы с готовыми решениями:

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

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

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

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

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

3
stake-k26
940 / 557 / 403
Регистрация: 25.04.2016
Сообщений: 1,601
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
kibo_kern
1 / 1 / 2
Регистрация: 09.12.2017
Сообщений: 82
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
HighPredator
5958 / 2085 / 736
Регистрация: 10.12.2010
Сообщений: 5,907
Записей в блоге: 3
20.06.2018, 13:49 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
#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
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2018, 13:49

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

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

Напечатать все знаки арифметических операций и операций отношения
Напечатать все знаки арифметических операций и операций отношения,которые входят в заданый массив и...


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

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

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