kacToHbI4
@kacToHbI4
11 лет anykey - надоело, хочу в разработчики.

Плохо ли смотреть готовый код задач по СИ, чтобы понять как это работает?

Плохо ли смотреть чужой рабочий код (с похожей задаче) для понимания что и как реализовано, если самому вывести решение может занять чуть ли не несколько недель, хотя задачка с виду простая? Как это может повлиять на мое обучение? Может лучше долго но самому?

Учу язык СИ по видео-урокам CS50 и на канале GenaANTG, плюс различная литература (Язык программирования C» автора Брайан Керниган, Деннис Ритчи), но мне кажется что для обучения данная книга не очень подходит, больше как инструкция и справочник. Также лекции CS50, плюс естественно GOOGLE.
Вот мне попалась задача из курса CS50
"Наша программка будет рисовать полупирамиду, подобную той, что вы видите, но прямо в консоли, без графики: каждый из блоков будет состоять из значка хэша (#). Даже если вы еще не сообразили, как это сделать, поверьте: это просто. Чтобы сделать задачу более интересной, добавим в неё возможность задавать высоту полупирамидки с помощью неотрицательного целого числа от 0 до 23. Высота пирамидки на картинке считается в самом высоком месте, то есть равна 8. Если пользователь неправильно вводит число, нужно попросить его сделать это ещё раз. Затем сгенерировать с помощью printf пирамидку.

Позаботьтесь о том, чтобы выровнять нижний левый угол вашей полупирамиды по левому краю окна терминала, как в примере ниже. Подчеркнутый текст — это то, что пользователь вводит самостоятельно.

username:~/workspace/pset1 $ ./mario

height: 8
##
###
####
#####
######
#######
########
#########
Обратите внимание, что два крайних правых столбца имеют одинаковую высоту. Генерировать трубы, облака и самого Марио пока не стоит=). По крайней мере для этого задания.

Если пользователь ввел неправильные данные (ввел не число, или число, которое меньше единицы или больше, чем 23), программа должна снова попросить его ввести данные, как в примере внизу, где подчеркнутый текст — то, что вводил пользователь с клавиатуры.

Для считывания введенной строки используйте GetInt. Она может помочь проверить неправильный ввод, но не для всех случаев. "

Я на данный момент мало понимаю как это реализовать, но понимаю что копипастить хэши в printf не лучшая идея и однозначно все реализуется циклами и какими-либо формулами, здесь начинаю понимать, что возможно я чуть больше шарил в математике, я бы быстрее просчитал как это сделать.
  • Вопрос задан
  • 690 просмотров
Решения вопроса 2
saboteur_kiev
@saboteur_kiev
software engineer
"Плохо ли смотреть чужой рабочий код (с похожей задаче)"

Плохо ли писать книги, если до этого никогда ничего не читал?
Плохо ли снимать фильмы, если до этого никогда фильмы не смотрел?
Плохо ли готовить, если до этого ел только сырое?

Чужой опыт - это то, что дало человечеству цивилизацию.
Ответ написан
dio4
@dio4
team leader, system engineer, master of sports
/* вывод символа # в строках и столбцах - читайте и разбирайтесь на здоровье. Если нужен интерактивный ввод - сами допишите. Это на гистограмму не влияет :-)  */

#include <stdio.h>
int main(void)
{
	int total = 9;
	for(int i = 2; i <= total; ++i) {
		for(int j = 1; j <= i; ++j) {
			printf("#");
		}
		printf("\n");
	}
	return 0;
}
/* ВЫВОД 
alexander@alexander-Inspiron-3521:~/my$ gcc -std=c99 output.c -o 4_16 && ./output
##
###
####
#####
######
#######
########
#########
*/
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
Просто надо начинать думать "как программист". Математики тут нет и алгоритм простейший. Алгоритм понятен сразу, как только вы смотрите на рисунок:
для введенного числа 8
1.первая строка - рисуем 2 решетки
2.следующая строка рисуем решеток на 1 больше, чем на предыдущем шаге
3.8 строка - после рисования решеток заканчиваем цикл.
Решетки рисуются в цикле по одной. В конце каждой строки, после решеток, "дорисовываем" перевод строки.
Как реализовать можете подсмотреть на первый раз, но дальше пытайтесь делать самостоятельно. Если совсем уж затык, то же можно взглянуть бегло на решение, чтоб понять принцип. А потом постараться самому реализовать.
Нужно стараться делать задания самостоятельно - только то что осилил сам запомниться на долго.
Ответ написан
Комментировать
@Impeeeery
жуй. куй.
Плохо ли смотреть чужой рабочий код (с похожей задаче) для понимания что и как реализовано, если самому вывести решение может занять чуть ли не несколько недель, хотя задачка с виду простая? Как это может повлиять на мое обучение? Может лучше долго но самому?

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы