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

Указатели: определить номер максимального по модулю элемента массива

03.12.2015, 15:18. Просмотров 450. Ответов 3
Метки нет (Все метки)

Обращаться к элементам массива необходимо используя указатель.
1. В одномерном массиве, состоящем из n вещественных элементов, вычислить: Номер максимального по модулю элемента массива; Сумму элементов массива, расположенных после первого положительного элемента.
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 "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <locale.h>
 
int main()
{
    setlocale(0, "rus");
    int n, *ptr, i, j;
    int array_a[30];
    int max;
    int number_max = 0;
    int summ = 0;
    
    do{
        printf("Введите количество элементов массива :");
        scanf_s("%d", &n);
    } while (n >= 30);
        if (!(ptr = (int*)malloc(n*sizeof(int))))
    {
        puts("Not enough memory");
    }
    for (i = 0; i < n; i++)
    {
        printf("Число %d:", i);
        scanf_s("%d", &array_a[i]);
    }
 
    max = array_a[0];
    for (i = 1; i < n; i++){
        if (abs(max) < abs(array_a[i])){
            max = array_a[i];
            number_max = i;
        }
    }
    printf("Номер максимального элемента: %d\n", number_max);
 
    for (i = 0; i < n; i++){
        if (array_a[i] > 0){
            for (j = i + 1; j < n; j++){
                summ += array_a[j];
            }
            break;
        }
    }
    printf("Сумма элементов после первого положительного: %d\n", summ);
    printf("\n");
    return 0;
}
Обращаться к элементам массива необходимо используя указатель.
2. Дана целочисленная квадратная матрица. Определить: сумму элементов в тех столбцах, которые не содержат отрицательных элементов; минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.
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
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <locale.h>
#include <stdlib.h>
 
void main()
{
    int A[10][10];
    int N, i, j, z, sum, min, *ptr;
    setlocale(0, "rus");
    do{
        printf("Введите количество элементов матрицы :");
        scanf_s("%d", &N);
    } while (N >= 10);
    if (!(ptr = (int*)malloc(N*sizeof(int))))
    {
        puts("Not enough memory");
    }
 
    for (i = 0; i < N; i++)
        for (j = 0; j <N; j++)
        {
            printf("Элемент [%d,%d] = ", i, j);
            scanf_s("%d", &A[i][j]);
        }
    for (j = 0; j < N; j++)
    {
        sum = 0;
        for (i = 0; i < N; i++)
        {
            if (A[i][j] >= 0)
                sum += A[i][j];
            else
                break;
        }
        if (i == N) printf("Сумма элементов в столбце %d = %d\n", j, sum);
    }
    sum = 0;
 
    for (j = N - 2; j > 0; j--, sum = 0)
    {
        for (i = N - 1, z = j; z < N; i--, z++)
            sum += abs(A[i][z]);
        if (j == N - 2)
            min = sum;
        else if (sum < min)
            min = sum;
    }
 
    for (j = N - 2; j > 0; j--, sum = 0)
    {
        for (i = 0, z = j; z >= 0; i++, z--)
            sum += abs(A[i][z]);
        if (j == N - 2)
            min = sum;
        else if (sum < min)
            min = sum;
    }
    printf("Минимум сумм = %d\n", min);
}
Я эту тему не понимаю, кому не сложно помогите
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2015, 15:18
Ответы с готовыми решениями:

Найти номер максимального по модулю элемента массива
Прошу переделать данные 3 проргаммы через векторы на С++ builder'e. Заранее Спасибо! 1) Найти...

Вычислить номер максимального по модулю элемента массива
Помогите разобраться с этим. Можете пошагово объяснить, что нужно. Ну или готовый код, чтобы...

Найти номер максимального по модулю элемента массива
Доброго времени суток! Дали три задания ня языке Си: 1) В одномерном массиве, состоящем из n...

Найти номер максимального по модулю элемента массива
В одномерном массиве, состоящем из n действительных элементов, найти 1) номер максимального по...

Вычислить номер максимального по модулю элемента массива
в одномерном массиве, состоящем из п вещественных элементов, вычислить: номер максимального по...

3
rangerx
1954 / 1563 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
04.12.2015, 00:32 2
Цитата Сообщение от daszer Посмотреть сообщение
Я эту тему не понимаю
Что конкретно непонятно?
0
daszer
0 / 0 / 0
Регистрация: 01.10.2015
Сообщений: 30
04.12.2015, 15:33  [ТС] 3
Цитата Сообщение от rangerx Посмотреть сообщение
Что конкретно непонятно?
Я не умею использовать указатели, даже не понимаю как
0
rangerx
1954 / 1563 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
05.12.2015, 14:59 4
1.
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
#include <stdio.h>
#include <math.h>
 
