Вход на сайт
C++ Помогите с заданиями...
24.11.09 14:53
У меня сегодня день восстановления кармы, я тут пакостей наделал, теперь творю хорошие дела. Мне совершенно начхать, что там за специалист и для кого получится, поэтому вместо никому ненужных нотаций, просто подал студенту.
Ошибаетесь, моя компетенция в перечисленных вопросах, не может быть оценена потому, что на эти вопросы я и не отвечал. С чего вы решили, что меня должен заботить уровень знаний какого-то студента? Кроме того, раз уж вы взялись быть учителем для дураков, почему вы решили, что надо учить чему-то дополнительно, помимо данного в задании?
в ответ Murr 24.11.09 14:15
В ответ на:
И зачем ты за это дело взялся - совершенно не понятно.
И зачем ты за это дело взялся - совершенно не понятно.
У меня сегодня день восстановления кармы, я тут пакостей наделал, теперь творю хорошие дела. Мне совершенно начхать, что там за специалист и для кого получится, поэтому вместо никому ненужных нотаций, просто подал студенту.

В ответ на:
И, как Я понимаю, уровень демонстрируемой компетенции, проявляемый
в ответе на элементарные вопросы:
- Чему обучился обучаемый при выполнении задания?
- Какие ошибки допущены и остались не исправленными?
- Достигнута ли цель данного задания?
практически нулевой...
И, как Я понимаю, уровень демонстрируемой компетенции, проявляемый
в ответе на элементарные вопросы:
- Чему обучился обучаемый при выполнении задания?
- Какие ошибки допущены и остались не исправленными?
- Достигнута ли цель данного задания?
практически нулевой...
Ошибаетесь, моя компетенция в перечисленных вопросах, не может быть оценена потому, что на эти вопросы я и не отвечал. С чего вы решили, что меня должен заботить уровень знаний какого-то студента? Кроме того, раз уж вы взялись быть учителем для дураков, почему вы решили, что надо учить чему-то дополнительно, помимо данного в задании?
NEW 25.11.09 00:12
Гы. Из лагеря функциональщиков решение на Хаскеле. Я тут изучаю, стало интересно как оно в сравнении с С++ будет выглядеть, начал у народа клянчить. Признаюсь, ожидал похожести на убойный квик сорт, но тоже ничё так, надо на С++ аналог сделать и сравнить трудозатраты:
http://rsdn.ru/forum/decl/3614528.1.aspx
http://rsdn.ru/forum/decl/3614528.1.aspx
import Text.Printf
-- Будем представлять календарь как таблицу (список списков)
-- Каждая клетка таблицы может включать дату, заголовок или быть пустой
data Cell = Day Int | Header String | Empty deriving Show
-- Формируем таблицу с календарем (отделили чистую функцию от IO)
-- Строим список, который соответствует таблице, если читать ее слева направо, сверху вниз.
-- Склеиваем: заголовки, начальные пустые клетки, даты, конечные пустые клетки
-- Разбиваем полученный список на блоки по 7 элементов. Получаем "таблицу" (список списков)
-- Например, для (calendar 15 5) функция возвращает:
-- [Header "mon",Header "tue",Header "wed",Header "thu",Header "fri",Header "sat",Header "sun"]
-- [Empty,Empty,Empty,Empty,Day 1,Day 2,Day 3]
-- [Day 4,Day 5,Day 6,Day 7,Day 8,Day 9,Day 10]
-- [Day 11,Day 12,Day 13,Day 14,Day 15,Empty,Empty]
calendar :: Int -> Int -> [[Cell]]
calendar days first = splitBy 7 $ headerLine ++ datesLines
where countStart = first-1 -- количество пустых клеток на первой неделе
countEnd = (8-days-first) `mod` 7 -- количество пустых клеток на последнкй неделе
datesLines = replicate countStart Empty ++ map Day [1..days] ++ replicate countEnd Empty
headerLine = map Header ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]
-- Разбивает список xs на блоки по n элементов
splitBy :: Int -> [t] -> [[t]]
splitBy _ [] = []
splitBy n xs = start : splitBy n end
where (start, end) = splitAt n xs
-- Печатает календарь (вынесли форматирование календаря в отдельную функцию)
-- Для каждой строки вызываем showLine: преобразовываем значение клетки в строку (showElement),
-- форматируем (printf) и вставляем между ними пробелы (unwords). Получаем строку для вывода на экран.
-- Полученные строки выводим на экран (unlines превращает список строк в одну строку с символами '\n')
printCalendar :: [[Cell]] -> IO ()
printCalendar cells = putStr $ unlines $ map showLine $ cells
where showLine xs = unwords $ map (printf "%3s" . showElement) xs
showElement (Day d) = show d
showElement (Header h) = h
showElement Empty = ""
main = do
first <- do putStr "Enter start day of week (1..7): " ; readLn
days <- do putStr "Enter count days in month: " ; readLn
putStrLn ""
printCalendar $ calendar days first
NEW 25.11.09 10:42
в ответ Simple 25.11.09 10:10
NEW 25.11.09 11:18
в ответ Simple 25.11.09 10:10
По-поводу обучения. С Си-подобными языками всё просто: знаешь один - знаешь все. Синтаксис меняется в других языках, семантика нет. С++ выучил, остальное всё проще - другие библиотеки, немного другие темплейты или их отсутствие, а так, те же яйца, вид сбоку. Несколько часов - вполне реальный срок начать писать какую-нибудь фигню типа этого календаря. Даже перл - вполне понятный язык.
ФЯ после императивных как-то не очень грызутся. Вчера сидел смотрел видеоинтервью, где объяснялись монады. Как бы главное понял нащёт того, что это конвеер. Но где-то на объяснении, что такое моноиды чувствую начинаю отключаться и засыпать.
Интересно, есть индивидумы, кто за день в состоянии этот календарь на хаскеле повторить? Я не смог.
ФЯ после императивных как-то не очень грызутся. Вчера сидел смотрел видеоинтервью, где объяснялись монады. Как бы главное понял нащёт того, что это конвеер. Но где-то на объяснении, что такое моноиды чувствую начинаю отключаться и засыпать.

Интересно, есть индивидумы, кто за день в состоянии этот календарь на хаскеле повторить? Я не смог.
NEW 25.11.09 23:02
в ответ Chu 23.11.09 17:38
int min(int a, int b){
if(a<= b) return a;
return b;}
int max(int a, int b){
if(a>= b) return a;
return b;}
int min3(int a, int b, int c) {return min(min(a,b), c);}
int max3(int a, int b, int c) {return max(max(a,b), c);}
printf("kleinste Zahl: %d\n", min3(a,b,c));
printf("mittlere Zahl: %d\n", a + b + c - min3(a,b,c) -max3(a,b,c));
printf("grösste Zahl: %d\n", max3(a,b,c));
if(a<= b) return a;
return b;}
int max(int a, int b){
if(a>= b) return a;
return b;}
int min3(int a, int b, int c) {return min(min(a,b), c);}
int max3(int a, int b, int c) {return max(max(a,b), c);}
printf("kleinste Zahl: %d\n", min3(a,b,c));
printf("mittlere Zahl: %d\n", a + b + c - min3(a,b,c) -max3(a,b,c));
printf("grösste Zahl: %d\n", max3(a,b,c));
NEW 25.11.09 23:39
в ответ toko-tak 25.11.09 23:02
bool sonntag(int x) {return x % 7 = 0;}
bool einstellig(int y) {return y<10;}
void print_tag(int z)
{
if(einstellig(z)) printf(" ");
printf("%d", z);
}
void print_kalender(int first_day, int num_days)
{
int count = 0;
//Fehlerbehandlung
if(first_day > 7 || num_days > 31 || num_days < 28) {printf("Fehler......"); return;}
//Header ausgeben
printf("Mo Di Mi Do Fr Sa So\n");
//Body ausgeben
count = first_day + num_days;
for(int i =1;i<=count;i++)
{
if(i< first_day)
{
printf(" ");
}
else
{
print_tag(i - first_day + 1);
if(sonntag(i)) {printf("\n");}
}
}
}
NEW 26.11.09 01:03
в ответ Tir na nOg 26.11.09 00:30
Там, вообще-то, надо написать определения пяти строк,
пересчитать начальные смещения - два вычитания,
одно умножение на константу и четыре сложения
и завешить все одним printf для вывода...
Все!!! И никаких безумных циклов и тупых проверок со
множественными вызовами функций...
Задача, правда, была дана не для этого...
пересчитать начальные смещения - два вычитания,
одно умножение на константу и четыре сложения
и завешить все одним printf для вывода...
Все!!! И никаких безумных циклов и тупых проверок со
множественными вызовами функций...

Задача, правда, была дана не для этого...

26.11.09 12:25
в ответ Tir na nOg 26.11.09 02:32
"Определения пяти строк" это что такое?
-----
char * lines[5] = { ... }; - так понятно? Константы - набъёшь сам...
без разбивки тот же цикл выходит
-----
В школу. В смысле - не программировать, а читать...
Вроде описал доступно - никаких циклов вообще, никаких проверок вообще,
чуток посчитать до начала печатания - сложить-вычесть-умножить и один
раз напечатать... Все.
По поводу - Зачем?.. - смотри выше - разъяснено в деталях...
-----
char * lines[5] = { ... }; - так понятно? Константы - набъёшь сам...

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

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