Я знаю как делать именно это задание, но как делать другие?
В чем заключается основа?
C/C++
Программирование на СИ "Написать программу подсчёта суммы нечётных элементов из 20 введенных"
И как же делается такое задание? Строго говоря, работать тут всё будет нормально и без ограничений только при выборе спецтипа данных "целые числа любой длины". На плюсах это делается так:
#include <gmpxx.h>
#include <iostream>
using namespace std; int main() { int i, j = 0;
mpz_class x, s; s = "0"; for (i = 0; i < 20; i++)
{ cin >> x; if (x / 2 * 2 != x) { j++; s += x; } }
if (j) cout << s; return 0; }
А теперь попробуйте сделать то же самое на чистом Си! Получится у Вас хоть что-то? Честно говоря, сомневаюсь...
А теперь попробуем сделать то же самое на чистом Си со стандартными типами данных. Во-первых, сразу же возникают ограничения: если описывать очередное вводимое число типом long, то такие числа можно брать лишь в пределах плюс-минус пара с чем-то миллиардов и тогда сумму лучше делать другого типа, а именно long long, иначе может произойти выход за границы диапазона. Такие ограничения неизбежны и поэтому это всё (типы данных то есть) надо продумывать заранее. Во-вторых, а если среди введённых чисел нет нечётных? Что тогда делать? Это тоже надо продумывать заранее! Также как и саму проверку вводимых чисел на нечётность.
#include <stdio.h>
int main() { long i, j = 0, x; long long s = 0;
for (i = 0; i < 20; i++) { scanf("%d", &x); if (x & 1)
{ j++; s += x; } } if (j) printf("%lld\n", s); return 0; }
В этой программе проверка на нечётность совершенно другая чем в программе до неё. А почему - надеюсь хоть понятно? Теперь ещё такой вопрос: а программа вообще какая должна быть - в виде небольшого консольного приложения без перехвата ошибок в результате неверного ввода двадцатиэлементного списка или же, наоборот, интерфейсным приложением и с перехватом ошибок ввода, если они есть? Это же с самого начала надо специально оговаривать в спецификации задачи, потому что, например, я могу это сделать и так и сяк, причём как на чистом Си, так и на плюсах. Вот из всех этих соображений возникает примерно такой план: 1) спецификация задачи с уточнением деталей; 2) тщательное продумывание всех деталей; 3) использование наиболее подходящих средств решение задачи в её детальной спецификации и объединение их в готовый корректно работающий код; 4) испытания разработанной программы, а если в ней что-то не понравится можно воспользоваться какими-нибудь другими решениями; и ещё возможна переспецификация задачи на стадии разработки и испытаний программы, возвращающая нас к первому пункту с дальнейшим итерационным проходом по всем пунктам, который может быть к тому же и многоэтапным (это как писатель по 20-30 раз может переписывать свой роман). И саму эту основу из четырёх перечисленных пунктов тоже можно менять. А для более масштабных задач надо ещё предусмотреть методы декомпозиции...
#include <gmpxx.h>
#include <iostream>
using namespace std; int main() { int i, j = 0;
mpz_class x, s; s = "0"; for (i = 0; i < 20; i++)
{ cin >> x; if (x / 2 * 2 != x) { j++; s += x; } }
if (j) cout << s; return 0; }
А теперь попробуйте сделать то же самое на чистом Си! Получится у Вас хоть что-то? Честно говоря, сомневаюсь...
А теперь попробуем сделать то же самое на чистом Си со стандартными типами данных. Во-первых, сразу же возникают ограничения: если описывать очередное вводимое число типом long, то такие числа можно брать лишь в пределах плюс-минус пара с чем-то миллиардов и тогда сумму лучше делать другого типа, а именно long long, иначе может произойти выход за границы диапазона. Такие ограничения неизбежны и поэтому это всё (типы данных то есть) надо продумывать заранее. Во-вторых, а если среди введённых чисел нет нечётных? Что тогда делать? Это тоже надо продумывать заранее! Также как и саму проверку вводимых чисел на нечётность.
#include <stdio.h>
int main() { long i, j = 0, x; long long s = 0;
for (i = 0; i < 20; i++) { scanf("%d", &x); if (x & 1)
{ j++; s += x; } } if (j) printf("%lld\n", s); return 0; }
В этой программе проверка на нечётность совершенно другая чем в программе до неё. А почему - надеюсь хоть понятно? Теперь ещё такой вопрос: а программа вообще какая должна быть - в виде небольшого консольного приложения без перехвата ошибок в результате неверного ввода двадцатиэлементного списка или же, наоборот, интерфейсным приложением и с перехватом ошибок ввода, если они есть? Это же с самого начала надо специально оговаривать в спецификации задачи, потому что, например, я могу это сделать и так и сяк, причём как на чистом Си, так и на плюсах. Вот из всех этих соображений возникает примерно такой план: 1) спецификация задачи с уточнением деталей; 2) тщательное продумывание всех деталей; 3) использование наиболее подходящих средств решение задачи в её детальной спецификации и объединение их в готовый корректно работающий код; 4) испытания разработанной программы, а если в ней что-то не понравится можно воспользоваться какими-нибудь другими решениями; и ещё возможна переспецификация задачи на стадии разработки и испытаний программы, возвращающая нас к первому пункту с дальнейшим итерационным проходом по всем пунктам, который может быть к тому же и многоэтапным (это как писатель по 20-30 раз может переписывать свой роман). И саму эту основу из четырёх перечисленных пунктов тоже можно менять. А для более масштабных задач надо ещё предусмотреть методы декомпозиции...
Основа - знать как вводить и выводить числа и как пишется цикл, это во всех программах. Остальное пустяк.
Ничё се, всё знает.
Да ты значит кульхацкер ;)
Да ты значит кульхацкер ;)
Похожие вопросы
- Найти сумму нечетных элементов, стоящих на нечетных местах (то есть имеющих нечетные номера).
- Составьте алгоритм и напишите программу вычисления суммы n членов ряда согласно условию задачи
- Написать программу на языке Си
- Написать программу на языке программирования Си.
- Дана матрица nxn, вычислить суммы диагональных элементов( главной и побочной ) отдельно, но в одной функции на языке си.
- Помогите пожалуйста написать программу на Си
- Вычислить произведение нечетных элементов массива В с++
- С++ | Как заменить макс. элементы (могут быть введены любые) массива на нули и вывести изменённый массив уже с нолями?!
- Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде
- Написать программы на СИ