9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
1

Найти сумму элементов массива, расположенных между первым и последним положительными элементами

29.11.2018, 21:07. Показов 1503. Ответов 11

Задание: сумму элементов массива, расположенных между первым и последним положительными
элементами.

Элементы массива - рандомные числа, выведеные на интервале [a;b], a<b.
Допилите код этим заданием, пожалуйста.


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
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
 
int main() {
    srand(time(NULL));
    setlocale(LC_ALL, "Russian");
    int a, b, n, k, min = 0;
    
    int arr[100] = {};
    printf("n = ");
    scanf_s("%d", &n);
    printf("Виведіть a і b. a<b.");
    printf("a = ");
    scanf_s("%d", &a);
    printf("b = ");
    scanf_s("%d", &b);
    if (a > b) {
        printf("Ви не дотрималися умови.");
        return 1;
    }
    k = b - a + 1;
    for (int i = 0; i < n;i++) {
        arr[i] = a + rand() % k;
        printf("arr = %d\n", arr[i]);
        if (min > arr[i])
            min = arr[i];
 
            
    }
    printf("min = %d\n", min);
    system("Pause");
    return 0;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2018, 21:07
Ответы с готовыми решениями:

Найти сумму элементов массива, расположенных между первым и последним положительными элементами
как наийти сумму элементов массива, расположенных между первым и последним положительными...

Найти сумму элементов, расположенных между первым и последним положительными элементами массива
Отредактируйте, ничего не работает. Бесы берут!!!:wall: #include &lt;conio.h&gt; #include...

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

Найти сумму элементов массива между первым и последним положительными элементами
Написал код который выполняет несколько функций. 1. Выносит элементы массива на экран. 2. Находит...

11
47 / 44 / 17
Регистрация: 18.02.2018
Сообщений: 184
Записей в блоге: 1
30.11.2018, 01:25 2
Я, правда, не понял, первый и последний положительные элементы включать в сумму?
Если да, то на 70 строке уберите +1 и -1.

Не обращайте вниания на макрос Random - он здесь чисто для красоты. Без него числа генерируются не в том диапазоне.
Если возникнут вопросы по поводу функции strtol() - почитайте в интернете. Могу лишь сказать, что это более безопасная альтернатива atoi(), которая переводит строку в целое.

Вижу вы пишете под винду. Что ж, чтобы запустить программу, откройте командную строку, перейдите в директорию с программой и запустите её как-то так: [prog_name].exe <a> <b>, где <a> - левый диапазон, <b> - правый (без угловых скобок).

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
75
76
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
#define Random(min, max) (min + rand() % ((max + 1) - min))
 
#define SIZE 100
 
int main(int argc, char *argv[]) {
    if (argc == 2 && strcmp(argv[1], "--help") == 0) {
        printf("usage: ./prog <a> <b>\n");
        printf("  a < b\n");
        printf("example: ./prog -5 5\n");
        printf("  -1 -3 4 -2 3\n");
        printf("  sum between 4 and 3 (first and last positive values) = -2\n");
        return 0;
    }
 
    if (argc != 3) {
        printf("type --help for more information\n");
        return -1;
    }
 
    long int a;
    long int b;
    char *ptr_a;
    char *ptr_b;
 
    a = strtol(argv[1], &ptr_a, 10);
    b = strtol(argv[2], &ptr_b, 10);
 
    if (*ptr_a != '\0' || *ptr_b != '\0')
        return -1;
 
    srand(time(NULL));
 
    /* generate array */
    int array[SIZE];
    int i;
 
    for (i = 0; i < SIZE; i++) {
        array[i] = Random(a, b);
        printf("%d ", array[i]);
    }
 
    printf("\n");
 
    /* find first and last positive values */
    int first;
    int last;
 
    for (i = 0; i < SIZE; i++) {
        if (array[i] > 0) {
            first = i;
            break;
        }
    }
 
    for (i = (SIZE - 1); i > (0 - 1); i--) {
        if (array[i] > 0) {
            last = i;
            break;
        }
    }
 
    /* calculate sum of elements between first and last positive values */
    int sum = 0;
 
    for (i = first + 1; i < (last + 1 - 1); i++)
        sum += array[i];
 
    printf("sum = %d\n", sum);
 
    return 0;
}
1
9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
30.11.2018, 22:34  [ТС] 3
Есть немного незнакомого для меня синтаксиса, буду перебирать нужные мне строчки и выписывать. Большое спасибо за помощь и старание)
0
47 / 44 / 17
Регистрация: 18.02.2018
Сообщений: 184
Записей в блоге: 1
01.12.2018, 00:09 4
Ничего страшного, научитесь.
Это вам спасибо, что задаёте вопросы на этом сайте, благодаря чему я могу немного расслабиться в свободное время.
0
9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
01.12.2018, 19:37  [ТС] 5
Если вам не тяжело, объясните, какое действие происходит в строке 43, ибо я выводил псевдорандомные числа через srand(как нас учил преподователь) и я не могу понять, что мне писать на том месте в моем коде.

Добавлено через 9 минут
А точнее, то моя формула была такова: arr[i] = a + rand() % k;
где k = b - a + 1;
a < b
0
47 / 44 / 17
Регистрация: 18.02.2018
Сообщений: 184
Записей в блоге: 1
01.12.2018, 20:12 6
Лучший ответ Сообщение было отмечено Pavlory как решение

