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

Написать функцию,которая принимает массив целых чисел

07.11.2012, 16:56. Просмотров 1749. Ответов 2
Метки нет (Все метки)

Написать функцию,которая принимает массив целых чисел расположенныъ в динамической
памяти(массив заполнен числами от(10,10000)),и создает новый массив данных при этом
заполняется он только трехзначными значениями,формировать значение для нового массива
можно только используя числа исходного массива, и по следующему правилу:

Исходный массив: 10 456 12 2345 1234 222 23 456 567 3456

Результирующий: 104 561 223 451 234 222 234 565 673 456
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 16:56
Ответы с готовыми решениями:

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

Написать функцию, которая возвращает минимальное из двух целых чисел
Помогите пожалуйста написать 2 программы на языке СИ, по форму лазил не нашел что то ...спасибо!!! ...

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

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

Написать программу, которая должна сгенерировать массив из 1000000 случайных целых чисел и записать их в файл
Задание. Написать программу, которая должна сгенерировать массив и з 1000000 (один миллион)...

2
accept
4835 / 3257 / 464
Регистрация: 10.12.2008
Сообщений: 10,569
12.11.2012, 05:23 2
Лучший ответ Сообщение было отмечено Dimonikom как решение

Решение

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
#include <stdio.h>
#include <assert.h>
 
void func(int arr1[], int a1size,
          int arr2[], int a2size, int *count);
 
/*
Написать функцию,которая принимает массив целых чисел расположенныъ в динамической
памяти(массив заполнен числами от(10,10000)),и создает новый массив данных при этом
заполняется он только трехзначными значениями,формировать значение для нового массива
можно только используя числа исходного массива, и по следующему правилу:
 
Исходный массив: 10 456 12 2345 1234 222 23 456 567 3456
 
Результирующий: 104 561 223 451 234 222 234 565 673 456 
*/
 
int main(void)
{
    int arr1[100] = {
        10, 456, 12, 2345, 1234,
        222, 23, 456, 567, 3456
    };
    int arr2[100];
    int i, n;
    
    func(arr1, 10, arr2, 100, &n);
    for (i = 0; i < n; i++)
        printf("%d ", arr2[i]);
    putchar('\n');
    return 0;
}
 
void push(int n);
int pop(void);
int empty(void);
 
void func(int arr1[], int a1size, int arr2[], int a2size, int *count)
{
    /* дано:     массив чисел и его размер, пустой массив и его размер,
                 переменная количества
       получить: в пустой массив записаны числа из трёх цифр, составленные
                 из цифр чисел массива чисел,
                 в переменной количества - количество записанных чисел */
    int i, j, k, tmp;
    
    for (i = j = k = tmp = 0; i < a1size; i++) {
        /* инв: в массиве arr2 записаны числа по три цифры,
                сформированные из цифр прочитанных чисел
                массива arr1, не включая текущее число;
                стек пуст, в счётчике цифр - количество цифр
                в числе переменной накопления */
        int n = arr1[i];
        do
            push(n % 10);
        while (n /= 10);
        /* утв: все цифры текущего числа - в стеке,
                на вершине - старшая цифра */
        while (!empty()) {
            /* инв: в переменной накопления - число из цифр,
                    перенесённых из стека,
                    в счётчике - количество таких цифр */
            tmp = tmp * 10 + pop();
            k++;
            if (k >= 3) {
                arr2[j++] = tmp;
                tmp = k = 0;
                /* утв: индекс второго массива
                        не превышает его размера */ assert(j <= a2size);
            }
        }
        /* утв: стек пуст */ assert(empty());
    }
    *count = j;
}
 
int buf[100];
int bufp = 0;
 
void push(int n)
{
    buf[bufp++] = n;
}
 
int pop(void)
{
    return buf[--bufp];
}
 
int empty(void)
{
    return bufp == 0;
}
Код
[guest@localhost c]$ .ansi dig3groups.c -o dig3groups
[guest@localhost c]$ ./dig3groups 
104 561 223 451 234 222 234 565 673 456 
[guest@localhost c]$
без динамического выделения под массивы
(отдельную выделяющую функцию надо написать)
0
accept
4835 / 3257 / 464
Регистрация: 10.12.2008
Сообщений: 10,569
13.11.2012, 08:32 3
а это без стека
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
#include <stdio.h>
#include <assert.h>
 
void func(int arr1[], int a1size,
          int arr2[], int a2size, int *count);
 
/*
Написать функцию,которая принимает массив целых чисел расположенныъ в динамической
памяти(массив заполнен числами от(10,10000)),и создает новый массив данных при этом
заполняется он только трехзначными значениями,формировать значение для нового массива
можно только используя числа исходного массива, и по следующему правилу:
 
Исходный массив: 10 456 12 2345 1234 222 23 456 567 3456
 
Результирующий: 104 561 223 451 234 222 234 565 673 456 
*/
 
int main(void)
{
    int arr1[100] = {
        10, 456, 12, 2345, 1234,
        222, 23, 456, 567, 3456
    };
    int arr2[100];
    int i, n;
    
    func(arr1, 10, arr2, 100, &n);
    for (i = 0; i < n; i++)
        printf("%d ", arr2[i]);
    putchar('\n');
    return 0;
}
 
void func(int arr1[], int a1size, int arr2[], int a2size, int *count)
{
    /* дано:     массив arr1 и его размер a1size, массив arr2 и
                 его размер a2size, переменная count
       получить: в массив arr2 записаны трёхзначные числа,
                 составленные из цифр чисел массива arr1;
                 в count записано количество чисел в arr2 */
    int i, j, accum, k;
    
    for (i = j = accum = k = 0; i < a1size; i++) {
        /* инв: в массиве arr2 записаны трёхзначные числа,
                сформированные из цифр прочитанных чисел
                массива arr1, не включая текущее число arr1[i];
                в k - количество цифр в accum (меньше 3-х) */
        int n = arr1[i];
        long rev = 0;
        int rk = 0;
        do {
            /* инв: в rev справа дописана крайняя правая
                    цифра текущего числа n, которая удалена из n;
                    в rk - количество цифр в rev */
            rev = rev * 10 + n % 10;
            rk++;
        } while (n /= 10);
        /* утв: в rev - текущее число n, записанное
                в обратном порядке; в rk - количество
                цифр в rev */
        do {
            /* инв: в accum - справа дописана крайняя правая
                    цифра из rev, которая удалена из rev;
                    в rk - количество цифр в rev,
                    в k - количество цифр в accum (меньше 3-x)*/
            accum = accum * 10 + rev % 10;
            k++;
            if (k >= 3) {
                /* утв: в массиве arr2 есть место */ assert(j < a2size);
                arr2[j++] = accum;
                accum = k = 0;
            }
            rev /= 10;
        } while (--rk > 0);
        /* утв: число rev прочитано */ assert(rev == 0 && rk == 0);
    }
    *count = j;
}
Код
[guest@localhost c]$ .ansi dig3groups.c -o dig3groups
[guest@localhost c]$ ./dig3groups 
104 561 223 451 234 222 234 565 673 456 
[guest@localhost c]$
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2012, 08:32

Написать функцию, которая принимает число и определяет, является ли оно простым
1. Написать функцию, которая принимает число и возвращает: - true - если переданное число...

Написать функцию, которая принимает строку, подсчитывает количество цифр в ней
Задание: Написать функцию, которая принимает в качестве параметра строку с завершающим нулем,...

Создать функцию, которая принимает указатель на массив и количество элементов
Люди! Огромная просьба помочь. Как сделать функцию, которая принимает указатель на массив и...


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

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

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