Контрольная работа № 1 и № 2
|
|
Александр_Мазур | Дата: Суббота, 2011-12-17, 0:37 AM | Сообщение # 16 |
Генерал-майор
Группа: Администраторы
Сообщений: 339
Статус: Offline
| Code #include <stdio.h> unsigned sum(unsigned n) { return (n) ? n + sum(n-1) : 0; } int main (void){ unsigned n;
while ( printf ("number:"") && scanf ("%u", &n) ==1 ) printf ("Sum: %u\n", sum(n));
return 0; } Вроде так, но могу ошибаться..
|
|
| |
Александр_Дабижа | Дата: Воскресенье, 2011-12-18, 0:19 AM | Сообщение # 17 |
 Лейтенант
Группа: Администраторы
Сообщений: 79
Статус: Offline
| Э-э-х. Главное что бы не спросили как она работает . Саша, спасибо.
http://www.solid-surface.com.ua/
|
|
| |
Николай_Данелюк | Дата: Воскресенье, 2011-12-18, 2:47 AM | Сообщение # 18 |
 Майор
Группа: Администраторы
Сообщений: 86
Статус: Offline
| Quote (Александр_Мазур) Code #include <stdio.h> unsigned sum(unsigned n) { return (n) ? n + sum(n-1) : 0; } int main (void){ unsigned n;
while ( printf ("number:"") && scanf ("%u", &n) ==1 ) printf ("Sum: %u\n", sum(n));
return 0; }
Саша я не вижу определения массива. Никогда в С/С++ не определяется переменная ключевым словом unsigned. Это приставка к типу данных. конкретизация. Пример: unsigned int n; unsigned short n;
Конкретизация в данном случае - переменная может принимать только положительное значение. Читаем в документации по С/С++ основные типы данных =) Александр_Дабижа, У меня вроде такое же задание, если не ошибаюсь, то 23. Завтра буду делать свой вариант и кидану сюда реализацию алгоритма.
И еще... определение массива в С/С++:
<тип> <имя>[<размерность>] = {размерность0, ..., размерность(N-1)}; где:
тип - тип данных в массиве; имя - имя массива размерность - количество элементов в массиве (N); размерность0, ..., размерность(N-1) - первый, ..., последний элемент массива. Нумерация (адресация) массива в С/С++ начинается с нулевого индекса. Последний элемент индексируется как (размерность массива (кол-во элементов) - 1). Хочу заметить, что это статические массивы, размерность указывается на этапе компиляции, не во время выполнения программы.
в данном случае цикл перебора элементов массива для его заполнения выглядит так:
int N = <mass_size>; int mass[N];
// Заполнение массива последовательными целыми числами: 1,2,3,4 и т.д. for(int i = 0; i < N; i++) { mass[i] = i + 1; }
_______________ ICQ: 387-883-476
|
|
| |
Александр_Мазур | Дата: Воскресенье, 2011-12-18, 1:27 PM | Сообщение # 19 |
Генерал-майор
Группа: Администраторы
Сообщений: 339
Статус: Offline
| Quote Вроде так, но могу ошибаться.. Еще не силен в си... но всему свое время=)
|
|
| |
Николай_Данелюк | Дата: Понедельник, 2011-12-19, 10:49 AM | Сообщение # 20 |
 Майор
Группа: Администраторы
Сообщений: 86
Статус: Offline
| #include <iostream> #include <time.h> #include <locale.h>
using namespace std; // Прототип нашей функции: int Summ(int *arr, int index);
int main() { srand(time(NULL)); setlocale(LC_ALL,"Russian"); int N; cout << "Введите размерность массива (N). Только положительное число: "; cin >> N;
// Инициализация динамического массива int *mass = new int[N]; for(int i = 0; i < N; i++) { // Заполнение элементов массива псевдослучайными числами от 1 до 100: mass[i] = 1 + rand()%100; cout << "mass[" << i << "] = " << mass[i] <<endl; } // Первый вызов рекурсивной функции с параметрами 1 - массив (указатель на массив), 2 - индекс элемента массива (в данном случае индекс последнего) cout << "Результат суммы элементов массива: " << Summ(mass, N - 1) << endl; system("pause"); delete[] mass; // чистим за собой =) return 0; } // Реализация нашей функции int Summ(int *arr, int index) { if (index == 0) { return *arr; } else return *(arr + index) + Summ(arr, index - 1); }
Собственно функция складывает (суммирует) элементы массива между собой, начиная с последнего (arr[N-1]), заканчивая первым (arr[0]). В этом сорце используется динамический массив (куча), инициированный по указателю на него - размерность динамической памяти можно указать во время выполнения программы, а не на момент компиляции, как это происходит со статическими массивами
_______________ ICQ: 387-883-476
|
|
| |
Александр_Дабижа | Дата: Среда, 2012-01-18, 10:10 AM | Сообщение # 21 |
 Лейтенант
Группа: Администраторы
Сообщений: 79
Статус: Offline
| Коля, спасибо!
http://www.solid-surface.com.ua/
|
|
| |