Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Arthur80321
3 / 1 / 2
Регистрация: 06.10.2018
Сообщений: 47
1

Обращение к элементам массива посредством указателей

05.11.2018, 14:14. Просмотров 1564. Ответов 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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <process.h>
#include <stdlib.h>
 
void main() {
 
    setlocale(LC_CTYPE, "Rus");
    
    int *B;
    int *A;
    int n;
    int N;
    int a_max;
    int b_max;
    
    //массив A[M]
    printf("Введите размер для массива A: \n");
    scanf_s("%d", &n);
    //Выделение памяти для A[M]
    A = (int*)malloc(n * sizeof(int));
    //Ввод значений в массив A[M]
    for (int i = 0; i < n; i++) {
        printf("A[%d] = ", i);
        scanf_s("%d", &A[i]);
    }
    //массив B[M]
    printf("Введите размер для массива B: \n");
    scanf_s("%d", &N);
    //Выделение памяти для B[M]
    B = (int*)malloc(N * sizeof(int));
    //Ввод значений в массив B[M]
    for (int i = 0; i < N; i++) {
        printf("B[%d] = ", i);
        scanf_s("%d", &B[i]);
    }
    //Максимальное значение массива A
    for (int i = 0; i < n; i++) {
        if (A[i] > a_max) {
            a_max = A[i];
        }
    }
    //Максимальное значение массива B
    for (int i = 0; i < N; i++) {
        if (*(B+i) > b_max) {
            b_max = *(B+i);
        }
    }
    //Очистка экрана
    system("cls"); fflush(stdin);
    //вывод массива A[M]
    printf("----- Массив А[%d]\n", n);
    for (int i = 0; i < n; i++) {
        printf("A[%d]= %d \n", i, A[i]);
    }
    //вывод массива B[M]
    printf("----- Массив B[%d]\n", N);
    for (int i = 0; i < N; i++) {
        printf("B[%d]= %d \n", i, B[i]);
    }
    printf("%d\n", a_max);
    printf("%d", b_max);
    _getch();
}
Добавлено через 20 минут
Все решил - присвоил переменных "_max" значение = 0; Но как же теперь перемножить каждый элемент массивов на эти "_max"
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2018, 14:14
Ответы с готовыми решениями:

Обращение к элементам массива
Доброго времени суток!!имеется след код: #include &lt;stdio.h&gt; #define n ((int)...

Использование указателей для доступа к элементам массива
Помогите пожалуйста написать программу с подробным обьяснением:. Использование указателей для...

Обращение к элементам массива через указатели
Хочу разобраться,как обращаться к элементам двумерного массива через указатели. Вот у меня есть код...

Можно ли элементам массива указателей на void присваивать адреса структур
Здравствуйте, возникла проблема - создал структуру, одним из полей которой является массив...

Обращение у массиву указателей
Привет! Появились затруднения с обращением к массиву указателей на ЧИСЛО Например, int *arr;...

5
stake-k26
618 / 432 / 332
Регистрация: 25.04.2016
Сообщений: 1,218
05.11.2018, 15:18 2
Лучший ответ Сообщение было отмечено Arthur80321 как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
 
