WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Обробка масивів - Курсова робота

Обробка масивів - Курсова робота

локальним для функції або класу, в кожній частині програми, зкомпільованій окремо, повинно відноситись до одного і того же типу, значенню, функції або об'єкту. Тобто, в програмі може бути тільки один нелокальный тип, значення, функція або об'єкт з цим ім'ям. Розглянемо, наприклад, два файли:
// file1.c:
int a=1;
int f () { /*щось робить*/ }
// file2.c:
extern int a;
int f (); void g () {a=f ();}
a і f (), що використаються g () в файлі file2.c, - ті же, що визначені в файлі file1. c. Ключове слово extern (зовнішній) вказує, що опис a в file2.c є (тільки) описом, а не визначенням. Якщо б a ініціалізувалась, extern був б просто проігноровано, оскільки опис з ініціалізацією завжди є визначенням. Об'єкт в програмі повинен визначатися тільки один раз. Описуватися він може багато раз, але типи повинні точно погоджуватися. Наприклад:
// file1.c:
int a=1;
int b=1;
extern int c;
// file2.c:
іnt a;
extern double b;
extern int c;
Тут три помилки: a визначене двічі (int a; є визначенням, що означає int a=0;), b описанедвічі з різними типами, а c описане двічі, але не визначене. Ці види помилок (помилки компоновки) не можуть бути виявлені компілятором, що за один раз бачить тільки один файл. Компоновщик, однак, їх виявляє. Наступна програма не є C++ - програмою (хоча CІ програмою є):
// file1.c:
int a;
int f () {return a;}
// file2.c:
int a;
int g () {return f ();}
По-перше, file2. c не C++, тому що f () не була описана, і тому компілятор буде незадоволений. По-друге, (коли file2.c фіксований) програма не буде скомпонована, оскільки a визначене двічі. Ім'я можна зробити локальним в файлі, описавши його static. Наприклад:
// file1.c:
static int a=6;
static int f () {/*...*/}
// file2.c:
static int a=7;
static int f () {/*...*/}
Оскільки кожне a і f описане як static, в результаті програма ,що одержується є правильною. В кожному файлі своя a і своя f (). Коли змінні і функції явно описані як static, частину програми легше зрозуміти (вам не треба никуда більше заглядать). Використання static для функцій може, окрім цього, вигідно впливати на витрати за викликом функції, оскільки дасть оптимізуючому компілятору більш просту роботу. Розглянемо два файлу:
// file1.c:
const int a=6;
inline int f () { /*...*/ }
struct s {int a, b;}
// file1.c:
const int a=7;
inline int f () { /*...*/ }
struct s {int a, b;}
Раз правило 'рівно одне визначення' застосовується до констант, inline- функцій і визначення функцій так же, як воно застосовується до функцій і змінних, то file1.c і file2.c не можуть бути частинами однієї C++ - програми. Але якщо це так, то як же два файли можуть використати одні і ті же типи і константи? Коротко, відповідь така: типи, константи і т. д. можуть визначатися стільки раз, скільки потрібно, за умови, що вони визначаються однаково. Повна відповідь декілька більш складна.
Інструкція користувачу
Програма запускається і видає на екран меню з трьох пунктів (формування файлу, запит, вихід).
На вибір першої опції меню формується на одному з дискових пристроїв двійковий файл SESSIA.DAT, що містить зведення про здачу студентами сесії. Структура запису: індекс групи (7 символів), Ф.И.О. студента (15 символів), оцінки по чотирьох іспитах ( чи символи цифри в діапазоні 2 5) і п'яти залікам ("s"- зараховано, "n"- не зараховано). Організовується заповнення файлу вмістом у режимі діалогу з користувачем (уведення закінчується набором індексу групи, що складається з 7 пробілів). Якщо файл із таким ім'ям існує, його коректування не робиться.
На вибір другої опції меню надається можливість користувачу:
" по введенню прізвища студента одержати результати сесії;
" по введенню групи одержати результати здачі сесії групою з підрахунком кількості студентів, що здала всі заліки й іспити на "4" і "5", і кількість невстигаючих студентів, що не здали хоча б один чи залік що мають "2" хоча б з одного іспиту.
На вибір третьої опції чи меню натисканні користувачем на клавішу ESC здійснюється вихід із програми зі збереженням введеної інформації.
Лістинг програми
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI M_PI
const char *filename = "SESSIA.DAT";
void draw(int x0,int y0)
{
unsigned char color[16]={0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15};
struct bmpinfo
{
char h1,h2;
unsigned long
size,reserved,offset,b,width,height;
unsigned int plans,bpp;
};
bmpinfo info;
FILE *f;
int x,y;
unsigned char b;
unsigned char bh;
unsigned char bl;
int nb;
int np;
int i,j;
if((f=fopen("63.bmp","rb"))==NULL)
printf("-1");
//return -1;
fread(&info,sizeof(info),1,f);
if(info.bpp!=4)
printf("-2");
//return -2;
x=x0;
y=y0+info.height;
nb=(info.width/8)*4;
if((info.width/8)!=4)nb+=4;
fseek(f,info.offset,SEEK_SET);
for(i=0;i<=info.height;i++)
{
np=0;
for(j=4;j{
b=fgetc(f);
if(np>4;
putpixel(x,y,color[bh]);
x++;
np++;
}
if (np{
bl=b&15;
putpixel(x,y,color[bl]);
x++;
np++;
}
}
x=x0;
y--;
}
fclose(f);
}
void help_(void)
{
restorecrtmode();
clrscr();
textmode(BW80);
textcolor(2);
cprintf(" Мiнiстерство освiти i науки України");
printf(" ");
cprintf(" Рiвненський державний технiчний унiверситет");
printf(" ");
cprintf( Кафедра електротехнiки i автоматики");
printf(" ");
printf("
Loading...

 
 

Цікаве