Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

C++ Помогите с заданиями...

554  1 2 3 все
Simple Nothing is f*cked24.11.09 14:27
Simple
NEW 24.11.09 14:27 
в ответ Tir na nOg 24.11.09 13:57
> на кой тут огород городить?
Чтобы показать свою онкрутость :-D
#21 
Tir na nOg прохожий24.11.09 14:53
NEW 24.11.09 14:53 
в ответ Murr 24.11.09 14:15
В ответ на:
И зачем ты за это дело взялся - совершенно не понятно.

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

Ошибаетесь, моя компетенция в перечисленных вопросах, не может быть оценена потому, что на эти вопросы я и не отвечал. С чего вы решили, что меня должен заботить уровень знаний какого-то студента? Кроме того, раз уж вы взялись быть учителем для дураков, почему вы решили, что надо учить чему-то дополнительно, помимо данного в задании?
#22 
Murr коренной житель24.11.09 15:01
Murr
NEW 24.11.09 15:01 
в ответ Tir na nOg 24.11.09 14:53
сегодня день восстановления кармы
-----
Увы, ты сегодня продолжил портить свою карму...
помимо данного в задании?
-----
Сверх? Нее, хотя бы тому, для чего дано задание... Иначе на подобные вопросы отвечать вообще смысла нет...
#23 
Tir na nOg прохожий25.11.09 00:12
NEW 25.11.09 00:12 
в ответ Tir na nOg 24.11.09 14:53, Последний раз изменено 25.11.09 00:13 (Tir na nOg)
Гы. Из лагеря функциональщиков решение на Хаскеле. Я тут изучаю, стало интересно как оно в сравнении с С++ будет выглядеть, начал у народа клянчить. Признаюсь, ожидал похожести на убойный квик сорт, но тоже ничё так, надо на С++ аналог сделать и сравнить трудозатраты:
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


#24 
Simple Nothing is f*cked25.11.09 10:10
Simple
NEW 25.11.09 10:10 
в ответ Tir na nOg 25.11.09 00:12
Прикольно. А я решил для начала заняться CL, скоро напишу решение для него :-D
#25 
AlexOtt знакомое лицо25.11.09 10:24
AlexOtt
NEW 25.11.09 10:24 
в ответ Simple 25.11.09 10:10
посмотри на clojure - большой плюс - продуманная возможность параллелизации и богатство доступных явовских библиотек
#26 
Simple Nothing is f*cked25.11.09 10:37
Simple
25.11.09 10:37 
в ответ AlexOtt 25.11.09 10:24
Так я никогда не доберусь до цели :) Сначала лисп, потом уже буду дальше смотреть.
#27 
Tir na nOg прохожий25.11.09 10:42
NEW 25.11.09 10:42 
в ответ Simple 25.11.09 10:10
Simple Nothing is f*cked25.11.09 10:46
Simple
NEW 25.11.09 10:46 
в ответ Tir na nOg 25.11.09 10:42
Первая и вторая имеются, только бы я местами поменял.
#29 
AlexOtt знакомое лицо25.11.09 11:09
AlexOtt
NEW 25.11.09 11:09 
в ответ Simple 25.11.09 10:37
это практически тот же лисп, только с некоторыми ограничениями
насчет книг - посмотри еще на how to design programs
#30 
Tir na nOg прохожий25.11.09 11:18
NEW 25.11.09 11:18 
в ответ Simple 25.11.09 10:10
По-поводу обучения. С Си-подобными языками всё просто: знаешь один - знаешь все. Синтаксис меняется в других языках, семантика нет. С++ выучил, остальное всё проще - другие библиотеки, немного другие темплейты или их отсутствие, а так, те же яйца, вид сбоку. Несколько часов - вполне реальный срок начать писать какую-нибудь фигню типа этого календаря. Даже перл - вполне понятный язык.
ФЯ после императивных как-то не очень грызутся. Вчера сидел смотрел видеоинтервью, где объяснялись монады. Как бы главное понял нащёт того, что это конвеер. Но где-то на объяснении, что такое моноиды чувствую начинаю отключаться и засыпать.
Интересно, есть индивидумы, кто за день в состоянии этот календарь на хаскеле повторить? Я не смог.
#31 
AlexOtt знакомое лицо25.11.09 15:51
AlexOtt
NEW 25.11.09 15:51 
в ответ Tir na nOg 25.11.09 11:18
про монады надо на первое время забыть, это лучше всего - просто ими пользоваться пока не понадобятся :-)
P.S. а что там повторять-то? стандартные функции манипуляции со строками, можно несколько вариантов придумать как это сделать
#32 
Simple Nothing is f*cked25.11.09 16:45
Simple
NEW 25.11.09 16:45 
в ответ AlexOtt 25.11.09 11:09
Не поздновато ли? :)
#33 
AlexOtt знакомое лицо25.11.09 17:08
AlexOtt
NEW 25.11.09 17:08 
в ответ Simple 25.11.09 16:45
в how to design programs имеется некоторое кол-во полезной информации :-)
я SICP, например, читал уже давно программируя на схеме, и много оттуда полезного узнал
#34 
toko-tak знакомое лицо25.11.09 23:02
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));
#35 
toko-tak знакомое лицо25.11.09 23:39
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");}
}
}
}

#36 
Tir na nOg прохожий26.11.09 00:30
NEW 26.11.09 00:30 
в ответ toko-tak 25.11.09 23:39
В ф-и sonntag присваивание надо поменять на проверку на равенство.
#37 
Murr коренной житель26.11.09 01:03
Murr
NEW 26.11.09 01:03 
в ответ Tir na nOg 26.11.09 00:30
Там, вообще-то, надо написать определения пяти строк,
пересчитать начальные смещения - два вычитания,
одно умножение на константу и четыре сложения
и завешить все одним printf для вывода...
Все!!! И никаких безумных циклов и тупых проверок со
множественными вызовами функций...
Задача, правда, была дана не для этого...
#38 
Tir na nOg прохожий26.11.09 02:32
NEW 26.11.09 02:32 
в ответ Murr 26.11.09 01:03
Да какая уже разница, зачем была дана задача?
"Определения пяти строк" это что такое? Вручную у пяти семидневок поставить в нужные позиции дни? Разбивать на пять линий глупо, без разбивки тот же цикл выходит пробегающий по всем дням.
#39 
Murr коренной житель26.11.09 12:25
Murr
NEW 26.11.09 12:25 
в ответ Tir na nOg 26.11.09 02:32
"Определения пяти строк" это что такое?
-----
char * lines[5] = { ... }; - так понятно? Константы - набъёшь сам...
без разбивки тот же цикл выходит
-----
В школу. В смысле - не программировать, а читать...
Вроде описал доступно - никаких циклов вообще, никаких проверок вообще,
чуток посчитать до начала печатания - сложить-вычесть-умножить и один
раз напечатать... Все.
По поводу - Зачем?.. - смотри выше - разъяснено в деталях...
#40 
1 2 3 все