Задача: Даны натуральное число [latex]n[/latex], действительные числа [latex] a_{1},\ldots,a_{n} [/latex].
Вычислить:
[latex] a^{2}{1}+\ldots+a^{2}{n} [/latex];Тесты:
n | a | result |
0 | 1, 2 | error: out of range |
2 | 5, 8 | 89 |
3 | 6, 13, 4 | 221 |
4 | 1, 2 | error: incomplete input |
7 | 2, 4, 8, 16, 32, 64, 128 | 21844 |
Код программы:
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 |
#include <stdio.h> int main() { // рабочие переменные int i, n; double r; // ввод количества элементов суммы if( scanf("%d", &n) <= 0 ) { printf("error: missing n\n" ); return 0; } // проверка количества элементов суммы if( n <= 0 ) { printf("error: out of range: n=%d\n", n); return 0; } // ввод чисел " а " for( i = 0, r = 0; i < n; i++ ) { double a = 0; if( scanf("%lf", &a ) <= 0 ) { printf("error: incomplete input of value #%d\n", i); return 0; } // основный цикл вычисления r += a * a; } // вывод результата printf("result: %lf\n", r ); return 0; } |
Код прогрммы на языке Java:
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 |
import java.util.*; import java.lang.*; import java.io.*; class CountApp { public static Integer scanInteger( Scanner in ) { return ( ( in.hasNextInt() ) ? in.nextInt() : null ); } public static Double scanDouble( Scanner in ) { return ( ( in.hasNextDouble() ) ? in.nextDouble() : null ); } public static void main( String[] args ) { // рабочие переменные int i, n; double r; // ввод количества элементов суммы Scanner in = new Scanner(System.in); n = scanInteger( in ); if( n <= 0 ) { System.out.printf("error: missing n\n" ); return; } // проверка количества элементов суммы if( n <= 0 ) { System.out.printf("error: out of range: n=%d\n", n); return; } // ввод чисел " а " for( i = 0, r = 0; i < n; i++ ) { double a = 0; a = scanDouble( in ); if( a <= 0 ) { System.out.printf("error: incomplete input of value #%d\n", i); return; } // основный цикл вычисления r += a * a; } in.close(); // вывод результата System.out.printf("result: %f\n", r ); } } |
Ссылка: https://ideone.com/x0q7r4
План программы:
- Назначение рабочих переменных
- Ввод количества элементов суммы
- Проверка ввода n
- Ввод чисел » а «
- Цикл вычисления
- Вывод результата
Программе задаётся число n элементов суммы и сами элементы. При получении этих данных программа вычисляет сумму. Если количество элементов меньше или равно 0 , программа сообщает о невозможности выполнения операции по суммированию. Входные данные используются по мере ввода, они нигде не сохраняются, т.к. используются единожды для накопления общего результата.
Ссылка на ideone.com: http://ideone.com/dxXr0Q
Такой подход к работе с массивами вполне допустим. Только тогда нужно писать, например, так const int nMax = 256; и double a[nMax];.
Вот только тема работы не массивы. Прочтите задание.
Вы были правы, массив здесь был не нужен, каждое новое введённое значение используется единожды для накопления общего результата.
Точно.
Зачтено, только
— сдвиньте, пожалуйста, return в 32-й строке на положенное ему место.
— исправьте первые два теста