10.03.2012, 18:50 | #1 (permalink) |
Member
Регистрация: 03.01.2012
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите упростить программу, если это возможно, язык C
Программу написала с использованием for и операторов условия, но сомневаюсь, может и без них можно? Буду рада, если кто-то поможет. Вот текст программы: #include <stdio.h> main() { float a[100]; int n; printf("n="); scanf("%d",&n); int i; for(i=0;i<n;i++){ printf("a[%d]=",i); scanf("%f",&a[i]); } float m=0; for(i=0;i<=n-1;i++){ if (a[i]>=0) {m+=a[i];} else {m=m;}} printf("Сумма положительных чисел равна %g \n",m); } |
10.03.2012, 18:50 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Скорее всего проблема уже была решена ранее в других обсуждениях Как подключить музыкальный центр или колонки, если возможно, к компьютеру? Поправьте программу, пожалуйста Помогите написать программу Если кто-то знает о FL-STUDIO - помогите! Помогите написать программу Если смысл изучать 1С прог, если... |
10.03.2012, 20:42 | #2 (permalink) |
Member
Регистрация: 03.01.2012
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
И еще помогите исправить программу:
Нужно опять же имея n чисел, введенных с клавиатуры, найти минимальное нечетное число. Язык Си. При отладке выдает сообщение: invalid operands to binary %. Вот текст проги: #include <stdio.h> main() { float a[100]; int n; printf("n="); scanf("%d",&n); int i; for(i=0;i<n;i++){ printf("a[%d]=",i); scanf("%f",&a[i]); } int min=0; for(i=1;i<=n-1;i++){ if ((a[i]<a[min])&&(a[i]%2!=0)){ min=i; } } printf("Минимальное нечетное число равно %g \n",a[min]); } |
10.03.2012, 21:02 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Я, правда, в С ни бельмеса, потому могу ошибаться, но вижу три "странности":
1. float a[100]; То есть Вы определяете тип массива, как вещественный. Если так, то это неправильно: во-первых, вещественные числа не могут быть четными или нечетными, а во-вторых, операция вычисления остатка a[i]%2!=0 для них некорректна. 2. int min=0; Исходное значение минимума следует брать либо заведомо бОльшим, чем все элементы массива, либо равным первому из элементов (а в С он имеет нулевой номер) и начинать перебор со следующего, т.е. с номера 1. 3. Ну и как следствие - непонятно, почему Вы ставите такие пределы 1 - (n-1) в цикле перебора. |
10.03.2012, 22:28 | #4 (permalink) |
Member
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
|
Учитесь оформлять код... На небольших программах он еще читабелен а вот на больших будет кошмар. Так, что приучайтесь сейчас)
+ стоит исходники оформлять в ббкоде [ Code ] исходник [ / Code ] (все без пробелов) Вот первая программа Код:
#include <stdio.h> main(){ float a, m=0; int n; printf("n="); scanf("%d", &n); for(int i=0; i<n; i++){ printf("a[%d]=", i+1); scanf("%f", &a); if (a > 0){ m += a; } } printf("Сумма положительных чисел равна %g \n",m); } Последний раз редактировалось kreol; 10.03.2012 в 22:38 |
10.03.2012, 23:10 | #5 (permalink) |
Member
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
|
Вторую программу как упростить особо не знаю...
Исправил на целочисленный тип и обработку если нету вообще нечетных чисел Код:
#include <stdio.h> main(){ int n, i, a[100], min=0; printf("n="); scanf("%d", &n); for(i=0; i < n; i++){ printf("a[%d]=", i); scanf("%d", &a[i]); } for(i=1; i <= n-1; i++){ if ((a[i] < a[min]) && (a[i]%2 != 0)){ min=i; } } if (a[min]%2 != 0){ printf("Минимальное нечетное число равно %d \n",a[min]); } else{ printf("Минимального нечетного числа нету \n"); } } Последний раз редактировалось kreol; 10.03.2012 в 23:16 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
11.03.2012, 21:46 | #7 (permalink) |
Member
Регистрация: 03.01.2012
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо за помощь!
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|