Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.63 KB | None | 0 0
  1. # 1. Установка необходимого ПО для выполнения лабораторной работы №1
  2.  
  3. В процессе установки программного обеспечения с проблемами не столкнулся
  4.  
  5. # 2. Выполнение лабораторной работы
  6.  
  7. ## Этапы компиляции и компановки
  8.  
  9. gcc - это оптимизирующий компилятор для языка C. Программа gcc, запускаемая из командной строки, представляет собой надстройку над группой компиляторов. В зависимости от расширений имен файлов, передаваемых в качестве параметров, и дополнительных опций, gcc запускает необходимые препроцессоры, компиляторы.
  10.  
  11. –c означает только компиляция.
  12.  
  13. -Wall вывод сообщений о всех предупреждениях или ошибках, возникающих во время компиляции программы.
  14.  
  15. -Werror превращает все предупреждения в ошибки. В случае появления предупреждения прерывает процесс компиляции. Используется совместно с опцией -Wall.
  16.  
  17. -std=c99 стандарт языка программирования Си.
  18.  
  19. -g3 создать отладочную информацию для работы с отладчиком.
  20.  
  21. Чтобы скомпоновать один или несколько объектных файлов, полученных из исходного кода - main.o - в единый исполняемый файл main.exe, необходимо ввести команду:
  22. gcc -o main.exe main.o
  23.  
  24. Опция -o задает имя исполняемого файла.
  25.  
  26. ## Задача №2
  27.  
  28. Скопировала программу(задача №2) с ошибками.
  29. Её код:
  30.  
  31. ```
  32. include studio.h
  33. main{}
  34. (
  35. int s;
  36. s: = 56;
  37. print (Year has s weeks)
  38. )
  39.  
  40. ```
  41. Для задачи был создан проект lab_01_0_2 в QtCreator(Подробнее см.пункт (3) Работа с QtCreator).
  42.  
  43. Ошибка №1
  44.  
  45. ```
  46. main.c:1:1: error: unknown type name 'include'
  47. include studio.h
  48. ^~~~~~~
  49.  
  50. ```
  51. Ошибка №1: перед include не стоит #.
  52.  
  53. Исправление:
  54.  
  55. ```
  56. $ git diff
  57. diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
  58. index db4d83b..b219a86 100644
  59. --- a/lab_01_2_2/main.c
  60. +++ b/lab_01_2_2/main.c
  61. @@ -1,4 +1,4 @@
  62. -include studio.h
  63. +#include studio.h^M
  64.  
  65. main{}
  66. (
  67.  
  68. ```
  69. Зафиксируем изменение:
  70.  
  71. ```
  72. $ git commit -m " # was added before include"
  73. [lab_01 b72521a] # was added before include
  74. 6 files changed, 399 insertions(+)
  75. create mode 100644 lab_01_2_2/lab_01_2_2.config
  76. create mode 100644 lab_01_2_2/lab_01_2_2.creator
  77. create mode 100644 lab_01_2_2/lab_01_2_2.creator.user
  78. create mode 100644 lab_01_2_2/lab_01_2_2.files
  79. create mode 100644 lab_01_2_2/lab_01_2_2.includes
  80. create mode 100644 lab_01_2_2/main.c
  81.  
  82.  
  83. ```
  84.  
  85. Ошибка №2
  86.  
  87. ```
  88. main.c:1:10: error: #include expects "FILENAME" or <FILENAME>
  89. #include studio.h
  90. ^~~~~~
  91.  
  92. ```
  93. Ошибка №2: нет <названия>.
  94.  
  95. Исправление:
  96.  
  97. ```
  98. $ git diff
  99. diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
  100. index b219a86..7ec615c 100644
  101. --- a/lab_01_2_2/main.c
  102. +++ b/lab_01_2_2/main.c
  103. @@ -1,4 +1,4 @@
  104. -#include studio.h
  105. +#include <studio.h>^M
  106.  
  107. main{}
  108. (
  109.  
  110. ```
  111. Зафиксируем изменение:
  112.  
  113. ```
  114. $ git commit -m " <...> was added "
  115. [lab_01 8face43] <...> was added
  116. 1 file changed, 1 insertion(+), 1 deletion(-)
  117.  
  118. ```
  119.  
  120. Ошибка №3
  121.  
  122. ```
  123. main.c:1:10: fatal error: studio.h: No such file or directory
  124. #include <studio.h>
  125. ^~~~~~~~~~
  126. compilation terminated.
  127.  
  128. ```
  129. Ошибка №3: неправильное название директивы <stdio.h>
  130.  
  131. Исправление:
  132.  
  133. ```
  134. $ git diff
  135. diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
  136. index 7ec615c..aa78fa5 100644
  137. --- a/lab_01_2_2/main.c
  138. +++ b/lab_01_2_2/main.c
  139. @@ -1,4 +1,4 @@
  140. -#include <studio.h>
  141. +#include <stdio.h>^M
  142.  
  143. main{}
  144. (
  145.  
  146. ```
  147. Зафиксируем изменение:
  148.  
  149. ```
  150. $ git commit -m " studio was replaced stdio"
  151. [lab_01 b9f5cf9] studio was replaced stdio
  152. 1 file changed, 1 insertion(+), 1 deletion(-)
  153.  
  154. ```
  155. Ошибка №4
  156.  
  157. ```
  158. main.c:3:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
  159. main{}
  160. ^
  161. main.c:5:5: error: expected identifier or '(' before 'int'
  162. int s;
  163. ^~~
  164.  
  165. ```
  166. Ошибка №4 : неправильные скобки у функции main.
  167.  
  168. Исправление:
  169.  
  170. ```
  171. $ git diff
  172. diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
  173. index aa78fa5..8187126 100644
  174. --- a/lab_01_2_2/main.c
  175. +++ b/lab_01_2_2/main.c
  176. @@ -1,8 +1,8 @@
  177. #include <stdio.h>
  178.  
  179. -main{}
  180. -(
  181. +main()^M
  182. +{^M
  183. int s;
  184. s: = 56;
  185. print (Year has s weeks)
  186. -)
  187. +}^M
  188.  
  189. ```
  190. Зафиксируем изменения:
  191.  
  192. ```
  193. $ git commit -m " main was fixed () and {} "
  194. [lab_01 ec6d830] main was fixed () and {}
  195. 1 file changed, 3 insertions(+), 3 deletions(-)
  196.  
  197. ```
  198. Ошибка №5
  199.  
  200. ```
  201. main.c:3:1: error: return type defaults to 'int' [-Werror=implicit-int]
  202. main()
  203. ^~~~
  204.  
  205. ```
  206. Ошибка №5: не указан тип у функции main()
  207.  
  208. Исправление:
  209.  
  210. ```
  211. $ git diff
  212. diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
  213. index 8187126..f8c17fe 100644
  214. --- a/lab_01_2_2/main.c
  215. +++ b/lab_01_2_2/main.c
  216. @@ -1,8 +1,9 @@
  217. #include <stdio.h>
  218.  
  219. -main()
  220. +int main()^M
  221. {
  222. int s;
  223. s: = 56;
  224. print (Year has s weeks)
  225. + return 0;^M
  226. }
  227.  
  228. ```
  229.  
  230. Зафиксируем изменения:
  231.  
  232. ```
  233. $ git commit -m " int main() and return 0; was added"
  234. [lab_01 ce30e89] int main() and return 0; was added
  235. 1 file changed, 2 insertions(+), 1 deletion(-)
  236.  
  237. ```
  238.  
  239. Ошибка №6
  240.  
  241. ```
  242. main.c:6:8: error: expected expression before '=' token
  243. s: = 56;
  244. ^
  245.  
  246. ```
  247. Ошибка №6: неправильное присвоение переменной s.
  248.  
  249. Исправление:
  250.  
  251. ```
  252. $ git diff
  253. diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
  254. index f8c17fe..6a912a5 100644
  255. --- a/lab_01_2_2/main.c
  256. +++ b/lab_01_2_2/main.c
  257. @@ -3,7 +3,7 @@
  258. int main()
  259. {
  260. int s;
  261. - s: = 56;
  262. + s = 56;^M
  263. print (Year has s weeks)
  264. return 0;
  265. }
  266.  
  267. ```
  268.  
  269. Зафиксируем изменение:
  270.  
  271. ```
  272. $ git commit -m " s:= was replaced s ="
  273. [lab_01 628df46] s:= was replaced s =
  274. 1 file changed, 1 insertion(+), 1 deletion(-)
  275.  
  276. ```
  277. Ошибка №7
  278.  
  279. ```
  280. main.c:7:5: error: implicit declaration of function 'print'; did you mean 'printf'? [-Werror=implicit-function-declaration]
  281. print (Year has s weeks)
  282. ^~~~~
  283. printf
  284.  
  285.  
  286. ```
  287. Ошибка №7: неправильно написан оператор printf().
  288.  
  289. Исправление:
  290.  
  291. ```
  292. $ git diff
  293. diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
  294. index 6a912a5..ad41665 100644
  295. --- a/lab_01_2_2/main.c
  296. +++ b/lab_01_2_2/main.c
  297. @@ -4,6 +4,6 @@ int main()
  298. {
  299. int s;
  300. s = 56;
  301. - print (Year has s weeks)
  302. + printf(Year has s weeks)^M
  303. return 0;
  304. }
  305.  
  306. ```
  307. Зафиксируем изменение:
  308.  
  309. ```
  310. $ git commit -m "true writted printf"
  311. [lab_01 0c3e689] true writted printf
  312. 1 file changed, 1 insertion(+), 1 deletion(-)
  313.  
  314. ```
  315. Ошибка №8
  316.  
  317. ```
  318. main.c:7:12: error: 'Year' undeclared (first use in this function); did you mean 'char'?
  319. printf(Year has s weeks)
  320. ^~~~
  321. char
  322.  
  323. ```
  324. Ошибка №8: оператор printf() написан не по шаблону
  325.  
  326. Исправление:
  327.  
  328. ```
  329. $ git diff
  330. diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
  331. index ad41665..7d074bc 100644
  332. --- a/lab_01_2_2/main.c
  333. +++ b/lab_01_2_2/main.c
  334. @@ -4,6 +4,6 @@ int main()
  335. {
  336. int s;
  337. s = 56;
  338. - printf(Year has s weeks)
  339. + printf("Year has %d weeks", s)^M
  340. return 0;
  341. }
  342.  
  343. ```
  344. Зафиксируем изменения:
  345.  
  346. ```
  347. $ git commit -m "printf() was writted correctly"
  348. [lab_01 b442847] printf() was writted correctly
  349. 1 file changed, 1 insertion(+), 1 deletion(-)
  350.  
  351. ```
  352. Ошибка №9
  353.  
  354. ```
  355. main.c:7:35: error: expected ';' before 'return'
  356. printf("Year has %d weeks", s)
  357. ^
  358. ;
  359. return 0;
  360. ~~~~~~
  361.  
  362. ```
  363. Ошибка №9: не стоит ; в конце строки
  364.  
  365. Исправление:
  366.  
  367. ```
  368. $ git diff
  369. diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
  370. index 7d074bc..568fb74 100644
  371. --- a/lab_01_2_2/main.c
  372. +++ b/lab_01_2_2/main.c
  373. @@ -4,6 +4,6 @@ int main()
  374. {
  375. int s;
  376. s = 56;
  377. - printf("Year has %d weeks", s)
  378. + printf("Year has %d weeks", s);^M
  379. return 0;
  380. }
  381.  
  382. ```
  383. Зафиксируем изменения:
  384.  
  385. ```
  386.  
  387. $ git commit -m " ; was added before return "
  388. [lab_01 caa1af8] ; was added before return
  389. 1 file changed, 1 insertion(+), 1 deletion(-)
  390.  
  391.  
  392. ```
  393.  
  394. Программа теперь полностью работает.
  395.  
  396. Конечный код:
  397.  
  398. ```
  399. #include <stdio.h>
  400.  
  401. int main()
  402. {
  403. int s;
  404. s = 56;
  405. printf("Year has %d weeks", s);
  406. return 0;
  407. }
  408.  
  409. ```
  410.  
  411. # 3. Работа с QtCreator
  412.  
  413.  
  414. Для задач № 1,2,3,4 был создан отдельный проект в QtCreator. Покажу как создавать проект на примере задачи № 2.
  415.  
  416.  
  417. 1. Запустила QtCreator через оболочку MSYS.
  418. 2. В появившемся окне нажимаем создать новый проект.
  419. 3. Импортировать проект -> Импорт существующего проекта -> Даём название нашему проекту и указываем где он будет хранится.
  420. 4. В созданном проект добавляем новый файл.
  421. 5. Файл исходных текстов С++ -> указываем имя файла с расширением .с (в моем случае main.c).
  422. 6. Переходим во вкладку проекты и настраиваем следуюшие параметры:
  423.  
  424.  
  425. Для конфигурации Release:
  426.  
  427. ![Снимок_экрана_2019-03-25_в_19.03.27](uploads/8190a6cbca1023f327e0f7ac2eaaf811/Снимок_экрана_2019-03-25_в_19.03.27.png)
  428.  
  429.  
  430. Копируем Release в конфигурацию Debug и добавляем еще один параметр:
  431.  
  432. ![Снимок_экрана_2019-03-25_в_19.04.09](uploads/b2e8bf0ace8e0281b7c324dd6577f6cb/Снимок_экрана_2019-03-25_в_19.04.09.png)
  433.  
  434.  
  435. В запуске указываем наш файл и ставим галочку запускать в терминале:
  436.  
  437. ![Снимок_экрана_2019-03-25_в_19.05.33](uploads/427e8feda4f75ce77243ae774c3d9333/Снимок_экрана_2019-03-25_в_19.05.33.png)
  438.  
  439. Пишем код и запускаем программу:
  440.  
  441. ![Снимок_экрана_2019-03-25_в_19.06.42](uploads/6e5a23a431bb430d3b2cec4d6f66534f/Снимок_экрана_2019-03-25_в_19.06.42.png)
  442. ![Снимок_экрана_2019-03-25_в_19.06.51](uploads/21f5d1e82bab62cf24e5565390e9cd1a/Снимок_экрана_2019-03-25_в_19.06.51.png)
  443.  
  444. ## Работа с Debug
  445.  
  446. Отличие Release от Debug, то что мы просто запускаем приложение без работы отладчика.
  447.  
  448. Для того, чтобы запустить отладчик нужно перейти в конфигурацию Debug и нажать F5 или F10.
  449.  
  450. Если нажать клавишу F10, то программа начнет пошаговую работу в отладчике с точки входа в программу, т.е с функции main.
  451.  
  452.  
  453. Для того, чтобы остановиться на конкретной строчке, где я подозреваю что у меня есть ошибка, я должен поставить точку остановы.
  454.  
  455. Также если мы не хотим просматривать определенный кусок кода, мы можем поставить две точки остановы, и чтобы не идти по-шагово от одной точки к другой необходимо нажать клавишу F5.
  456.  
  457.  
  458. Также есть клавиша F11, которая производит шаг с заходом. Шаг с заходом нужен для того, чтобы посмотреть, что у нас происходит в функции, которую мы вызываем в main.
  459.  
  460. Для того, чтобы завершить отладчик нужно нажать клавиши F5+Shift.
  461.  
  462. # 4. Итог о проделанной работе
  463.  
  464. 1. Исходный код лабораторной работы расположил в ветке lab_01, а каждую из задач в отдельной папке: lab_01_0_1, lab_01_0_2, lab_01_0_3, lab_01_0_4.
  465. 2. Исходный код соответствует правилам оформления исходного кода.
  466. 3. Для каждой задачи был создан отдельный проект в ​QT Creator. Для каждого проекта создал два варианта сборки: Debug (с отладочной информацией) и Release (без отладочной информации).
  467. 4. Для каждой задачи подготовил тестовые данные, которые демонстрируют правильность работы задач. Эти данные расположил в файле test.txt
  468. 5. Для реализации задач этой лабораторной работы мне понадобилась только функция main.
  469. 6. Данные вводятся строго в том порядке, в котором указано в задании.
  470. 7. Ответы выводятся строго в том порядке, в котором указано в задании.
  471. 8. Исходный код лабораторной работы поместил под версионный контроль. После того, как все задания были выполнены, в GitLab подготовил merge request для переноса изменений из ветки lab_01 в ветку master.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement