38

CS50 Harvard - учебные программы на С из лекций 3-4

Проблема тех, кто не является студентом Гарварда и хочет пройти вводный курс CS50, заключается в том, что у них нет доступа к директории с учебными программкам в облачной IDE, зато есть доступ к самой IDE со всеми прикрученными костылями-библиотеками. Приходится вручную переписывать код из видеолекции и молиться, чтобы эти программы завелись.


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


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


Вооружившись мануалом к университетским библиотекам (https://manual.cs50.io/), а также гуглом, я упоролся и восстановил все программы из этих лекций.


Helloworld.c

Обычно первое, что создаёт будущий прогер практически на любом языке. Первая-то она первая, но с её отладкой я помудохался знатно.

#include <stdio.h>
int main(void)
{
printf("Hello, world\n");
}

Далее вариации этой программы, которые Дэвид Малан сочинял на ходу, но не сохранял. Строковая переменная.


Hellohannah.c
#include <cs50.h>
#include <stdio.h>
int main(void)
{
string s = "Hannah";
printf("Hello, world\n");
}

А эта программа заняла у меня больше всего времени. Заставляем переменную запрашивать имя самостоятельно через библиотечную функцию. 4 дня ушло на то, чтобы узнать, что в новой версии функции GetString() - get_string() - требуется вставить что-то в скобки, чтобы она заработала. Я ставлю кавычки, ибо они интуитивно понятны.


getname.c

#include <cs50.h>
#include <stdio.h>
int main(void)
{
string s = get_string("");
printf("Hello, %s\n", s);
}

После решения этого гиппопотамуса от мира ребусов работа пошла быстрее.


Далее лектор вернулся к сохранённым в каталоге курса программам и запустил простой калькулятор сложения целых чисел.


adder.c

#include <cs50.h>
#include <stdio.h>
int main(void)
{
// ask user for input
printf("give me an integer: ");
int x = get_int("");
printf("give me another integer: ");
int y = get_int(""); 
// do the math
printf("the sum of %i and %i is %i!\n", x, y, x + y);
}

Далее рассматривалась программа про условия. Я разделил её на две версии - багнутую версию (conditions-0b.c), которая не предусматривает ситуацию, когда переменная равна 0, и пофикшенную версию (conditions-0.c).


conditions-0b.c

#include <cs50.h>
#include <stdio.h>
int main(void)
{
// ask user for input
printf("I'd like an integer, please: ");
int n = get_int("");
//analyze user's input
if (n>0)
{
printf("You picked a positive number!\n");
}
else
{
printf("You picked a negative number!\n");
}
}

conditions-0.c

#include <cs50.h>
#include <stdio.h>
int main(void)
{
// ask user for input
printf("I'd like an integer, please: ");
int n = get_int("");
//analyze user's input
if (n>0)
{
printf("You picked a positive number!\n");
}
else if (n == 0)
{
printf("You picked zero!\n");
}
else
{
printf("You picked a negative number!\n"); 
}
}

Условия и операторы


nonswitch.c

#include <cs50.h>
#include <stdio.h>
int main(void)
{
//ask user for an integer
printf("Give me an integer between 1 and 10: \n");
int n = get_int("");
//judje user's input
if (n >=1 && n <=3)
{
printf("You picked a small number.\n");
}
else if (n >= 4 && n <= 6)
{
printf("You picked a medium number.\n"); 
}
else if (n >= 7 && n <= 10)
{
printf("You picked a big number.\n");
}
else
{
printf("You picked an invalid number.\n");
}
}

Погрешность десятичных дробей, связанная с разрядностью программы.


imprecision.c

include <stdio.h>
int main(void)
{
printf("%f\n", 1.0/10.0);
}

imprecision10.c (сохранил баловство Дэвида с количеством нулей после запятой в отдельные программы)

#include <stdio.h>
int main(void)
{
printf("%.10f\n", 1.0/10.0);
}

imprecision20.c

#include <stdio.h>
int main(void)
{
printf("%.20f\n", 1.0/10.0);
}

imprecision29.c

#include <stdio.h>
int main(void)
{
printf("%.29f\n", 1.0/10.0);
}

Первая демонстрация цикла - for


loopdemo.c

#include <stdio.h>
int main(void)
{
for (int i = 0; i < 50; i++)
{printf("%i\n", i);
}
}

Создание функций


function-0.c

#include <cs50.h>
#include <stdio.h>
void PrintName(string name);
int main(void)
{
printf("Your Name: ");
string s = get_string("");
PrintName(s);
}
void PrintName(string name)
{
printf("Hello, %s\n", name);
}

function-1.c

Помимо самопальной функции, имеем ещё и do-цикл и return

#include <cs50.h>
#include <stdio.h>
int GetPositiveInt();
int main(void)
{
int n = GetPositiveInt();
printf("Thanks for the %i!\n", n);
}
int GetPositiveInt(void)
{
int n;
do
{
printf("Please geve me a positive int: ");
n = get_int("");
}
while (n < 1);
return n;
}

И завершающая прога четвёртой лекции, демонстрируюшая return на примере возведения целого числа в куб.


return.c

#include <cs50.h>
#include <stdio.h>
int cube(int a);
int main(void)
{
int x = 2;
printf("x is now %i\n", x);
printf("Cubing...\n");
x = cube(x);
printf("Cubed!\n");
printf("x is now %i\n", x);
}
int cube(int n)
{
return n*n*n;
}
Другие записи об образовательном портале ищите по тэгу Skillfactory. Скидки и актуальные предложения для Skill Factory ищите в нашем купонном разделе. Там вы найдёте актуальные промокоды для Skillfactory.

Лига программистов

2.3K постов12K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

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

5
Автор поста оценил этот комментарий

на что только люди не идут лишь бы не читать вот эту классическую книгу

Иллюстрация к комментарию
раскрыть ветку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества