Составить массив сумм цифр элементов (из готового кода Pascal в C) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, преподаватель в институте задал, задачу которую раньше в Pascal писал, а у нас заочка жесткая времени на подготовку мало дают, задачи на лекции даже не успели порешать, прошу если кто знает как эту задачу на С написать? Задание:
Вводится длина вектора, состоящего из целых чисел, и его элементы. Составить массив сумм цифр элементов и вывести результаты. Если используется "заданное число", то оно тоже вводится
Мой код в Pascal
var
 a,b:array[1..100] of integer;
 n,i,s,x:integer;
 begin
 writeln('Введите массив:');
 readln(n);
 writeln('Элементы массива:');
 for i:= 1 to n do
 read(a[i]);
 readln;
 for i:= 1 to n do
 begin
 s:=0;
 x:=a[i];
 while x>0 do
 begin
 s:=s+x mod 10;
 x:=x div 10;
 begin
 b[i]:=s
 end;
 end; 
 end;
 writeln('Результат:');
 for i:= 1 to n do
 write (b[i],' ');
 readln;
 end.

Решение задачи: «Составить массив сумм цифр элементов (из готового кода Pascal в C)»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int sumDigits(int x); /* îáúÿâëÿåì ïðîòîòèï ГґГіГ*êöèè */
 
int main(void)
{
    int N, *arr, *sumArr, i; /* îáúÿâëÿåì ïåðåìåГ*Г*ûå */
    printf("Enter N: "); /*âûâîäèì Г*Г* ГЅГЄГ°Г*Г* ïðîñüáó ГўГўГҐГ±ГІГЁ êîëè÷åñòâî ýëåìåГ*òîâ */
    scanf("%d", &N); /* ñ÷èòûâГ*ГҐГ¬ Гў ïåðåìåГ*Г*ГіГѕ N. %d îçГ*Г*Г·Г*ГҐГІ, Г·ГІГ® îæèäГ*ГҐГІГ±Гї ÷èñëî int */
    arr = (int *) malloc(sizeof(int) * N); /* âûäåëÿåì ГЇГ*ìÿòü, Г°Г*ГўГ*ГіГѕ Г°Г*çìåðó Г·ГЁГ±Г«Г* int * N */
    sumArr = (int *) malloc(sizeof(int) * N);
    for (i=0; i < N; i++) /* Гў öèêëå îò 0 äî N */
    {
        scanf("%d", &arr[i]); /* ñ÷èòûâГ*ГҐГ¬ ÷èñëî Гў ýëåìåГ*ГІ Г¬Г*Г±Г±ГЁГўГ* ïîä ГЁГ*äåêñîì i */
        sumArr[i] = 0;
        sumArr[i] += sumDigits(arr[i]); /* óâåëè÷èâГ*ГҐГ¬ Г*Г* ðåçóëüòГ*ГІ, âîçâðГ*Г№Г*åìûé 
                                           ГґГіГ*êöèåé sumDigits, ïðèГ*ГЁГ¬Г*ГѕГ№ГҐГ© Гў 
                                           ГЄГ*Г·ГҐГ±ГІГўГҐ Г*ðãóìåГ*ГІГ* ýëåìåГ*ГІГ* Г¬Г*Г±Г±ГЁГўГ* 
                                           arr Г± ГЁГ*äåêñîì i */
    }
    printf("Sum array:\n");
    for (i=0; i < N; i++)
        printf("%d ", sumArr[i]); /* ГІ.ГЄ. Гў òåëå öèêëГ* ГўГ±ГҐГЈГ® îäГ*Г* ñòðîêГ*, ГІГ® ГґГЁГЈГіГ°Г*ûå 
                                   Г±ГЄГ®ГЎГЄГЁ ìîæГ*Г® îïóñòèòü. Âûâîäèì ðåçóëüòГ*ГІ Г*Г* ГЅГЄГ°Г*Г* */
    free (arr); /* îñâîáîæäГ*ГҐГ¬ ГЇГ*ìÿòü */
    free (sumArr);
    return 0; /* Г§Г*âåðøèëîñü ГЎГҐГ§ ïðîáëåì */
}
 
int sumDigits(int x) /* îïèñûâГ*ГҐГ¬ ГґГіГ*êöèþ sumDigits, ïðèГ*ГЁГ¬Г*ГѕГ№ГіГѕ Гў ГЄГ*Г·ГҐГ±ГІГўГҐ ГЇГ*Г°Г*ìåòðГ* 
                        ÷èñëî ГІГЁГЇГ* int ГЁ âîçâðГ*Г№Г*ГѕГ№ГіГѕ ГІГ*êæå ÷èñëî ГІГЁГЇГ* int */
{
    int sum = 0; /* âðåìåГ*Г*Г*Гї ïåðåìåГ*Г*Г*Гї äëÿ ïîäñ÷åòГ* */
    while (x) /* Гў öèêëå ïîêГ* x > 0 */
    {
        sum += x % 10; /* óâåëè÷èâГ*ГҐГ¬ ïåðåìåГ*Г*ГіГѕ Г*Г* îñòГ*òîê îò äåëåГ*ГЁГї x Г*Г* 10 */
        x /= 10; /* x = x / 10; Äåëèì x Г*Г* 10 ГЁ Г§Г*ïèñûâГ*ГҐГ¬ ðåçóëüòГ*ГІ Гў Г*ГҐГЈГ® æå */
    }
    return sum; /* âîçâðГ*Г№Г*ГҐГ¬ ðåçóëüòГ*ГІ ïîäñ÷åòГ* */
}

Объяснение кода листинга программы

  1. Переменные:
    • N (типа int) - количество чисел, которые нужно ввести
    • arr (указатель на массив int) - массив для ввода чисел
    • sumArr (указатель на массив int) - массив для хранения суммы цифр каждого числа
    • i (типа int) - счетчик для цикла ввода чисел
    • x (типа int) - текущее число, сумма цифр которого вычисляется в функции sumDigits
    • sum (типа int) - переменная для хранения суммы цифр числа в функции sumDigits
  2. Ввод и вывод данных:
    • Ввод количества чисел в main() с помощью scanf() и printf()
    • Ввод чисел в arr[] с помощью scanf() в цикле for
    • Вывод суммы цифр каждого числа в sumArr[] с помощью printf() в цикле for
    • Вывод суммы цифр числа x в функции sumDigits()
  3. Выделение памяти:
    • Выделение памяти под массив arr[] с помощью malloc()
    • Выделение памяти под массив sumArr[] с помощью malloc()
    • Освобождение памяти, выделенной под массив arr[] с помощью free()
    • Освобождение памяти, выделенной под массив sumArr[] с помощью free()
  4. Алгоритм:
    • Ввод количества чисел и инициализация массива arr[] и sumArr[] в main()
    • Цикл ввода чисел и вычисление суммы цифр каждого числа в функции sumDigits()
    • Вывод суммы цифр каждого числа в массиве sumArr[] в main()
    • Освобождение памяти и возврат 0 в конце программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.3 из 5
Похожие ответы