• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите упростить программу, если это возможно, язык C

brokilone

Новые
Регистрация
3 Янв 2012
Сообщения
21
Реакции
0
Баллы
0
Помогите упростить программу, если это возможно, язык 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);
}
float m=0;
for(i=0;i<=n-1;i++){
if (a>=0)
{m+=a;}
else
{m=m;}}
printf("Сумма положительных чисел равна %g \n",m);
}
 
И еще помогите исправить программу:
Нужно опять же имея 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);
}
int min=0;
for(i=1;i<=n-1;i++){
if ((a<a[min])&&(a%2!=0)){
min=i;
}
}
printf("Минимальное нечетное число равно %g \n",a[min]);
}
 
Я, правда, в С ни бельмеса, потому могу ошибаться, но вижу три "странности":
1. float a[100]; То есть Вы определяете тип массива, как вещественный. Если так, то это неправильно: во-первых, вещественные числа не могут быть четными или нечетными, а во-вторых, операция вычисления остатка a%2!=0 для них некорректна.
2. int min=0; Исходное значение минимума следует брать либо заведомо бОльшим, чем все элементы массива, либо равным первому из элементов (а в С он имеет нулевой номер) и начинать перебор со следующего, т.е. с номера 1.
3. Ну и как следствие - непонятно, почему Вы ставите такие пределы 1 - (n-1) в цикле перебора.
 
Учитесь оформлять код... На небольших программах он еще читабелен а вот на больших будет кошмар. Так, что приучайтесь сейчас)
+ стоит исходники оформлять в ббкоде [ 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);
}
 
Последнее редактирование:
Вторую программу как упростить особо не знаю...
Исправил на целочисленный тип и обработку если нету вообще нечетных чисел
Код:
#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");
 }
}
 
Последнее редактирование:
Я, правда, в С ни бельмеса, потому могу ошибаться, но вижу три "странности":
А, "доехало". Тут несколько другой алгоритм применяется. Тогда возражения 2 и 3 снимаются. Всё правильно.
 
Назад
Сверху