Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: помогите найти ошибку  (Прочитано 27733 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mr_madik_7
Интересующийся

kz
Offline Offline

« : 20-09-2011 13:36 » 

задача:определите длину наибольшего постоянного участка, т.е. максимальное количество подряд идущих элементов с одним и тем же значением.
Код:
Код: (C++)
#include <stdio.h>
int main () {
   int prev,cur,count=1,max=1,x;
   FILE *fp;
   fp=fopen("4.txt","r");
   fscanf(fp,"%d",&cur);
   prev=cur;
   while (fscanf (fp,"%d",&cur)==1) {
      if (prev==cur) {
         count++;
         x=count;
         prev=cur;
      } else {
         if (max<x) {
            max=x;
            count=1;
            prev=cur;
         } else (prev!=cur);
     {
        prev=cur;
      }
      }
   }
   if (max<x) {
      max=x;
   }
   printf ("%d\n",max);
   fclose(fp);
   return 0;
}
« Последнее редактирование: 20-09-2011 13:59 от Finch » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 20-09-2011 14:00 » 

В коде не разбирался. Но после условия if (max<x) У тебя что то не ладное творится.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #2 : 20-09-2011 14:12 » 

Там мне кажется не важно что творится). Главная ошибка здесь:
Если самый длинный участок находится в начале или в середине файла, то программа правильно вычисляет число повторяющихся цифр.
Если самый длинный участок находится в конце файла, то пример 1) вычисляется точнее, чем пример 2)
1) ... 7 8 8 8 8 7 9 9 9 9 9 9 9 9 9;
2) ... 7 8 8 8 8 9 9 9 9 9 9 9 9 9.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 20-09-2011 14:28 » 

else (prev!=cur); Это что? Компилятор не падает, потому что с точки синтаксиса вроде бы корректно. Но в логике непонятно.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 20-09-2011 14:33 » 

Код:
while (fscanf (fp,"%d",&cur)==1) {
    if (prev==cur) {
count++;
x=count;
prev=cur;
    } else {
if (max<x) {
max=x;
count=1;
prev=cur;
        } else (prev!=cur);
        prev=cur;
    }
}

Кто-нибудь мне объяснит тайный ход мысли
(prev!=cur)

Ага... не только я надолго задумался...
« Последнее редактирование: 20-09-2011 14:35 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 20-09-2011 14:38 » 

Твой код можно чуть чуть сократить без изменений функциональности.
Код: (C++)
#include <stdio.h>
int main () {
   int prev,cur,count=1,max=1;
   FILE *fp;
   fp=fopen("4.txt","r");
   fscanf(fp,"%d",&cur);
   prev=cur;
   while (fscanf(fp, "%d", &cur) == 1) {
      if (prev == cur) {
         count++;
      } else {
         if (max < count) {
            max=count;
            count=1;
            prev=cur;
         }
      }
   }
   if (max < count) {
      max=count;
   }
   printf ("%d\n",max);
   fclose(fp);
   return 0;
}
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #6 : 20-09-2011 15:14 » 

Твой код можно чуть чуть сократить без изменений функциональности.
Код: (C++)
#include <stdio.h>
int main () {
   int prev,cur,count=1,max=1;
   FILE *fp;
   fp=fopen("4.txt","r");
   fscanf(fp,"%d",&cur);
   prev=cur;
   while (fscanf(fp, "%d", &cur) == 1) {
      if (prev == cur) {
         count++;
      } else {
         if (max < count) {
            max=count;
            count=1;
            prev=cur;
         }
      }
   }
   if (max < count) {
      max=count;
   }
   printf ("%d\n",max);
   fclose(fp);
   return 0;
}
После первого if я думаю надо добавить prev=cur;

Добавлено через 33 минуты и 25 секунд:
Спасибо большое Finch! Я немного подправил твой код и вот что получилось:

Код: (C++)
#include <stdio.h>
int main () {
   int prev,cur,count=1,max=1;
   FILE *fp;
   fp=fopen("4.txt","r");
   fscanf(fp,"%d",&cur);
   prev=cur;
   while (fscanf(fp, "%d", &cur) == 1) {
      if (prev == cur) {
         count++;
         prev=cur;
      } else {
         if (max < count) {
            max=count;
            count=1;
            prev=cur;
         }
                 else (max>=count);{
                         count=1;
                         prev=cur;
                 }
      }
   }
   if (max < count) {
      max=count;
   }
   printf ("%d\n",max);
   fclose(fp);
   return 0;
}
Добавлено через 18 секунд:
Все работает!)
« Последнее редактирование: 20-09-2011 17:01 от Джон » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 20-09-2011 17:00 » 

mr_madik_7, Логический смысл строчки prev=cur в этом куске?
Код: (C++)
      if (prev == cur) {
         count++;
         prev=cur;
      }
Также объясни логический смысл else (max>=count);
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 20-09-2011 18:15 » 

Offtopic:
... не, я завязал.
Поставлю в угол.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #9 : 21-09-2011 12:24 » 

mr_madik_7, Логический смысл строчки prev=cur в этом куске?
Код: (C++)
      if (prev == cur) {
         count++;
         prev=cur;
      }
Также объясни логический смысл else (max>=count);


Если убрать prev=cur, то на следующем шаге в "prev"е будет заложено значение препредыдущего.
По второму вопросу:я добавил этот кусок чтобы сбить счетчик, в том случае если max>=count.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 21-09-2011 12:32 » 

mr_madik_7,
прочитай вслух, с выражением
Код: (C)
    if (prev == cur) {
         count++;
         prev=cur;
      }
вслушиваясь в каждое слово
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #11 : 21-09-2011 12:40 » 

Код верный, я не понимаю что вам не нравится

Добавлено через 2 минуты и 46 секунд:
Если предыдущий равен текущему, то к счетчику прибавить единицу и предыдущему присвоить значение текущего!!!
« Последнее редактирование: 21-09-2011 12:42 от mr_madik_7 » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 21-09-2011 12:55 » 

А зачем присваивать? Они уже равны!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 21-09-2011 13:26 » 

Если предыдущий равен текущему, то к счетчику прибавить единицу и предыдущему присвоить значение текущего!!!
Вслух получилось, а вот с выражением - нет.
RXL не выдержал и подсказал.

Код действительно верный. Присваивание работе не помешает, но увеличивает код Улыбаюсь
Существует иногда необходимость выравнивания веток переходов по длине кода, но для этого их выравнивают "пустыми" операциями.
В твоем случае присваивание - пустое.

зы 1. А потом сам удивляешься, почему все висит.
зы 2. Здесь может возникнуть спор о преждевременной оптимизации.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #14 : 21-09-2011 15:05 » 

Sla, спасибо. приму во внимание твои советы)
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 21-09-2011 15:33 » 

У тебя есть блок объявления переменных
max = 1
count =1

Теперь подходим к основному блоку
я ВСЛУХ читаю твой код
Открыл файл
Прочитал символ
Предыдущий равен Текущему (инициализация алгоритма)
Цикл до конца файла
  Прочитать
  Сравнить
  Если равны, то Инкрементировать счетчик....

Стоп ... А где счетчик инициализирован? Ого как далеко...
Т.е. если тебе требуется инициализировать переменные, то делай это как можно ближе к основному алгоритму.

зы переменные инициализировать нужно всегда.

я например предпочитаю такое, например

k=0;
if TRUE then k = 1

чем

if TRUE
   then k = 1
   else k = 0


 
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 21-09-2011 16:37 » 

Если предыдущий равен текущему, то к счетчику прибавить единицу и предыдущему присвоить значение текущего!!!
RXL не выдержал и подсказал.

Слав, после "прочтения" я уже не мог больше мучить человека. Ну, не понимает он - надо прямо сказать.

Добавлено через 3 минуты:
зы 2. Здесь может возникнуть спор о преждевременной оптимизации.

mr_madik_7, для твоего случая есть очень полезная статья: Оптимизация: ваш злейший враг. Хотя, это, наверно, еще не твой уровень. Тогда просто забудь про оптимизацию вообще, пока не научишься. Просто научись не косячить.
« Последнее редактирование: 21-09-2011 16:42 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #17 : 22-09-2011 12:35 » 

да, я вас не понимаю просто. наверно из-за того что я только начинающий. Еще даже месяц не прошел с того момента как я начал изучать язык Си. НЕ судите строго)
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 22-09-2011 12:47 » 

mr_madik_7, ну что ты? Какие же мы судьи, так... легкий шлепок, чтоб был более внимателен и аккуратен.

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 22-09-2011 12:59 » 

По поводу prev=cur можно так: если что-то одинаково повторяется в обоих ветках условия, то выноси за пределы условия.

Цитата: mr_madik_7
if (max < count) {
            max=count;
            count=1;
            prev=cur;
         }
                 else (max>=count);{
                         count=1;
                         prev=cur;
                 }
Прочитай (опиши словами, как работает) этот кусок. Особенно в районе else.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #20 : 22-09-2011 14:41 » 

Все работает!)

Код верный, я не понимаю что вам не нравится

mr_madik_7, если тебе неоднократно на что-то намекают, то наверное что-то в этом есть? Или? Как ты думаешь?

Ещё раз внимательно посмотри на этот кусок и ты поймёшь, что нам не нравится:

else (max>=count);{
                         count=1;
                         prev=cur;
                 }


Такой код не может быть рабочим, то есть отображать задуманную логику, даже если, как ты утверждаешь, ВСЁ РАБОТАЕТ. Ага
« Последнее редактирование: 22-09-2011 14:44 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #21 : 22-09-2011 14:45 » 

Код:
#include <stdio.h>
int main () {
   int prev,cur,count=1,max=1;
   FILE *fp;
   fp=fopen("4.txt","r");
   fscanf(fp,"%d",&cur);
   prev=cur;
   while (fscanf(fp, "%d", &cur) == 1) {
      if (prev == cur) {
         count++;
prev=cur;
      }
      else {
         if (max < count)
            max=count;
count=1;
prev=cur;
      }
   }
   if (max < count) {
      max=count;
   }
   printf ("%d\n",max);
   fclose(fp);
   return 0;
}

Прислушался к вашим замечаниям)  Думаю вот это самый оптимальный код, хотя ещё не проверял
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 22-09-2011 15:48 » 

mr_madik_7, конечно, код пишется для того, чтобы работала машина. Но код пишется и для того, чтобы люди потом его читали и понимали, как работает машина. Поэтому, чем короче, тем лучше, но без хакерства.

Сравни:
Код: (C++)
bool isNextNumber();
int readNextNumber();

int sizeOfLongestSubsequenceOfTheSameItems()
{
  int sizeOfSubsequenceOfTheSameItems = 0, maxSizeOfSubsequenceOfTheSameItems = 0, previousItem;
  if(isNextNumber())
  {
    previousItem = readNextNumber();
    maxSizeOfSubsequenceOfTheSameItems = sizeOfSubsequenceOfTheSameItems = 1;
  }
  while(isNextNumber())
  {
    int currentItem = readNextNumber();
    if(currentItem != previousItem)
    {
      previousItem = currentItem;
      sizeOfSubsequenceOfTheSameItems = 1;
    }
    else
    {
      sizeOfSubsequenceOfTheSameItems += 1;
    }
    if(maxSizeOfSubsequenceOfTheSameItems < sizeOfSubsequenceOfTheSameItems)
    {
      maxSizeOfSubsequenceOfTheSameItems = sizeOfSubsequenceOfTheSameItems;
    }
  }
  return maxSizeOfSubsequenceOfTheSameItems;
}

Функции isNextNumber и readNextNumber придуманы мною как вспомогательные, чтобы не тащить в алгоритм работу с файлом или чтение с клавиатуры. Алгоритм выделен в отдельную функцию. Если ты этого не понимаешь - пока не важно.

Посмотри, сколько здесь действий (операций присваивания, условий). Сравни со своим вариантом.

P.S. Кстати, посмотри на случаях, когда вообще ни одного числа не прочитано - у тебя результат будет 1, что, очевидно, неправильно.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #23 : 22-09-2011 16:20 » 

Dimka, почитаю на досуге  Улыбаюсь
p.s. этот частный случай мне не нужен, задание не для пустого файла)

И в общем всем спасибо за советы. Думаю ближайшее время буду активным пользователем вашего форума. В основном буду нуждаться консультации)
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 22-09-2011 17:11 » 

mr_madik_7, ты не совсем правильно понял слова Dimka.

Между прочим он привел алгоритм решения твоей задачи, но на, назовем это, формальном языке.

Он не написал функции работы с файлом - открытие и чтение т.к. они ни как на суть алгоритма не влияют.
Попробуй прочитать Димкин текст словами. И ты поймешь разницу
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #25 : 23-09-2011 10:31 » 

Да, я понял. у Димки алгоритм получился намного короче. Попробую применить этот алгоритм.
Результат покажу позже.
P.s. че такое bool?

Добавлено через 23 минуты и 4 секунды:
Ну вроде все:  Внимание! Говорит и показывает...
Код:
#include <stdio.h>
int main () {
   int prev,cur,count=0,max=0;
   FILE *fp;
   fp=fopen("4.txt","r");
   fscanf(fp,"%d",&cur);
   prev=cur;
   max=count=1;
   while (fscanf(fp, "%d", &cur) == 1) {
      if (prev != cur) {
         count=1;
      }
      else {
         count++;
      }
      prev=cur;
      if (max < count) {
      max=count;
      }
   }
   printf ("%d\n",max);
   fclose(fp);
   return 0;
}
« Последнее редактирование: 23-09-2011 11:10 от mr_madik_7 » Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 23-09-2011 11:26 » 

Почти....
Не раскрыт вопрос  пустого файла.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #27 : 23-09-2011 12:13 » 

если честно я не знаю как записать это.
может так?
if (fscanf(fp."%d",&cur)==0)
    count=0;
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 23-09-2011 12:17 » 

Хм... Налицо непонимание текста программы. Шаманство с буковками, продолжающееся до тех пор, пока не заработает.

mr_madik_7, расскажи, зачем ты вообще взялся за программирование? Чего ты хочешь получить в результате выполнения этого учебного задания? Научиться программировать или заставить машину решить данную задачу?
« Последнее редактирование: 23-09-2011 12:19 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #29 : 23-09-2011 13:59 » 

мне надо научиться составлять различные алгоритмы для решения задач. А код, который снизу, я взял и придумал на ходу)
if (fscanf(fp."%d",&cur)==0)
    count=0;
« Последнее редактирование: 23-09-2011 15:13 от mr_madik_7 » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #30 : 23-09-2011 14:24 » 

mr_madik_7, я ведь не спросил, где ты учишься, и что тебе задали. Я спросил, что лично ты хочешь от этой задачи? Научиться программировать, заставить компьютер решить эту задачу или просто получить оценку за выполненную лабораторную работу?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #31 : 23-09-2011 15:14 » 

Научиться программировать! К чему эти вопросы?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #32 : 23-09-2011 17:41 » 

mr_madik_7, к тому, что ты не хочешь учиться программировать. Ты хочешь, чтобы при запуске программа показывала на экране или записывала в файлы) примерно то, что тебе кажется правильным - и всё. В программировании главное не то, что компьютер делает, а то, как обеспечить правильную работу компьютера. Для этого надо сперва точно знать и понимать, что компьютер должен делать (и это не программирование, это постановка задачи), а затем запрограммировать.

Что значит "точно"? Это значит строго логично, как в математике. Поэтому программирование - это раздел математики.

Что значит "правильно"? Это значит, что либо нужно применять особые методы программирования, гарантирующие правильность (но этого ты пока не проходил - скорее всего, это будет в районе 2-го курса); либо, если методы программирования не дают гарантий, применять методы тестирования работы разработанной программы. В обоих случаях ключевым словом является метод - т.е. способ программирования, набор приёмов, правил, подходов и т.д.

Тебе в этой теме пытаются объяснить приёмы, правила и подходы, поскольку по твоему коду видно, что ты их не знаешь. Ты же от них отказываешься, говоря "и так сойдёт". Именно поэтому всем здесь, кроме тебя, очевидно, что программированию ты не учишься, а тебе нравится лишь "кнопки топтать". И это прямо противоположно твоей декларации "хочу научиться программировать".

Твоя задача - это уже поставленная задача. За тебя кто-то её продумал. Тебе не надо заботиться о том, что должен делать компьютер, тебе надо сосредоточиться на том, как чётко и внятно "объяснить" компьютеру, что от него требуется. А тебя как раз почему-то совсем не интересует это как.

Хороший программист (как и любой инженер) - это ленивый человек. Он кровно заинтересован в том, чтобы делать свою работу с наименьшими усилиями со своей стороны. Это называется "быть эффективным". Чтобы программист был эффективным, он должен досконально знать методы программирования и выбирать среди них те, которые в данных условиях наиболее просты и легки.

Ты пока - не программист. Потому что ты не знаешь методов. Если хочешь быть программистом - изучай методы. Это значит, что в учёбе лень и позиция "и так сойдёт" лишь снижают твой потенциал стать хорошим программистом и возможность быть ленивым на работе. Написал решение - думай над тем, как его сделать короче и проще, ищи примеры, разбирай подходы. Это и есть учёба. В результате ты решения таких задач, как твоя, будешь писать за несколько минут с первого раза, сейчас же у тебя на это уходит несколько дней мучений. Это неэффективно. Зато все прошедшие дни (раз уж всё равно время ты тратишь, и быстрее у тебя пока не получается) ты мог бы посвятить не "боданию" со старшими, а опробации различных вариантов решения.

Подумай на досуге над всем сказанным.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #33 : 24-09-2011 10:58 » 

Твоя мысль ясна. Но мне кажется на первых парах все начинающие программисты занимаются "топтанием кнопок". Из всего сказанного я сделал такой вывод: слушать ваши советы; изучать теорию, методы; упрощать свои алгоритмы.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #34 : 24-09-2011 11:16 » 