int main (void)
{
    int * a = NULL, * b = NULL;     // указатели под массивы
    int n, m;                       // размеры массивов
 
    /* *** узнаем размеры массивов *** */
    printf("input size of first array: ");
    scanf("%d", &n);
    printf("input size of second array: ");
    scanf("%d", &m);
    if (n<1 || m<1) return 1;       // размер массива не может быть меньше 1
 
    /* *** запрашиваем память для массивов *** */
    if ((a = (int *) malloc(n*sizeof(int))) == NULL) return 2;
    if ((b = (int *) malloc(n*sizeof(int))) == NULL)    // если память не дали
    {
        free(a);        // освобождаем память, которую успели занять
        return 3;       // выходим с кодом ошибки
    }
 
    /* *** записываем элементы в массивы *** */
    int i;
    printf("input elements of first array:\n");
    for (i=0; i<n; i++)
    {
        printf("a[%d] = ", i+1);
        scanf("%d", &a[i]);         // обычным способом
    }
    printf("\ninput elements of second array:\n");
    for (i=0; i<m; i++)
    {
        printf("b[%d] = ", i+1);
        scanf("%d", b+i);           // через указатель
    }
 
    /* *** выводим оба массива на экран *** */
    printf("\nfirst array:\n");
    for (i=0; i<n; i++)
        printf("%4d", a[i]);    // обычным способом
    printf("\n\nsecond array:\n");
    for (i=0; i<m; i++)
        printf("%4d", *(b+i));  // через указатель
    printf("\n\n");
 
    /* *** найдем максимум массива a[] *** */
    int max = 0;
    for (i=1; i<n; i++)
        if (a[i] > a[max]) max = i;
    printf("a[max] = a[%d] = %d\n", max+1, a[max]);
 
    /* *** с помощью указателя найдем максимум массива b[] *** */
    max = 0;
    for (i=1; i<m; i++)
        if (*(b+i) > *(b+max)) max = i;
    printf("b[max] = b[%d] = %d\n", max+1, *(b+max));
 
    /* *** умножим все элементы массива a[] на максимальный элемент массива b[] *** */
    for (i=0; i<n; i++)
        a[i] = a[i] * b[max];       // *(a+i) = *(a+i) * *(b+max);
 
    /* *** выведем массив а[] на экран *** */
    printf("\nnow the first array is:\n");
    for (i=0; i<n; i++)
        printf("%4d", a[i]);    // обычным способом
    printf("\n");
 
    /* освобождаем память, занятую массивами и выходим */
    free(a);
    free(b);
    return 0;
}
1
Arthur80321
3 / 1 / 2
Регистрация: 06.10.2018
Сообщений: 47
05.11.2018, 15:28  [ТС] 3
Спасибо Огромное! Очень помогли! Счастья ! =)))
0
stake-k26
618 / 432 / 332
Регистрация: 25.04.2016
Сообщений: 1,218
05.11.2018, 15:38 4
строка 18 :
if ((b = (int *) malloc(n*sizeof(int))) == NULL) - тут не n, а m, конечно же.
1
Arthur80321
3 / 1 / 2
Регистрация: 06.10.2018
Сообщений: 47
05.11.2018, 18:21  [ТС] 5
Вопрос по этой же теме:

Хотел оставить не тронутыми массивы а[] и b[], для этого вывести на экран результат из пользовательской функции, что бы не перезаписывать массивы (вероятно происходит перезапись).

В задании указано: Заданы два массива А(M) и В(M). В каждом из массивов найти наибольшее значение и умножить на него все элементы массивов. На печать вывести исходные и преобразованные массивы.

Но у меня получается написать в фунцкии только однократное умножение (к примеру только введенное значение умножить на "n" или "m"). Что-то вроде этого
C
1
2
3
4
5
func(int a, int b) {
int s;
s = a * b;
return s;
}
В каком направлении двигаться, для того что бы написать одну функцию и подставлять в нее сначала для a[], и после для b[]?
Но цель оставить массивы не измененными.
Или как-то при выводе просто умножать на "max"...
Все работает, ведь на печаль выводятся нужные массивы, но саммому хочется узнать, как не перезаписывать.
Заранее благодарю.

Добавлено через 50 минут
И если сделать как в строках 17,18 в VISUAL STUDIO 15:
C
1
2
if ((a = (int *) malloc(n*sizeof(int))) == NULL) return 2;
if ((b = (int *) malloc(n*sizeof(int))) == NULL)    // если память не дали
Сообщает о невозможности присвоить значение типа "bool" сущности типа "int*".

Добавлено через 39 минут
Вроде бы разобрался - создал новые переменные и присвою им результаты умнож.
0
stake-k26
618 / 432 / 332
Регистрация: 25.04.2016
Сообщений: 1,218
06.11.2018, 13:30 6
Лучший ответ Сообщение было отмечено Arthur80321 как решение

Решение

Arthur80321, ну смотрите, допустим, у вас 2 массива a[] и b[]. Сначала находите максимум массива b[], пусть это будет некое число max_in_b, теперь нам нужно вывести ан экран массив a[] и некий массив, который получится, если перемножить каждый элемент a[] на max_in_b:

C
1
2
3
4
5
6
7
8
9
// выводим оригинальный a[]:
for (i=0; i<n; i++)
    printf("%4d", a[i]);
printf("\n");
 
// а теперь перемноженный:
for (i=0; i<n; i++)
    printf("%4d", a[i] * max_in_b);
printf("\n");
при том, что n - это размер массива a[]

И остается лишь повторить эту операцию для массива b[], т.е. найти максимум в a[] и точно так же вывести на экран b[] и b[i] * max_in_a
1
06.11.2018, 13:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2018, 13:30

Использование указателей при вызове функций: "error C2100: недопустимое косвенное обращение"
Просьба помочь с пониманием указателей в функциях. Переползаю с delphi, поэтому просьба сильно не...

Обращение к элементам линейного списка через элементы массива указателей
Вот полная версия программы. Компилятор не выдаёт ошибок, но при выполнении, судя по всему, на...

Создание элементов формы посредством цикла, обращение к созданным элементам
Здравствуйте, прошу прощения что отвлекаю. У меня возникла одна проблема , помогите пожалуйста....


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

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

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