Программа практических занятий по курсу: "Языки программирования высокого уровня"
Учебник по языку Си: ВВЕДЕНИЕ В ЯЗЫК СИ
План занятий. Cроки выполнения и Сдачи Лабораторных работ. Семестр I
04.09-Lab N1. "Перевод чисел между системами счисления на языке C"Все программы выполняем на языке C (не C++)
Лабораторная работа N1. "Перевод чисел между системами счисления на языке C"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char s[40];
if (argc>1) { printf("Argument: %d\n",atoi(argv[1])); }
printf("Input your name: ");
scanf("%s",s);
printf("Hello: %s \n",s);
return 0;
}
Для компиляции используем gcc:> gcc -Wall -o ex_prog_1 ex_prog.cВвод/Вывод в стиле С++ (пример только для понимания отличия от языка C):
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
char s[40];
if (argc>1) { cout << "Argument: " << atoi(argv[1]) << endl; }
cout << "Input your name: ";
cin >> s;
cout << "Hello: " << s << endl;
return 0;
}
Для компиляции используем g++:> g++ -Wall -o ex_prog_2 ex_prog.cpp1.Откомпилировать и разобраться в примерах программ представленных выше, обратить внимание на Вввод/Вывод в различных стилях языка С и С++. Вспомнить раздел: 4.ФУНКЦИИ - "Аргументы функции main()" онлайн-учебника.
> convertsyst fe 16 2 11111110 > convertsyst 45 10 2 101101 > convertsyst 101 2 10 5Для подгруппы 2: Используя агрументы командной строки - входные параметры функции main (argc и argv) реализовать программу производящую преобразование систем счисления из Десятичной, Двоичной и Шестнадцатеричной в Десятичную, Двоичную и Шестнадцатеричную при этом указывая в качестве параметров командной строки сокращенное обозначение конкретных систем счисления (d, b, h) - исходной и той в которую нужно преобразовать число (где: d - dec, b - bin, h - hex). Для преобразования массива char в число можно использовать atoi(argv[1]); из библиотеки: stdlib.h .
> convertsyst 1ab h b 110101011 > convertsyst 47 d b 101111 > convertsyst 10110 b d 223.Представить Результат работы преподавателю. Готовиться к выполнению небольшого дополнительного задания по программе.
Лабораторная работа N2. "Обработка данных внешних команд (конвейер командной строки) на C"
> date "+%T" | ./ex_piplineПример программы ex_pipline:
#include <stdio.h>
int main(void)
{
int n,h,m,s;
n=scanf("%d:%d:%d",&h,&m,&s);
printf("Arguments: %d\n",n);
printf("Hours: %d, minutes: %d, seconds: %d\n",h,m,s);
return 0;
}
1.Откомпилировать и разобраться в примере программы представленном
выше, обратить внимание на команду для передачи данных в программу через конвейер
(команда: date "+%T" выдает время в формате: HH:MM:SS) и на
значение возвращаемое функцией: scanf() (возвращает количество значений, которые действительно были присвоены переменным).
> traceroute -m 5 -q 1 -w 2 sampo.ru | ./ex_pipline3.Представить Результат работы преподавателю. Готовиться к выполнению небольшого дополнительного задания по программе.
#include <stdio.h>
void gotoxy(int x, int y)
{ printf("%c[%d;%df", 0x1b, y, x); }
void txt_color(int text_color, int background, int attributes)
{ printf("%c[%d;%d;%dm", 0x1b, attributes, background, text_color); }
int main(void)
{
printf("\x1b[0d\x1b[2J"); //очистка экрана в терминале (linux)
txt_color(35,44,0); //указание цвета вывода текста
gotoxy(9,3); //указание координат вывода текста: x,y
printf("Hello!\n");
txt_color(37,40,0); //возвращение обратно цветов консоли
return 0;
}
Пример программы генерирующей случайное число:#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand(time(NULL)); //инициализация генератора случайных чисел от времени
printf("%d\n",rand()%100); //генерация и вывод случайного числа
return 0;
}
1.Откомпилировать и разобраться в примерах программ представленных выше.
Обратите внимание, что в первом примере в функциях: gotoxy и txt_color достаточно было и объявления типов параметров unsigned char вместо int.
> while true; do date "+%T"; sleep 1; done | ./lab_n3 `date +%s`где: lab_n3 имя вашей программы. В место, где обратные апострофы (`date +%s`) подставляется результат выполнения команды, которая находится между ними.
const int colors[10][3]={{37,40,0},{31,40,0},{35,44,0},{31,40,0},{36,40,0},{32,40,1},{30,47,0},{34,40,0},{35,40,0},{33,40,0}};
по 3 параметра для установки цвета функцией: txt_color (пример функции выше).
Для получения произвольного цвета необходимо выбирать один из этих 10 наборов
параметров случайным образом с помощью оператора: rand() (из библиотеки: stdlib.h).> while true; do date "+%T"; sleep 1; done | ./lab_n3 `date +%s`от:
> while true; do date "+%T"; sleep 1; done | ./lab_n3 1где lab_n3 - имя вашей программы.
#include <stdio.h>
int main(void)
{
char s[]="Hello Linux!";
printf("\x1b[1A\x1b]2;%s\x7\n",s); //вывод строки s в заголовок окна терминала
return 0;
}
1.Откомпилировать и разобраться в примере представленном выше.
Лабораторная работа N5. "Работа с файлами. Сортировка строк по алфавиту"
int strcmp( const char * string1, const char * string2 ); //библиотека string.h
strcmp - сравнивает символы двух строк: string1 и string2. Начиная
с первых символов сравнивается поочередно каждая пара символов, сравнение продолжается
до тех пор, пока не будут найдены различные символы или не будет достигнут конец строки.
Лабораторная работа N6. "Работа с файлами. Обработка нажатий клавиш. Скроллинг текста по экрану"
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int getch(void)
{ struct termios oldattr, newattr;
int ch;
tcgetattr( STDIN_FILENO, &oldattr );
newattr = oldattr;
newattr.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newattr );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldattr );
return ch;
}
int main()
{ char ch;
do {
ch=getch();
} while (ch!='q');
return 0;
}
В языке Си для считывания нажатых клавиш есть функция getch() , которая описана в библиотеке conio.h
однако под Linux эта библиотека по умолчанию отсутствует. В связи с этим есть несколько решений для считывания нажатых
клавиш клавиатуры под Linux. Можно подключить библиотеку ncurses.h в которой есть getch(), а можно
воспользоваться вышеприведенным примером с описанием и использованием функции getch().
Информация по экзамену для подгруппы 2
Консультация перед экзаменом по "ЯПВУ" - 18.01.2024 (ЧТ) в 11:30 в библиотеке УЛК-5
int is_prime(unsigned A);
void sort(size_t N, int* A);
int is_palindrome(unsigned long A);
unsigned int generate_number(void);
int is_lucky(unsigned long A);
int get_max(size_t N, int* A);