#define N 5
 
int main() {
    double* p;
    double* q;
    double  a[N];
    double  s;
 
    printf("Введите %d элементов массива:\n", N);
    for (p = a; p != a+N; p++) {
        scanf("%lf", p);
    }
 
    q = a;
    for (p = a+1; p != a+N; p++) {
        if (fabs(*q) < fabs(*p)) {
            q = p;
        }
    }
 
    printf("Номер максимального по модулю элемента массива: %d\n", q-a+1);
    printf("Сумма элементов массива, расположенных после первого положительного элемента: ");
    q = a;
    while (q != a+N && *q <= 0) {
        q++;
    }
    if (q == a+N) {
        printf("ПОЛОЖИТЕЛЬНЫЕ ЭЛЕМЕНТЫ НЕ НАЙДЕНЫ.\n");
    } else {
        s = 0;
        for (p = q+1; p != a+N; p++) {
            s += *p;
        }
        printf("%f\n", s);
    }
    
    return 0;
}
Добавлено через 17 минут
Хотя, тебе скорее всего нужен такой вариант
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
#include <stdio.h>
#include <math.h>
 
#define N 5
 
int main() {
    int     i, j;
    double  a[N];
    double  s;
 
    printf("Введите %d элементов массива:\n", N);
    for (i = 0; i < N; i++) {
        scanf("%lf", a+i);
    }
 
    j = 0;
    for (i = j+1; i < N; i++) {
        if (fabs(*(a+j)) < fabs(*(a+i))) {
            j = i;
        }
    }
 
    printf("Номер максимального по модулю элемента массива: %d\n", j+1);
    printf("Сумма элементов массива, расположенных после первого положительного элемента: ");
    j = 0;
    while (j < N && *(a+j) <= 0) {
        j++;
    }
    if (j == N) {
        printf("ПОЛОЖИТЕЛЬНЫЕ ЭЛЕМЕНТЫ НЕ НАЙДЕНЫ.\n");
    } else {
        s = 0;
        for (i = j+1; i < N; i++) {
            s += *(a+i);
        }
        printf("%f\n", s);
    }
 
    return 0;
}
Добавлено через 33 минуты
С двумерным массивом (2 задача) можно работать, например, вот таким образом
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define M 3 // кол-во строк
#define N 4 // кол-во столбцов
...
int  a[M][N];
int* p = a[0];
 
for (i = 0; i < M; i++) {
    for (j = 0; j < N; j++) {
        scanf("%d", p+i*N+j);
    }
}
 
for (i = 0; i < M; i++) {
    for (j = 0; j < N; j++) {
        printf("%10d", *(p+i*N+j));
    }
    printf("\n");
}
Добавлено через 15 часов 36 минут
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
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
 
#define N 3
 
int main()
{
    int a[N][N];
    int i, j, z, sum, min;
    int *p;
 
    p = a[0];
    for (i = 0; i < N; i++)
        for (j = 0; j < N; j++)
        {
            printf("Элемент [%d,%d] = ", i, j);
            scanf("%d", p+i*N+j);
        }
    for (j = 0; j < N; j++)
    {
        sum = 0;
        for (i = 0; i < N; i++)
        {
            if (*(p+i*N+j) >= 0)
                sum += *(p+i*N+j);
            else
                break;
        }
        if (i == N) printf("Сумма элементов в столбце %d = %d\n", j, sum);
    }
    sum = 0;
 
    for (j = N - 2; j > 0; j--, sum = 0)
    {
        for (i = N - 1, z = j; z < N; i--, z++)
            sum += abs(*(p+i*N+z));
        if (j == N - 2)
            min = sum;
        else if (sum < min)
            min = sum;
    }
 
    for (j = N - 2; j > 0; j--, sum = 0)
    {
        for (i = 0, z = j; z >= 0; i++, z--)
            sum += abs(*(p+i*N+z));
        if (j == N - 2)
            min = sum;
        else if (sum < min)
            min = sum;
    }
    printf("Минимум сумм = %d\n", min);
 
    return 0;
}
Добавлено через 27 минут
Можно, конечно, объявить указатель и таким образом
C
1
int (*p)[N] = a;
тогда элементом соответственно будет *(*(p+i)+j).
0
05.12.2015, 14:59
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2015, 14:59

Вычислить номер максимального по модулю элемента массива
Помогите решить прогу на Си с заданным условием : Скласти алгоритм і програму, яка в одновимірному...

Вычислить номер максимального по модулю элемента массива
Помогите решить прогу на Си с заданным условием : Составить алгоритм и программу, которая в...

Указатели: определить номер строки и номер столбца в матрице по адресу элемента
Как работая на указателях,передвигаясь по матрице определить номер строки и номер столбца по адресу...


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

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

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