Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 10.03.2012, 18:50   #1 (permalink)
brokilone
Member
 
Регистрация: 03.01.2012
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите упростить программу, если это возможно, язык C

Суть задачи: имея n чисел, вводимых с клавиатуры, найти сумму всех положительных чисел. Язык C. Из операторов цикла использовать только for.
Программу написала с использованием 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);
}
brokilone вне форума   Ответить с цитированием

Старый 10.03.2012, 18:50
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Скорее всего проблема уже была решена ранее в других обсуждениях

Как подключить музыкальный центр или колонки, если возможно, к компьютеру?
Поправьте программу, пожалуйста
Помогите написать программу
Если кто-то знает о FL-STUDIO - помогите!
Помогите написать программу
Если смысл изучать 1С прог, если...

Старый 10.03.2012, 20:42   #2 (permalink)
brokilone
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]);
}
brokilone вне форума   Ответить с цитированием
Старый 10.03.2012, 21:02   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 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) в цикле перебора.
Vladimir_S вне форума   Ответить с цитированием
Старый 10.03.2012, 22:28   #4 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 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
kreol вне форума   Ответить с цитированием
Старый 10.03.2012, 23:10   #5 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 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
kreol вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 11.03.2012, 10:05   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Я, правда, в С ни бельмеса, потому могу ошибаться, но вижу три "странности":
А, "доехало". Тут несколько другой алгоритм применяется. Тогда возражения 2 и 3 снимаются. Всё правильно.
Vladimir_S вне форума   Ответить с цитированием
Старый 11.03.2012, 21:46   #7 (permalink)
brokilone
Member
 
Регистрация: 03.01.2012
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо за помощь!
brokilone вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 03:48.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.