Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Системне програмування

КурсоваДопомога в написанніДізнатися вартістьмоєї роботи

Відкриваємо вхідний і вихідний файли. У масив s зчитуємо символи із вхідного файлу. Далі в циклі з параметром і перевіряємо кількість входжень символу s у масиві, що залишився, і цю інформацію записуємо в масив count. У циклі переглядаючи масив count перевіряємо: чи існують 2 букви із двома входженнями в масив, тобто чи можна із цих 2ух букв побудувати 2 слова, що відповідають умові завдання, і… Читати ще >

Системне програмування (реферат, курсова, диплом, контрольна)

Міністерство освіти та науки України Дніпропетровський національний університет Радіофізичний факультет Кафедра ЕОМ Курсова робота з курсу «Системне програмування»

Виконав студент гр. РІ-03−1

Котенко О.В.

Дніпропетровськ

Зміст

1. ЗАВДАННЯ

1.1 УМОВА ЗАДАЧІ 1

1.2 ОПИС ЗМІННИХ

1.3 ОПИС АЛГОРИТМУ

1.4 НАБІР ТЕСТІВ ДЛЯ НАЛАГОДЖЕННЯ ПРОГРАМИ

2. ЗАВДАННЯ 2

2.1 УМОВА ЗАДАЧІ 2

2.2 ОПИС ЗМІННИХ

2.3 ОПИС АЛГОРИТМУ

2.4 НАБІР ТЕСТІВ ДЛЯ НАЛАГОДЖЕННЯ ПРОГРАМИ

3. ЗАВДАННЯ 3

3.1 УМОВА ЗАДАЧІ 3

3.2 ОПИС ЗМІННИХ

3.3 ОПИС АЛГОРИТМУ

3.4 НАБІР ТЕСТІВ ДЛЯ НАЛАГОДЖЕННЯ ПРОГРАМИ

4. ЗАВДАННЯ 4

4.1 УМОВА ЗАДАЧІ 4

4.2 ОПИС ЗМІННИХ

4.3 ОПИС АЛГОРИТМУ

ДОДАТОК 1

ДОДАТОК 2

ДОДАТОК 3

ДОДАТОК 4

ДОДАТОК 5

ДОДАТОК 5

ДОДАТОК 6

ДОДАТОК 7

ДОДАТОК 8

ДОДАТОК 9

1. Завдання 1

1.1 Умова задачі 1

Байти елементів масиву, в 7-х бітах котрих стоїть 1, зсунути вправо на один розряд. Визначити середнє арифметичне елементів отриманого масиву.

1.2 Опис змінних

Змінні головної функції main:

byte mas[21] - масив з чисел розміром 1 байт

int i, sum — індекс та сума

1.3 Опис алгоритму

Спочатку ініціалізуємо масив випадковими числами від 0 до 99. Далі накладаємо послідовно маску 64 на кожен елемент масиву, і якщо там 1, то зсуваємо його вправо. Далі сумуємо елементи отриманого масиву та ділимо суму на їх кількість і виводимо на екран.

1.4 Набір тестів для налагодження програми

77 94 44 83 21 35 33 95 96 93 56 61 89 30 51 35 34 57 66 52 27

after shift right:

154 188 44 166 21 35 33 190 192 186 56 61 178 30 51 35 34 57 132 52 27

Average arifmetic:91

22 15 47 36 40 30 1 42 40 51 50 61 71 12 58 59 8 42 64 54 66

after shift right:

22 15 47 36 40 30 1 42 40 51 50 61 142 12 58 59 8 42 128 54 132

Average arifmetic:50

2. Завдання 2

2.1 Умова задачі 2

Дані натуральні числа а, b, с, які означають число, місяць та рік. Визначити день тижня, на який припадає вказана дата.

2.2 Опис змінних

Змінні головної функції main:

FILE *in — файл зі вхідною інформацією

int year, month, day, weak — рік, місяць, день, день тижня

2.3 Опис алгоритму

Відкриваємо вхідний файл на читання та зчитуємо з нього день, місяць та рік.

Далі користуємося універсальною формулою для знаходження дня тижня по даті і виводимо результат на екран.

2.4 Набір тестів для налагодження програми

Вхідний файл infile:

26 05 2005

Результат:

Thursday

Вхідний файл infile:

19 01 1984

Результат:

Wednesday

Вхідний файл infile:

23 12 1983

Результат:

Thursday

3. Завдання 3

3.1 Умова задачі 3

Дано натуральне число п, символи s1,…, sn. Будемо розглядати слова, утворені символами, що входять у послідовність s1,…, sn, вважаючи при цьому, що кількість символів у кожному слові не перевершує 15.

в) З’ясувати, чи є два слова, кожне з яких виходить перекиданням іншого

3.2 Опис змінних

Змінні головної функції main:

FІLE *іn, *out — вхідний і вихідний файли

char s[200] - масив s

char c1, c2 — символи, з яких складаються слова

іnt і, j, k — лічильники

іnt count[200] - масив повторень символів масиву s

іnt flag — прапор

3.3 Опис алгоритму

Відкриваємо вхідний і вихідний файли. У масив s зчитуємо символи із вхідного файлу. Далі в циклі з параметром і перевіряємо кількість входжень символу s[і] у масиві, що залишився, і цю інформацію записуємо в масив count[і]. У циклі переглядаючи масив count[і] перевіряємо: чи існують 2 букви із двома входженнями в масив, тобто чи можна із цих 2ух букв побудувати 2 слова, що відповідають умові завдання, і якщо такі букви є, на екран і у файл виводимо їхню пряму комбінацію й зворотню. Закриваємо всі відкриті файли.

3.4 Набір тестів для налагодження програми

Зміст вхідного файлу:

Abfkgjmkjnfosbndiff

Зміст вихідного файлу:

nf and fn

4. Завдання 4

4.1 Умова задачі 4

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

4.2 Опис змінних

Змінні головної функції main:

int dy — зміщення по вертикалі

int dх — зміщення по горизонталі

int x, y — координати тексту по X та Y;

int grdriver — тип відеодрайвера;

int grmode — режим відеодрайвера;

int errorcode — код помилки

int flag — прапор

int left, top, right, bottom — координати прямокутника.

4.3 Опис алгоритму

Ініціалізуємо графічний драйвер. З клавіатури зчитуємо координати прямокутника. Ініціалізуємо змінні: dx=1,dy=1,x=(left+right)/3, y=(top+bottom)/2,flag=0. Доки не нажата клавіша робимо наступне:

— x=x+dx

— y=y+dy

перевіряємо чи виходить x, y за межі прямокутника і якщо так, тоді корегуємо dx та dy

— виводимо на екран крапку з координатами x, y

Додаток 1

Блок-схема алгоритму розв’язання задачі 1

Додаток 2

Блок-схема алгоритму розв’язання задачі 2

Додаток 3

функція програма графічний драйвер

Блок-схема алгоритму розв’язання задачі 3

Додаток 4

Блок-схема алгоритму розв’язання задачі 4

Додаток 5

Лістинг програми розв’язку задачі 1

#include

#include

#include

typedef unsigned char byte;

int main ()

{

byte mas[21];

int i, sum;

clrscr ();

randomize ();

for (i=0;i<21;i++)

{

mas[i]=rand ()%100;

printf («%d «, mas[i]);

}

printf («nafter shift right: n»);

sum=0;

for (i=0;i<21;i++)

{

if (mas[i]&64)mas[i]=mas[i]<<1;

printf («%d «, mas[i]);

sum+=mas[i];

}

printf («nAverage arifmetic:%d», sum/21);

return 0;

}

Додаток 6

Лістинг програми розв’язку задачі 2

#include

int main (int argc, char **argv)

{

FILE *in;

int year, month, day, weak;

if (argc≠2)

{

fprintf (stderr," Bad arguments count");

return 1;

}

if ((in = fopen (argv[1], «rt»))

== NULL)

{

fprintf (stderr, «Cannot open input file. n»);

return 1;

}

fscanf (in," %d%d%d" ,&day,&month,&year);

if ((month==1) || (month==2))

{

month+=10;

year—;

}

else month-=2;

weak=(int (2.6*month-0.2)+day+year%100+(year%100)/4+(year-year%100)/400−2*(year-year%100)/100)%7;

switch (weak)

{

case 0: printf («Sundayn»);break;

case 1: printf («Mondayn»);break;

case 2: printf («Tuesdayn»);break;

case 3: printf («Wednesdayn»);break;

case 4: printf («Thursdayn»);break;

case 5: printf («Fridayn»);break;

case 6: printf («Saturdayn»);break;

}

fclose (in);

return 0;

}