Цитата
упрощать алгоритмы
Боже упаси...
Не усложнять и не засорять.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #35 : 24-09-2011 11:54 » 

Цитата: mr_madik_7
Но мне кажется на первых парах все начинающие программисты занимаются "топтанием кнопок".
Освой десятипальцевый слепой метод набора в разных раскладках (латиница, кириллица) - и вообще перестань об этом думать. Это должен быть естественный процесс, как ходьба, дыхание. Тогда твои мозги и твоё время освободится для других вещей.

Затем ты освоишь язык программирования (синтаксис), а то и несколько языков - и тоже перестанешь думать, как записываются всякие if, while, функции, структуры данных и т.д. И опять твои мозги и время освободятся для других, более важных вещей. Язык и синтаксис не имеют значения.

Затем ты освоишь основные алгоритмы и структуры данных - массивы, списки, стеки и очереди и другие виды коллекций, операции поиска, выбора, сортировки, потоки данных и их обработку, распараллеливания и синхронизации параллельных потоков. Всё это называется примитивами программирования. При должном опыте их применение не требует особых раздумий. И опять твои мозги и время освободятся для других, более важных вещей.

Наконец, ты познакомишься с архитектурами, шаблонами проектирования. И опять твои мозги освободятся для более важных мыслей. И вот тогда программирование станет для тебя тривиальным занятием, а все сложности будут видеться в области постановки задач и выбора технологий.

Как видишь, топтание кнопок - это освоение профессии машинистки, и к программированию непосредственного отношения не имеет. Когда я учился на программиста, у нас была склонность ставить для себя такие задачи, которые мы не умели решать, чтобы научиться их решать. Простые задачи, которые мы уже умели решать, нам казались неинтересными. Но дело в том, что каждая следующая более сложная задача предполагала, что мы уже научились решать предыдущие более простые задачи, и научились их решать хорошо, доводили решения простых задач до автоматизма, потому что иначе не оставалось времени и мозгов, чтобы подумать о более сложном.

Когда пишешь открытие и чтение из файла, или обработку массива, или поиск максимума, или выбор из списка в 20-й раз, это уже начинает раздражать - хочется быстрее, тогда для себя узнаёшь о библиотеках, объектах и т.п. полезных вещах, которые всё это упрощают.

Цитата: mr_madik_7
Из всего сказанного я сделал такой вывод: слушать ваши советы; изучать теорию, методы; упрощать свои алгоритмы.
Слушать советы и изучать теорию ты всё равно будешь вполуха. Ага Программирование не изучается как теория по книжке. Нужно программировать. А чтобы программировать, нужно постоянно испытывать неудовлетворённость от достигнутого результата.

Взял задачу. Мучался-мучался, наконец, написал, и что-то заработало - радуешься. А на следующий день уже не доволен, уже думаешь "а если так попробовать?", "а если этак?", а вот тут тормозит - как быстрее сделать, а вот тут памяти много уходит - как экономнее, а вот тут длинный, некрасивый и мутный кусок кода - как его упростить и переписать, чтобы красивее было.

Так вот, чего у тебя пока в этой теме не наблюдается, так это недовольства собственным решением. Как только оно у тебя появится, во-первых, ты перестанешь отбрыкиваться от советов (хотя и не обязательно начнёшь им следовать), во-вторых, у тебя появится куча вариантов решений, в-третьих, твой профессиональный уровень начнёт так расти, что обгонит университетскую программу - ты будешь легко выполнять все задания, и тебе даже скучновато станет, зато освободится время для того, что тебе интересно, в-четвёртых, уже на 3-4-м курсе ты легко найдёшь работу или приработку про профессии, а потом не ты будешь искать работу, а работа будет искать тебя.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #36 : 25-09-2011 09:50 » 

мда.. да тебе надо писать мотивирующие книги для программистов Ага
путь к успеху всегда один, будь ты программистом или инженером без разницы. Главное всегда двигаться вперед.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #37 : 25-09-2011 11:55 » 

Цитата: mr_madik_7
Главное всегда двигаться вперед.
Правда, не все почитатели успеха знают, где перед, но двигаются Отлично
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
mr_madik_7
Интересующийся

kz
Offline Offline

« Ответ #38 : 25-09-2011 13:59 » 

Цитата: mr_madik_7
Главное всегда двигаться вперед.
Правда, не все почитатели успеха знают, где перед, но двигаются Отлично
Да, правильнее "Главное всегда двигаться". Незнаю зачем написал "вперед".
Записан
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines