Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 071

Раздел: C++
/ вопрос открыт /

Приветствую, уважаемые эксперты! Подскажите в чем ошибка в моей программе, сделал, запускается но когда ввожу не считает нечего.
Условие задачи: дана последовотельность n троек (a, b, c) где a,b,c - целые числа. Посчитать количество троек, у которых хотя бы одно число равно нулю, и посчитать суму всех цифр у таких тройках. Создать процедуру, которая проверяет, есть ли в тройке ноль, и если есть то процедура считает суму цифр тройки.

Приложение:
  1. #include <stdio.h>
  2. #include <conio.h>
  3. int triyka(int a, int b, int c, int *d);
  4. int main(void)
  5. {int a,b,c,n,i,K=0, S=0, e;
  6. printf("vvedite nn");
  7. scanf("%d",&n);
  8. for (i=1; i<=n; i++)
  9. {printf("vvedite a b cn");
  10. scanf("%d %d %d",&a , &b , &c);
  11. S+=triyka(a,b,c,&e);
  12. K+=e;
  13. }
  14. printf("kilkist triyok=%dn", K);
  15. printf("suma triyok=%dn", S);
  16. getch();
  17. return 0;
  18. }
  19. int triyka(int a, int b, int c, int *d)
  20. { if ((a=0) || (b=0) || (c=0))
  21. { *d=1;
  22. return (a+b+c);
  23. }
  24. else *d=0;
  25. return 0;
  26. }


Дементьев Евгений Владимирович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Дементьев Евгений Владимирович (статус: Посетитель)
Вопрос отправлен: 21 апреля 2010, 10:25
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Дементьев Евгений Владимирович!
Ошибка - классика жанра:) в с/с++ равно это ==. А одно равно, это присвоить. a=0 присвоит ноль и его же и возвратит. Ноль - это ложь, поэтому условие не выполняется:)

#include <stdio.h>
 
int triyka(int a, int b, int c, int *d);
int main(void)
{
    int a,b,c,n,i,K=0, S=0, e;
    printf("vvedite n\n");
    scanf("%d",&n);
    for (i=1; i<=n; i++) {
        printf("vvedite a b c\n");
        scanf("%d %d %d",&a , &b , &c);
        S+=triyka(a,b,c,&e);
        K+=e;
    }
    printf("kilkist triyok=%d\n", K);
    printf("suma triyok=%d\n", S);
    return 0;
}
 
int triyka(int a, int b, int c, int *d)
{
    if ((a==0) || (b==0) || (c==0)) {
        *d=1;
        return (a+b+c);
    }
    else
        *d=0;
    return 0;
}

P.S. учитесь форматировать код.
P.S.S код считает сумму чисел, а не цифр. Ваш код делал тоже.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 21 апреля 2010, 10:44
Оценка за ответ: 5

Комментарий к оценке: Спасибо) я забыл что надо два равно ))

Ответ #2. Отвечает эксперт: min@y™

Я тут тоже переделал немного и отладил. Всё работает.

#include <stdio.h>
#include <conio.h>
 
int triyka(int a, int b, int c, int *d)
{
  if (!(a * b * c))
  {
    *d = 1;
    return (a + b + c);
  }
 
  *d = 0;
  return 0;
} // triyka
 
int main(void)
{
  int a, b, c, n, i, K = 0, S = 0, e;
 
  printf("vvedite n: \n");
  scanf("%d", &n);
 
  for (i = 0; i != n; i++)
  {
    printf("vvedite a b c: \n");
    scanf("%d %d %d", &a, &b, &c);
    S += triyka(a, b, c, &e);
    K += e;
  } // for
 
  printf("kilkist triyok = %d\n", K);
  printf("suma triyok = %d\n", S);
 
  getch();
  return 0;
} // main

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 21 апреля 2010, 10:53


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:55
Выполнено за 0.02 сек.