Составить массив сумм цифр элементов (из готового кода 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; /* âîçâðГ*Г№Г*ГҐГ¬ ðåçóëüòГ*ГІ ïîäñ÷åòГ* */ }
Объяснение кода листинга программы
- Переменные:
- N (типа int) - количество чисел, которые нужно ввести
- arr (указатель на массив int) - массив для ввода чисел
- sumArr (указатель на массив int) - массив для хранения суммы цифр каждого числа
- i (типа int) - счетчик для цикла ввода чисел
- x (типа int) - текущее число, сумма цифр которого вычисляется в функции sumDigits
- sum (типа int) - переменная для хранения суммы цифр числа в функции sumDigits
- Ввод и вывод данных:
- Ввод количества чисел в main() с помощью scanf() и printf()
- Ввод чисел в arr[] с помощью scanf() в цикле for
- Вывод суммы цифр каждого числа в sumArr[] с помощью printf() в цикле for
- Вывод суммы цифр числа x в функции sumDigits()
- Выделение памяти:
- Выделение памяти под массив arr[] с помощью malloc()
- Выделение памяти под массив sumArr[] с помощью malloc()
- Освобождение памяти, выделенной под массив arr[] с помощью free()
- Освобождение памяти, выделенной под массив sumArr[] с помощью free()
- Алгоритм:
- Ввод количества чисел и инициализация массива arr[] и sumArr[] в main()
- Цикл ввода чисел и вычисление суммы цифр каждого числа в функции sumDigits()
- Вывод суммы цифр каждого числа в массиве sumArr[] в main()
- Освобождение памяти и возврат 0 в конце программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д