Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 23.06.2015
Сообщений: 9
1

Операции над элементами последовательности, сумма, произведение

23.06.2015, 16:11. Показов 897. Ответов 7
Метки нет (Все метки)

Очень нужна помощь с заданием:

Дано натуральное число n и действительные числа a1,…, an. Необходимо:
1) получить новую последовательность b1,…, bn путем замены отрицательных членов начальной последовательности их квадратами;
2) если члены последовательности b1,…, bn образуют неубывающую последовательность, то получить суму членов начальной последовательности, иначе получить их произведение.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.06.2015, 16:11
Ответы с готовыми решениями:

Операции над элементами списка: сумма, произведение или среднее
Нужно установить переключателс: сумма, произведение или среднее, указать какая операция будет...

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

Операции над элементами множества
Добрый день! Помогите пожалуйста с небольшой задачкой. Мне необходимо написать текст модуля ...

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

__________________
7
36 / 36 / 15
Регистрация: 08.12.2014
Сообщений: 171
23.06.2015, 16:14 2
в чем сложности? кидайте код - поможем
0
0 / 0 / 0
Регистрация: 23.06.2015
Сообщений: 9
23.06.2015, 22:23  [ТС] 3
не выходит вывести последовательность b1,...,bn

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<stdio.h>
#include<string.h>
#include<ctype.h>
#include <locale.h>
 
 
    void func(int *a,int *b,int n)
    {
        int i;
 
 for(i=a[1];i<=n;i++)
{
    if(a[i]<0)
    {
        b[i]=a[i]*a[i];
        printf("%d, ",b[i]);
    }
    else
       {
           b[i]=a[i];
           printf("%d, ",b[i]);
       }
 
 
}
 
    }
 
    int main()
{
    int n,i;
    int a[100];
    int b[100];
    setlocale(LC_ALL,".1251");
 
    printf("Введите n-натуральное :  ");
    scanf("%d",&n);
 
    printf("Введите a1: ");
    scanf("%d",&a[1]);
 
    for(i=a[1];i<=n;i++)
    {
        a[i]=i+n%2;
        printf("%d, ",a[i]);
    }
     printf("\n");
     
     func(a,b,n);
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10910 / 6836 / 1625
Регистрация: 25.07.2009
Сообщений: 12,540
24.06.2015, 01:07 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
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
#define rrand() ( sin(rand()) )
 
int not_descendant(const double * array, const size_t count) {
    return ( count < 2 ) ? 1 : ( array[0] > array[1] ) ? 0 : not_descendant(array + 1, count - 1);
}
 
double sum_of(const double * array, const size_t count) {
    return ( count ) ? *array + sum_of(array + 1, count - 1) : 0.0;
}
 
double product_of(const double * array, const size_t count) {
    return ( count ) ? *array * product_of(array + 1, count - 1) : 1.0;
}
 
void transformed_copy(double * targetArray, const double * sourceArray, size_t count) {
    for ( ; count--; ++sourceArray )
        *targetArray++ = ( *sourceArray < 0.0 ) ? *sourceArray * *sourceArray : *sourceArray;
}
 
void dump_array(const double * array, size_t count) {
    while ( count-- )
        printf("%5.3f%c", *array++, ( count ) ? ' ' : '\n');
}
 
int main(void) {
    double * a, * b;
    size_t n, i;
    
    printf("N = ");
    if ( scanf("%zu", &n) != 1 || ! n ) {
        fprintf(stderr, "Wrong input!\n");
        return 1;
    }
    
    if ( ! ( a = malloc(sizeof(double) * n) ) || ! ( b = malloc(sizeof(double) * n) ) ) {
        fprintf(stderr, "Memory error!\n");
        return 1;
    }
    
    srand(time(NULL));
    for ( i = 0; i < n; ++i )
        a[i] = rrand();
    /*  {
            printf("Array[%u] = ", i);
            if ( scanf("%lf", &a[i]) != 1 ) {
                fprintf(stderr, "Input error!\n");
                return 1;
            }
        }
     */
    
    transformed_copy(b, a, n);
    
    printf("Array A:\n");
    dump_array(a, n);
    printf("Array B:\n");
    dump_array(b, n);
    
    if ( not_descendant(b, n) )
        printf("Sum of A array elements: %.9f\n", sum_of(a, n));
    else
        printf("Product of A array elements: %.9f\n", product_of(a, n));
    
    free(a);
    free(b);
    
    return 0;
}
0
0 / 0 / 0
Регистрация: 23.06.2015
Сообщений: 9
24.06.2015, 02:31  [ТС] 5
Прошу прощения,но я совсем немного ничего не понимаю в этом коде.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10910 / 6836 / 1625
Регистрация: 25.07.2009
Сообщений: 12,540
24.06.2015, 14:57 6
Цитата Сообщение от Anstsiya Посмотреть сообщение
Прошу прощения,но я совсем немного ничего не понимаю в этом коде.
Так совсем немного понятнее?

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
// генерилка случайного вещественного числа в диапазоне [-1; 1]
#define rrand() ( sin(rand()) )
 
// проверялка массива на предмет неубывания
// если элементов меньше двух - считаем что последовательность неубывающая
// если элементов два и больше, но первый из них больше второго, последовательность нельзя назвать неубывающей
// в противном случае проверяем всё то же для подмассива, начинающегося со следующего элемента
int not_descendant(const double * array, const size_t count) {
    return ( count < 2 ) ? 1 : ( array[0] > array[1] ) ? 0 : not_descendant(array + 1, count - 1);
}
 
// следующие две функции работают по той же логике, но выполняют свои задачи
 
// складывалка элементов массива
double sum_of(const double * array, const size_t count) {
    return ( count ) ? *array + sum_of(array + 1, count - 1) : 0.0;
}
 
// умножалка элементов массива
double product_of(const double * array, const size_t count) {
    return ( count ) ? *array * product_of(array + 1, count - 1) : 1.0;
}
 
// копирование с прибамбасом элементов одного массива в другой
// в цикле копирует в ввыходной массив либо сами элементы входного, либо их квадраты, если они отрицательные
void transformed_copy(double * targetArray, const double * sourceArray, size_t count) {
    for ( ; count--; ++sourceArray )
        *targetArray++ = ( *sourceArray < 0.0 ) ? *sourceArray * *sourceArray : *sourceArray;
}
 
// выводилка массива на экран
void dump_array(const double * array, size_t count) {
    while ( count-- )
        printf("%6.3f%c", *array++, ( count ) ? ' ' : '\n');
}
 
// собственно программа
int main(void) {
    double * a, * b;
    size_t n, i;
    
    // запросить количество элементов, если введено не число, или 0 - выругаться, выйти
    printf("N = ");
    if ( scanf("%zu", &n) != 1 || ! n ) {
        fprintf(stderr, "Wrong input!\n");
        return 1;
    }
    
    // если не удалось выделить память под два массива нужной длины, снова ругаемся и выходим
    if ( ! ( a = malloc(sizeof(double) * n) ) || ! ( b = malloc(sizeof(double) * n) ) ) {
        fprintf(stderr, "Memory error!\n");
        return 1;
    }
    
    // заполнение элементов массива случайными значениями
    // если есть желание руками вводить по нескольку чисел,
    // закомментируйте строку a[i] = ...
    // и раскомментируйте то, что в фигурных скобках
    srand(time(NULL));
    for ( i = 0; i < n; ++i )
        a[i] = rrand();
    /*  {
            printf("Array[%u] = ", i);
            if ( scanf("%lf", &a[i]) != 1 ) {
                fprintf(stderr, "Input error!\n");
                return 1;
            }
        }
     */
    
    // хитро копируем элементы во второй массив
    transformed_copy(b, a, n);
    
    // выводим их оба
    printf("Array A:\n");
    dump_array(a, n);
    printf("Array B:\n");
    dump_array(b, n);
    
    // плюс что там по заданию...
    if ( not_descendant(b, n) )
        printf("Sum of A array elements: %.9f\n", sum_of(a, n));
    else
        printf("Product of A array elements: %.9f\n", product_of(a, n));
    
    // чистим память
    free(a);
    free(b);
    
    // фсйо
    return 0;
}
0
0 / 0 / 0
Регистрация: 23.06.2015
Сообщений: 9
24.06.2015, 15:03  [ТС] 7
Да,спасибо,так понятнее.Но тяжеловато написано,все-таки
И ругается он у меня на любое введенное чило,выводит "wrong input"
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10910 / 6836 / 1625
Регистрация: 25.07.2009
Сообщений: 12,540
24.06.2015, 16:03 8
Цитата Сообщение от Anstsiya Посмотреть сообщение
И ругается он у меня на любое введенное чило,выводит "wrong input"
Цитата Сообщение от easybudda Посмотреть сообщение
C
1
if ( scanf("%zu", &n) != 1 || ! n ) {
z уберите
C
1
if ( scanf("%u", &n) != 1 || ! n ) {
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2015, 16:03

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Операции над элементами массива
удалить максимальный элемент массива, если среднеарифмитическое всех элементов равно заданному В,...

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

Арифметические операции над элементами массива
Дан массив. Все его элементы: уменьшить на 30, умножить на последний элемент, увеличить на число B.

Математические операции над некоторыми элементами массива
Добрый день:) У меня возникли некие затруднения в создании массивов на фоне того, что в C# я...


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

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

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