Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Помогите отыскать ошибку в программе на C.  (Прочитано 2978 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Санчо42

  • Автор темы
  • Активист
  • *
  • Сообщений: 424
    • Просмотр профиля
Дан массив целых чисел - Y[12][4]
Необходимо в каждой строке массива найти минимальный элемент и вывести их в столбик
Вот мой код
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
   /*Описание переменных*/
   int i,j,min,max,Y[12][4]={{1,2,3,4},{5,6,7,8},{-1,-2,-3,-4},{-5,-6,-7,-8},{1,2,3,4},{5,6,7,8},{-1,-2,-3,-4},{-5,-6,-7,-8},{1,2,3,4},{5,6,7,8},{-1,-2,-3,-4},{-5,-6,-7,-8}};
   /**/
   min=Y[0][0];
   for (i=0;i<12;i++)
   {
    for (j=0;j<4;j++)
        {
            if (min>Y[i][j]){
            min=Y[i][j];}
            if (j=3){
            printf("%d",min);}

        }
        printf("\n");
        min=Y[i+1][0];
   }
     system("PAUSE");
  return 0;
}
А вот вывод
1
5
-1
-5
1
5
-1
-5
1
5
-1
-5
Для продолжения нажмите любую клавишу . . .
Видно, что положительные строки обрабатываются нормально, а вот в отрицательных не работает присваивание (или что-то другое) - в чем может быть дело?
Asus K55DR  AMD A-10 (HD7660+HD7470) 6Gb/1Tb

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #1 : 31 Октября 2012, 22:51:14 »
Во-первых
            if (j==3){
найди отличие  ;)
« Последнее редактирование: 09 Ноября 2012, 21:42:04 от SergeyIT »
Извините, я все еще учусь

Оффлайн Санчо42

  • Автор темы
  • Активист
  • *
  • Сообщений: 424
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #2 : 31 Октября 2012, 22:58:18 »
Во-первых
            if (j==3){
найди отлтчие  ;)
Спасибо, третий раз допускаю похожую ошибку, не могу отвыкнуть от паскаля
Asus K55DR  AMD A-10 (HD7660+HD7470) 6Gb/1Tb

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #3 : 31 Октября 2012, 23:06:37 »
Не оправдывайся!  ;) Дело не в Паскале, а в отсутствии привычки предупреждения читать
.....
.....main.c:16:13: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
......main.c:7:16: warning: unused variable ‘max’ [-Wunused-variable]
.....
----------Build Ended----------
0 errors, 2 warnings
Извините, я все еще учусь

Оффлайн Санчо42

  • Автор темы
  • Активист
  • *
  • Сообщений: 424
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #4 : 31 Октября 2012, 23:15:37 »
Не оправдывайся!  ;) Дело не в Паскале, а в отсутствии привычки предупреждения читать
Читаю по английски - но не перевожу...
Asus K55DR  AMD A-10 (HD7660+HD7470) 6Gb/1Tb

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Извините, я все еще учусь

Оффлайн Санчо42

  • Автор темы
  • Активист
  • *
  • Сообщений: 424
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #6 : 31 Октября 2012, 23:34:10 »
предлагаю скобки вокруг назначения используются в качестве истинного значения - всё стало понятнее
Asus K55DR  AMD A-10 (HD7660+HD7470) 6Gb/1Tb

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #7 : 01 Ноября 2012, 09:16:25 »
Здесь он тебе говорит что:
Цитировать
А-та-та.. у тебя присваивание вместо сравнения. Конструкция языка разрешенная, и иногда полезная, но в 99% случаев это просто косяк.
Если ты реально хочешь там написать присваивание надо это выражение дополнительно взять в скобки чтобы компилятор понял что ты имел в виду именно то что написал и не ругался на само присваивание.
Аля if ((n=3)) /* ну и условие пипец... */,
и тут бы компилятору самое время сказать:
Цитировать
А-та-та... у тебя условие всегда истина и смысла в этом нет...
Но видимо раз ставишь скобки, то лучше компилятора знаешь что там должно быть, поэтому сам себе злобный Буратино.

Стало понятнее?
Учи английский. Без него ты только 2+2 сможешь написать. увы. ну или 1Сником стать. не такой уж плохой вариант.

P.S. system("PAUSE"); ЖЖОТ напалмом!
« Последнее редактирование: 01 Ноября 2012, 09:18:18 от Yurror »

Оффлайн Санчо42

  • Автор темы
  • Активист
  • *
  • Сообщений: 424
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #8 : 01 Ноября 2012, 23:24:01 »
английский в процессе.
А чем вас развеселил оператор system("PAUSE");? Он же вроде окно задерживает, чтобы результат прочитать.
Asus K55DR  AMD A-10 (HD7660+HD7470) 6Gb/1Tb

Оффлайн hippi90

  • Активист
  • *
  • Сообщений: 433
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #9 : 01 Ноября 2012, 23:35:56 »
А чем вас развеселил оператор system("PAUSE");? Он же вроде окно задерживает, чтобы результат прочитать.
man 3 sleep

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #10 : 01 Ноября 2012, 23:42:19 »
В терминале man pause
В коде pause();
Хотя бы так.
А можно scanf использовать, ждать ввода...
Извините, я все еще учусь

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #11 : 02 Ноября 2012, 07:31:49 »
1)
yurik@yurik-pc:~$ PAUSE
PAUSE: команда не найдена
Этим и развеселил. Нет таких команд. И на надо дурацкие привычки из винды таскать.

2) да и не оператор это вовсе. system("PAUSE"); просто вызов функции которая запустит стандартную оболочку и выполнит команду которую вы указали.

Блин, ну хоть немного надо разбираться что творите.

Оффлайн Санчо42

  • Автор темы
  • Активист
  • *
  • Сообщений: 424
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #12 : 02 Ноября 2012, 20:21:25 »
Yurror,
1) я прекрасно во всем разбираюсь
2) Я учусь программировать, если бы был профи сюда бы не ходил.
3) разве точка с запятой не операторы разделяет? В данном случае - оператор функция system c аргументом pause. Знаете способ получше - подскажите. scanf не покатит - зачем загружать программу лишними функциями?
4) Пишу под вендой :-\
Asus K55DR  AMD A-10 (HD7660+HD7470) 6Gb/1Tb

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #13 : 02 Ноября 2012, 21:07:11 »
4) Пишу под вендой :-\
А здесь чего тогда?
Извините, я все еще учусь

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Помогите отыскать ошибку в программе на C.
« Ответ #14 : 03 Ноября 2012, 13:25:23 »
Санчо18,
пункт 3 мимо.

 

Страница сгенерирована за 0.02 секунд. Запросов: 21.