Додаток 7

Лістинг програми розв’язку задачі 3

#include

#include

int main (int argc, char **argv)

{

FILE *in,*out;

char s[200], c1, c2;

int i, j, k, count[200], flag=0;

clrscr ();

if ((in = fopen (argv[1], «rt»)) == NULL)

{

fprintf (stderr, «Cannot open input file. n»);

return 1;

}

if ((out = fopen (argv[2], «wt»))== NULL)

{

fprintf (stderr, «Cannot open output file. n»);

return 1;

}

fgets (s, 190, in);

for (i=0;s[i]; i++);

for (j=0;j

for (j=0;j<(i-1);j++)

for (k=j+1;k

if (s[k]==s[j]) count[j]++;

for (j=0;j<(i-1);j++)

for (k=j+1;k

if (((count[j]+count[k])>=2)&&(count[j])&&(count[k]))

{

if ((s[j]==s[k])&&((count[j]+count[k])>=4)) {flag=1;c1=s[j]; c2=s[k];}

else if (s[j]≠s[k]) {flag=1;c1=s[j]; c2=s[k];}

}

if (flag)

{

printf («%c%c and %c%cn», c1, c2,c2,c1);

fprintf (out," %c%c and %c%cn", c1, c2,c2,c1);

} else

{

printf («no suсh words»);

fprintf (out," no suсh words");

}

getch ();

fcloseall ();}

Додаток 8

Лістинг програми розв’язку задачі 3 з використанням вказівника

#include

#include

#include

int main (int argc, char **argv)

{

FILE *in,*out;

char *s, c1, c2;

int i, j, k, count[200], flag=0;

clrscr ();

s=(char*)(calloc (300,1));

argv++;

if ((in = fopen (*argv++, «rt»)) == NULL)

{

fprintf (stderr, «Cannot open input file. n»);

return 1;

}

if ((out = fopen (*argv, «wt»))== NULL)

{

fprintf (stderr, «Cannot open output file. n»);

return 1;

}

fgets (s, 190, in);

for (i=0;*(s+i);i++);

for (j=0;j

for (j=0;j<(i-1);j++)

for (k=j+1;k

if ((*(s+k))==(*(s+j))) (*(count+j))++;

for (j=0;j<(i-1);j++)

for (k=j+1;k

if (((*(count+j)+*(count+k))>=2)&&(*(count+j))&&(*(count+k)))

{

if ((*(s+j)==*(s+k))&&((*(count+j)+*(count+k))>=4)) {flag=1;c1=*(s+j);c2=*(s+k);}

else if (*(s+j)≠*(s+k)) {flag=1;c1=*(s+j);c2=*(s+k);}

}

if (flag)

{

printf («%c%c and %c%cn», c1, c2,c2,c1);

fprintf (out," %c%c and %c%cn", c1, c2,c2,c1); } else {

printf («no suсh words»);

fprintf (out," no suсh words"); }

getch ();

fcloseall ();

}

Додаток 9

Лістинг програми розв’язку задачі 4

#include

#include

#include

#include

void main (void)

{

int gdriver = DETECT, gmode, errorcode;

int left, top, right, bottom;

int dx, dy, x, y, flag;

initgraph (&gdriver, &gmode, «»);

errorcode = graphresult ();

printf («Enter left, top, right, bottomn»);

scanf («%d%d%d%d» ,&left, &top, &right, &bottom);

rectangle (left, top, right, bottom);

dx=1;dy=1;

x=(left+right)/3;

y=(top+bottom)/2;

flag=0;

while (!flag)

{

flag=kbhit ();

putpixel (x, y, BLACK);

x+=dx;y+=dy;

if (x>right) dx=-1;

if (x

if (y>bottom) dy=-1;

if (y

putpixel (x, y, WHITE);

delay (10);

}

closegraph ();

}

Показати весь текст
Заповнити форму поточною роботою