0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 10
1

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

30.07.2012, 21:54. Показов 3269. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
6)в одномерном массиве сост из н эл-в , вычислить номер максимального элемента массива;
найти произведение элементов массива расположенных между первым и вторым нулевыми элементами





просто завал сильный выручайте буду очень благодарен!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2012, 21:54
Ответы с готовыми решениями:

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

Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Люди добрые, кто может помощь лабу в С. Буду очень признателен и благодарен! В одномерном...

Найти произведение элементов массива, расположенных между первыи и вторым нулевыми элементами
В C++ Builder 6 - не работает оператор modf, помогите, пожалуйста, проверьте мою программу, а то не...

Вычислить произведение элементов массива, расположенных между первым и вторым близкими к нулю элементами
SOS!) Вот массив: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h>...

5
163 / 163 / 68
Регистрация: 23.02.2011
Сообщений: 392
31.07.2012, 00:49 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
#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    int n = 0;
    printf("Enter n:\n");
    scanf("%d",&n);
 
    int* arr = (int*)malloc(n * sizeof(int));
 
    srand(time(NULL));
    printf("\nArray:\n");
    for (int i = 0; i < n; i ++)
    {
        arr[i] = rand()%5 - 2;
        printf("%4d",arr[i]);
    }
    printf("\n");
 
    int max_i = 0;
    for (int i = 1; i < n; i ++)
        if(arr[i] > arr[max_i])
            max_i = i;
    printf("\nMax element in array = %d and its index = %d\n", arr[max_i], max_i);
 
    int zero1st = -1, zero2nd = -1;
    for (int i = 0; i < n; i ++)
        if(arr[i] == 0)
        {
            if(zero1st == -1)
                zero1st = i;
            else if(zero2nd == -1)
                zero2nd = i;
            else break;
        }
 
    int prodBetwZeros = 1;
    if(zero1st != zero2nd)
        for (int i = zero1st + 1; i < zero2nd; i ++)
            prodBetwZeros *= arr[i];
    printf("\nProduct between first 0-elements = %d\n", prodBetwZeros);
 
    free (arr);
    return 0;
}
1
0 / 0 / 0
Регистрация: 17.11.2013
Сообщений: 19
08.10.2014, 12:04 3
edward_jonson, а вы не могли бы помочь немного?
Такая проблема, что нужно расписать комментарии к этому кусочку
Цитата Сообщение от edward_jonson Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int zero1st = -1, zero2nd = -1;
    for (int i = 0; i < n; i ++)
        if(arr[i] == 0)
        {
            if(zero1st == -1)
                zero1st = i;
            else if(zero2nd == -1)
                zero2nd = i;
            else break;
        }
int prodBetwZeros = 1;
    if(zero1st != zero2nd)
        for (int i = zero1st + 1; i < zero2nd; i ++)
            prodBetwZeros  = arr[i];
0
163 / 163 / 68
Регистрация: 23.02.2011
Сообщений: 392
09.10.2014, 23:32 4
Pandochka_oops,
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int zero1st = -1, zero2nd = -1;  // индексы первого и второго нулевого элемента
    for (int i = 0; i < n; i ++)  // находим их в этом цикле
        if(arr[i] == 0)
        {
            if(zero1st == -1) // если zero1st == -1, значит нашли первый 0, запоминаем индекс
                zero1st = i;
            else if(zero2nd == -1) // если zero2nd  == -1 и zero1st != -1, значит нашли второй 0, запоминаем индекс
                zero2nd = i;
            else break; // прерываем цикл - ибо достаточно двух нулей
        }
int prodBetwZeros = 1; // накопитель произведения
    if(zero1st != zero2nd) // проверяем, что нулевые элементы есть
        for (int i = zero1st + 1; i < zero2nd; i ++) // проходим циклом между ними (если нулевой элемент один - не будет ни одной итерации)
            prodBetwZeros *= arr[i]; // ищем произведение
0
0 / 0 / 0
Регистрация: 21.10.2014
Сообщений: 29
31.10.2014, 16:38 5
Как сделать так, чтобы при отсутствии второго нулевого элемента или обоих нулевых элементов выводился ответ равный 0?

Добавлено через 8 минут
Решил проблему, добавив if (zero2nd==-1) prodBetwZeros=0; перед выводом ответа.
0
0 / 0 / 0
Регистрация: 16.02.2015
Сообщений: 14
17.02.2015, 16:59 6
Написал несколько иной вариант кода (более примитивный и запутанный) на вторую половину задачи, однако он работает некорректно и я не могу выявить ошибку. Несуществующие полцарства, принцессу и коня тому, кто подскажет что здесь не так, помимо громоздкости и тупизны кода:
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
#include <stdio.h>
main()
{
int A[100];
int n,i,k,r,j,z;
printf("enter the number of elements:\n");
scanf("%d",&n);
if (n<=100)
    {
    for (i=0; i<n; i++)
        {
        printf("A[%d]=",i);
        scanf("%f",&A[i]);
        }
    for (i = 0; i<n; i++)
        {
        if (A[i]==0)
            {
            printf("First zero elements is A[%d]=%d\n",i,A[i]);
            for (k=i+1; k<n; k++)
                {
                if (A[k]==0)
                    {
                    printf("Second zero element is A[%d]=%d\n",k,A[k]);
                    for (j=i+1; j<k; j++)
                        {
                         z=z*A[j];
                        }
                        printf("op.=%d\n",z);
                        break;
 
                    }
                else
                    {
                    if (k=n)
                        {
                         printf("There is only one zero element in massive\n");
                        }
                    }
                    }
            break;
                }
            else
                {
                if (i=n)
                    {
                    printf("There is no any zero element in massive\n");
                    }
                }
            }
        }
else
{
printf("To much elements for this massive (max=100)\n");
}
system ("pause");
return 0;
}
UPD. "Некорректность" выражается в том, что он абсолютно всегда выдает только то, что "нулевых элементов нет".
0
17.02.2015, 16:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2015, 16:59
Помогаю со студенческими работами здесь

Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами
Здравствуйте. Помогите пожалуйста составить программу, связанную с массивами, а то совсем не...

Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdbool.h&gt; #include &lt;math.h&gt; #include...

Написать функцию, которая определяет одномерном массиве произведение элементов, расположенных между первым и последним нулевыми элементами
написать функцию, которая определяет одномерном массиве произведение элементов, расположенных...

Вычислить сумму элементов массива, расположенных между первым и последним нулевыми элементами
Помогите составить программу, формирующую одномерный массив, состоящий из N целых элементов....


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

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

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