Решение

Цитата Сообщение от Pavlory Посмотреть сообщение
Если вам не тяжело, объясните, какое действие происходит в строке 43, ибо я выводил псевдорандомные числа через srand(как нас учил преподователь) и я не могу понять, что мне писать на том месте в моем коде.

Добавлено через 9 минут
А точнее, то моя формула была такова: arr[i] = a + rand() % k;
где k = b - a + 1;
a < b
Точно такое же, как и у вас. Обратите внимание на 6 строку:
C
1
#define Random(min, max) (min + rand() % ((max + 1) - min))
Оба выражения эквивалентны между собой: (max + 1) - min = max - min + 1

Если не хотите использовать определение, то в 43 строке вы можете написать так:
C
1
array[i] = a + rand() % (b - a + 1);
или
C
1
2
int k = b - a + 1;
array[i] = a + rand() % k;
Дело в том, что куча таких выражений делает код менее понятным, поэтому, на мой взгляд, для генерации случайных чисел проще использовать заранее определённый макрос.
1
9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
02.12.2018, 15:19  [ТС] 7
Переписал под свою манеру кодирования, все работает. Спасибо большое)
И еще один момент, пожалуйста: объясните, как программа вычисляет первое и последнее положительное число, ибо я не могу никак понять?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
for (i = 0; i < SIZE; i++) {
        if (arr[i] > 0) {
            first = i;
            break;
        }
    }
 
    for (i = (SIZE - 1); i > (0 - 1); i--) {
        if (arr[i] > 0) {
            last = i;
            break;
        }
    }
Добавлено через 49 минут
Если я правильно понял, то как только
C
1
if (arr[i] > 0)
находит значение выше нуля, то действие заканчивается через break и first присваивается это найденое значение?
0
47 / 44 / 17
Регистрация: 18.02.2018
Сообщений: 184
Записей в блоге: 1
02.12.2018, 15:26 8
Цитата Сообщение от Pavlory Посмотреть сообщение
Переписал под свою манеру кодирования, все работает. Спасибо большое)
И еще один момент, пожалуйста: объясните, как программа вычисляет первое и последнее положительное число, ибо я не могу никак понять?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
for (i = 0; i < SIZE; i++) {
        if (arr[i] > 0) {
            first = i;
            break;
        }
    }
 
    for (i = (SIZE - 1); i > (0 - 1); i--) {
        if (arr[i] > 0) {
            last = i;
            break;
        }
    }
Добавлено через 49 минут
Если я правильно понял, то как только
C
1
if (arr[i] > 0)
находит значение выше нуля, то действие заканчивается через break и first присваивается это найденое значение?
Да, всё правильно поняли.
Просто идём с начала массива и ищем первый положительный элемент, а потом тупо идём с конца.
1
9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
02.12.2018, 16:35  [ТС] 9
А вы не могли бы помочь мне еще с одним заданием, а то у меня что-то не выходит?
Тоже с массивами

Добавлено через 1 час 0 минут
Поменять местами максимальный и предпоследний элементы в массиве W [12]. Вывести исходный и преобразованный массив.
Максимальный элемент я нашел, я не могу поменять элементы местами. swap у меня почему-то не работает, через присвоение с третьей переменной тоже ломается. Дичь какая-то.
0
47 / 44 / 17
Регистрация: 18.02.2018
Сообщений: 184
Записей в блоге: 1
02.12.2018, 16:50 10
Цитата Сообщение от Pavlory Посмотреть сообщение
А вы не могли бы помочь мне еще с одним заданием, а то у меня что-то не выходит?
Тоже с массивами

Добавлено через 1 час 0 минут
Поменять местами максимальный и предпоследний элементы в массиве W [12]. Вывести исходный и преобразованный массив.
Максимальный элемент я нашел, я не могу поменять элементы местами. swap у меня почему-то не работает, через присвоение с третьей переменной тоже ломается. Дичь какая-то.
Не делайте так, лучше создайте новую тему.
Я к вам приду.
1
9 / 4 / 2
Регистрация: 29.11.2018
Сообщений: 215
02.12.2018, 17:28  [ТС] 11
Окей, спасибо)
А почему так не делать?)
0
47 / 44 / 17
Регистрация: 18.02.2018
Сообщений: 184
Записей в блоге: 1
02.12.2018, 18:36 12
Так в правилах форума написано:

> 4. 4. На каждый вопрос создавайте по одной теме - это помогает избежать путаницы в ответах и облегчает поиск.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2018, 18:36
Помогаю со студенческими работами здесь

Сумма элементов массива, расположенных между первым и последним положительными элементами
Найти и вывести на экран сумму элементов массива, расположенных между первым и последним...

Найти сумму элементов, расположенных между первым и последним максимальными элементами
Найти сумму элементов, расположенных между первым и последним максимальными элементами.

Вычислить сумму элементов массива, расположенных между первым и последним отрицательными элементами
НАИДИТЕ ОШИБКУ ПОЖАЛУИСТА! в одномерном массиве, состоящем из n вещественных элементов,...

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


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

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

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