Бас бет Авторы Посты от Zangar

Zangar

5345 ПОСТЫ 0 КОММЕНТАРИИ

Сыртқы кітапханалар. Модульдер

Модульдер және олардың қолданылуы туралы айтпастан бұрын, Люйс Кэроллдың "Алиса Ғажайып жлемінде" ертегісінен үзінді оқиық. Алисаның Ақ Серімен әңгімесі:

  • Иә бұл өте жақсы ара ұясы, - деп Сері еріксіз келісті. – Ең жақсы сапалы! Бірақ ол араларға бір себептен ұнамайды! Менде бұнда тағы тышқан қақпаны бар. Тышқандар араларды қуатын көрінеді. Немесе аралар – тышқандарды. Білмеймін…
  • Ал мен сізге тышқан қақпаны не үшін керек екенін ойлап тұрғам – деді Алиса. – Аттарда тышқанның өмір сүруін елестету қиын…
  • Қиын, бірақ болады, - деп Сері жауап берді. – Мен олардың менің денемде жүгіріп жүргенін қаламаушы едім.
  • Білесің бе, - деп жалғастырды ол, үндемей тұрып, - бәріне дайын болу керек! Міне неліктен менің атымның аяғында білезіктер тағылған.
  • Ал ол не үшін? – деп қызықты Алиса.
  • Акулалар тістеп алмауы үшін, - деді Ақ Сері.
  • Бұны мен өзім ойлап таптым. Атқа шығуға көмектесші. Мен сені шетке шығарамын. Ал мына ыдыс неге арналған?
  • Бәлішке арналған, - деді Алиса.
  • Онда оны өзімізбен бірге ала кетейік, - деп ұсынды Сері. – Егер біз бәліш тауып алсақ, ол бізге қажет болады. Дорбаны ұстай тұр, - мен оны осыған салайын…

Бұл оңай болмады. Алиса дорбаны қатты ұстап тұрды, бірақ Ақ Сері өте икемсіз болды: ол дорбаға ыдысты салудың орнына, оған өзі құлай берді. Ақырында ыдыс әрең салынады.

  • Әрине онда оған орын аз, - деп ескерді Сері. – Дорба шам қоайғыштарға лық толы, бірақ басқа не істейсің!

Ол дорбаны ер тоқымға іліп қойды, одан сәбіздің сабақтары, пештің қықыштары және әр түрлі нәрселер салбырап тұрды.

Ақ Серінің аты және қаруы қалай көрінгенін елестете аласыздар ма?

Borland Pascal сізге, үлкен саннан құралған тұрақтыларға, мәліметтер типіне, айнымалыларға, процедураларға және функцияларға қатынауды қамтамасыз етеалады. Олардың ішіндегі кейбіреулері Borland Pascal үшін ерекше, ал кейбіреулері  Windows немесе Dos орталары үшін қолданбалы есептерді программалауда ерекше. Олардың саны өте көп, дегенмен, өз программаңызда олардың бәрін бір мезетте аз қолданасыз. Сондықтан олар модульдер деп аталатын өзара байланысты топтарға бөлінген. Бұл жағдайда тек программаға қажетті модульдерді қолдануға болады.

Программалық модуль (Unit) тұрақтылар, мәліметтер типі, айнымалылар, процедуралар және функциялар жиынтығы болып табылады. Әр модуль Паскальдағы жекеленген программаға ұқсас: сіз программаңызды орындаңға жіберместен бұрын, оның шақырылатын және қажетті инициализацияны жүзеге асыратын негізгі денесі болуы мүмкін. Қысқаша айтқанда модуль, программаға қоюға болатын және программаны жеке компилиаланатын бөлшектерге бөлуге болатын, сипаттамалар кітапханасы болып табылады.

Модуль құрамына кіретін, процедуралар және функциялар, мәліметтер типін және айнымалылар арасындағы тәсілдер жиынтығын қамтамасыз етеді. Бірақ та бұл тәсілдерді нақтылы жүзеге асыру интерфейс және жүзеге асыру (реализация). Егер программа модуьді пайдаланса, модульдің барлық сипттамалары бұл программаға, оның өзінде анықталғандай ашық болады.

Модуль құрылымы программа құрылымына ұқсас. Модульдің ішіндегі барлық сипаттамалар бір-бірімен байланысты. Мысалығы, Strings модулі нөлдік белгімен аяқталатын жолдарды өңдейтін ішкі программаларға қажетті сипаттамалардан тұрады. Сонымен қатар іщкі программалар сияқты, модульдер де стандартты және стандартты емес немесе қолданушының модулі, яғни, програмалаушылар өздері құрастыратын бола алады. Стандартты және стандартты емес модульдер құрылымы бірдей болғандықтан, олардың сипатталуы бірдей ережеде құрылған.

Модульдер программаға оның атын uses  компилятор нұсқауында сипаттаудың көмегімен қосылады. Мысалы, былай сипатталғанда:

Uses Dos, Crt;

Аталған модульдердің құрамындағы барлық ішкі программалар, айнымалылар, типтер және тұрақтыларды программада қолдануға болады.

Ескерту. Модульдердің аттары оларды хабарлағанда үтірмен бөлінеді, ал соңғы модульден кейін үтірлі нүкте қойылады!

System модулі

System модулі барлық құралдар үшін, төменгі деңгейлі ішкі  программаларды жүзеге асырады, мысалы: енгізу-шығу, жолдық айнымалылармен жұмыс, ауыспалы нүктемен жасалынатын операциялар және жадыны динамикалық бөлу.

System модулі Borland Pascal-дың барлық стандартты және құрылған процедураларынан және функцияларынан тұрады. Стандартты Паскальдің  бөлігі болмайтын және басқа модульдерде орналаспаған Borland Pascal-дың кез-келегн ішкі программасы System модулінің құрамында орналасқан.

Ескерту. System модулі программаға автоматты қосылады (үнсіз келісім бойынша) және оны Uses операторында көрсету қажетті емес.

Стандартты емес модуьдерді пайдалану программаларды стандарттау мен құрылымдылығының деңгейін жоғарылатады, бұл программаларды өңдеуді жылдамдатады, олардың түсініктілігін және  жетілдірудің қарапаймдылығын қамтамасыз етеді. Мұндай кітапханада, мысалға, жиі пайдаланылатын массивтерді (енгізу процедуралары, матрицаларды шығару, массивтерді сорттау және т.б.) өңдегендегі операцияларды сипаттағандай, бөлек программаға көп көңілді тек берліген есепке тән  сұрақтарды шешуге бөледі, сондықтан стандартты және стандартты емес модульдерде іске асырылмайды. Бұл тек программаны өңдеу уақытын қысқартып қана қоймай, оның көлемін де азайтады. Жоғарыда айтылғанда, программалар арнайы сегментте орналасады, оның көлемі компьютердің оперативті жадысын құрайтын басқа сегменттер сияқты 64 Кбайттан аса алмайд. Әрине, бұл үшін оны үлкейтуге қажеттілік туады. Бұл мақсатқа жетуде модульдер бағаланбайтын қызмет көрсетеді. Әр модуль бөлек сегментте орналасады, сондықтан модульдеррі және программалары бар барлық сегменттердің қосындысы, компьютердің оперативті жадысының көлемін ғана шектелген (640 Кбайт).

Осындай алғы сөзден кейін, оқушының стандартты емес модульдерді пайдалануда пайдасы жайлы ешқандай күмәні жоқ екеніне сенімдіміз. Оларды өңдеудің өнеріне үйренуде жеңе алмайтын алдымен модуьдің құрылымымен, оның бөлімдерінің міндеттімен және өңдеу технологиясымен танысайық.

  1. Модуль құрылымы 

Модуль  (unit) келесі бөліктерден тұрады:

  • аты немесе тақырыбы (мысалы, unit Мy_Мodyl);
  • интерфейс немесе хабарламалар бөлімі (Interfase);
  • орындаушы бөлігі немесе іске асыру бөлімі (Implementation);

Бұнда көрсетілген модуль бөлімдерінің тізбегі міндетті болып табылады, дегенмен осы бөлімді құрайтын блоктар (немес тек денелері) жарым-жартылай немесе толығымен болмауы мүмкін (бұрынғыдай осындай элементтерді сипаттағанда тік жақшалар пайдаланылады). Одан кейін модуль ішіндегі бөлімдерін сипаттаймыз.

Модуль тақырыбы

Модуль тақырыбы unit түйінді сөзінен және бірегей атаудан (модуль ішінде қайталанбауы керек) тұрады, оның кез-келеген атау сияқты 64-ке дейін белгісі бола алады.

Модуль интерфейсі

Interface {бұл бөлімнің Uses-тен басқа барлық объектілері, мәліметтер сегментінде орналасады}

[Uses …  {Берілген модуль пайдаланатын, модульдердің ататры  түгенделеді}]

[Cons …  {Осы модуль қосқан программаға немесе басқа модульдерге, рұқсат етілуі тиіс тұрақтылар сипатталады}]

[Var  …  {Программада көрінетін немесе басқа модульдерде қолданатын айнымалылар сипатталады}]

[Procedure…{Формальды параметрлер сипаттамасымен толық процедураның атауы келтіріледі}]

…{Осы моудьді іске қосқан программа немесе басқа модуьдерден қол жеткізе алатын барлық басқа процедуралар мен модульдер функцияларының толық тақырыптары сипатталады}

Модульдің орындаушы бөлігі

[Uses …  {Берілген орындау бөлігінде пайдаланылған және интерфейс көрсетілмеген модуьдер атауы көрсетіледу}]

[Lаbel… {Берілген модуль бөліміндегі, ішкі программаларда пайдаланылған таңбалар аттары көрсетіледі}]

[Сonst… {Берілген модуль бөліміндегі ішкі программаларда пайдаланылған және интерфейс аталмаған тұрақтылар сипатталады}]

[Var  …  {Берілген модуль бөліміндегі ішкі программаларда пайдаланылған және интерфейсте аталмаған айнымалылар сиптталады}]

[Procedure…{Interface-те сипатталған процедураның қысқаша немесе толық аты келтіріледі}]

{Процедура денесі}

[Function{Interface-те сипатталған функцияның қысқаша немесе толық аты келтіріледі}]

{Функция денесі}

Көріп отырғаныңыздай, бұл бөлімде интерфейсте сипатталған модульдің барлық ішкі программаларын сипаттау берілген. Онда сонымен қатар, модульдің берілген бөлімнің ішкі программаларында пайдаланылатын және интерфейсте сипатталмаған типтер мен айнымалылар сипатталуы мүмкін, онда пайдаланылатын, жергілікті таңбалар тізімі болуы мүмкін. Implementation бөлімінде сонымен қатар, интерфейсте сипатталған процедуралар мен функциялардың жұмысына қатынасушы, бірақ өздері онда сипатталмаған іщкі программалар сипатталуы мүмкін. Программада қосушы модуль олар ашуға болмайтын программаларға жатады (олар программада көрінбейді). Бұл бөлімде сипатталған модульдер, таңбалар, тұрақтылар, типтер және айнымалылар программа үшін жабық. Бұл объектілерде барлығы, соns-дан басқасы стек сегментінде орналасқан. Тұрақтылар мәні мәліметтер сегментінде болады бірақ та олар көрінбейді.

Инициализация бөлімі

Бұл бөлім, Assign процедурасының көмегімен сол немесе басқа файлдардың  байланысын іске асыруды қамтамасыз етеді, қандай да бір айнымалылар байланысын (мысалы, S:=0; Р:=1; қою), тұрақты-айнымалылар (типті тұрақтылар), әрқашан программаның басында орындалатын қандай да бір реттік әрекетті орындау, мысалы, Writeln("Салем!") процедурасының көмегімен экранда хабарды басу.

Бөлім Веgin сөзімен басталып, одан кейін атқарушы операторлар тұрауы мүмкін, ал соңы end. (нүктемен) сөзімен аяқталады.

Егер программада да және оның модулінде де айнымалы бір атпен сипатталатын болса, онда модульдегі ондай айнымалы программада көрінбейді. Оған программада қатынауды, осындай айнымалының алдына нүкте арқылы ажыратылып жазылатын квалификатордың көмегімен жүзеге асуруға болады. Квалификатор ретінде модуль атауын алуға болады. Мысалы, программа денесінде My_Model модулімен операторлар болуы мүмкін.

Егер  модуль айнымалыса мен ішкі программаның жергілкті айнымалысы мен сәйкес келсе, модуль айнымалысын оның кез-келген кшкі программада көрінуін қамтамасыз етуді программада көрінуін қамтамасыз етуді ұқсастық түрінде құруға болады.

Сонымен қатар, квалификатор көмегімен ішкі программалардың ауқымды айнымалыларын Көрінетін етуге болады. Аттас айнымалылы ішкі программалар, программасы..

Егер сіздің программаңызға модуль қосылған, ал интерфейсте басқа модуль хабарланған болса, онда модульдің барлық объектілері программада қамтамасыз ету үшін, олардың барлық атауларын тікелей uses компилятор нұсқауында сипаттау керек.

Әртүрлі базалық типтерді біріктіру. Жазба типі

Массив анықтамасында айтылғандай, массив дегеніміз құрылымына және қолдану тәсіліне байланысты, бір типті нөмірленген тізімдідер. Егер әртүрлі типтегі мәліметтер берілген болсын. Осы тізімнен белгілі бір жлыдар аралығында туған оқушыларды сұрыптап бөліп алу керек болсын.

Мәліметтерді сақтау үшін оған екі массмвке орын бөлуімізге болатын еді. Бірінші массив (snring типті) оқушылардың аты жөнін сақтауға, екіншісі сақтауға арналған. Егер бізге қосымша мәліметтер (мысалы: сыныбы, ұлты, т.б.) енгізу керек болса, онда енгізуге тура келеді. Бір мезгілде бірнеше массивпен жұмыс істеу және оларды смпаттамалары бойынша сұрыптауға, әрине болады, бірақ үлкен жұмысты талап етеді. Сонымен қатар бұл мәліметтерді файлда сақтау керек болса не  істейміз?

Файлдар туралы сұрақтарды талдағанда айтылғандай, файл элементтері тек бір типті элементтер болып келеді. Олай болса әр түрлі типтегі элементтерді әрбір типке – жолдық типке айналдырып, мәтіндік файлдармен жұмыс істеуіміз керек.

Мәліметтерді сақтай аламыз, бірақ болашақта бұл мәліметтермен жұмыс істеу жеткілікті қиындық туғызады.

Бұл қиындықтан шығу үшін мәліметтердің құрама типі қолданады. Мәліметтердің бұл типі жазба деп аталады. Жазбалар әр түрлі типтегі элементтер жиынтығынан тұрады. Жазба элелменттерін құраушыларды өріс деп атайды да, әрбір өрістің өзіндік атауы болады. Әрбір жазбаның бірегей атауы болады.

Жазба атауы

Тізім

Өрістің атауы

Фамилия

Аты

Туған жылы

Өрістер мәніАхметовАлдияр1980

Жазбаны өңдеу элементар объектә түрінде шығады. Мұндай объект типі – record (жазба) деп аталады. Олай болса, мәліметтердің типтеріне байланысты шектеулер алынып тасталады.

Жазбаларды сипаттау үшін, оның атауы, берілген өрісте сақталатын мәліметтердің атауы және типі көрсетілуі керек. Жазбалардың жалпы түрде сипатталуы келесідегідей:

Type<жазба атауы>=Record

<1 өріс>:<1 тип>;

<2 өріс>:<2 тип>;

……………………

<n өріс>:<n тип>;

end;

Типті файлдан мәліметтерді оқу

Титі файлдар  тікелей қатынау файлдарына жатады, ол оның қатал ұйымдастырылғанына байланысты. Бұрында айтып өткеніміздей, типті файлдың компоненттері біркелкі, қатаң тәртіптегі көлемде орын алады. Сонымен тұтас блок бар делік және оған қатынауды ұйымдастырғанда, оған олардың орналасуы жайлы қосымша ақпараттарды сақтау қажет емес.

Типті файлдардан мәліметтерді оқуға арналған негізгі проуедураларды қарастырамыз.

Типті файлдармен жұмыс жасар алдында, мәтіндік файлдардағыдай, файл атауын жариялау және файлдағы мәліметтердің типін көрсету керек, нақтылы файл атауын байланыстыратын айнымалы атауын сипаттауымыз кереек (2.8.5 тақырыбын қараңыз).

Reset(<файл атауы>) – процедурасы файлдф оқуға ашады және көрсеткішті файлдың басына орналстырады.

Типті файлдан мәліметтерді оқу үшін read( ) процедурасын қолданады. Берілген процедураның жұмысы кезінде, блоктан мәліметті оқыған соң, көрсеткіш автоматтты түрде келесі жазбаға ауысады. Егер көрсеткіш соңғы жазбаның соңынан тұрса, онда программа орындалуында қателік болады.

Бұл қиындықтан шығу үшін FileSize( ) функциясын қолдануға болады.

FileSize(<файл атауы>):longintфункциясы файлдағы компоненттер санын анықтайды. Яғни, бізге файлдағы барлық мәліметтерді оқу керек болса, оқу процедурасын FileSize( ) рет орындауымыз керек. Мisal_F8 программасымен құралған типті файлдан мәліметтерді оқудың программасының мәтінінен үзінді келтіреміз:

Procedure Init;

Var

FileInput : file of integer;

I, Sanau : integer;

San:array[1..100] of integer;

begin

assign(FileInput, ‘mayFile.in’);

reset (FileInput);

Sanau :=FileSize(FileInput);

For i:=1 to Sanau do

Read(FileInput, San [i]);

Close(FileInput)’

End;

Тақырыптың басында типті файлдар – тікелей қатынау файлдарына жататынын айтып кеткенбіз. Яғни, файлдың кез-келген бөлігіндегі мәліметтерді оқу үшін, оның алдында тұрған мәліметтерді оқуды қажет етпейтін файлдар кездеседі.

Көрсеткішті қажетті мәліметті оқуға қою үшін, Seek() – процедурасын қолданады. Оның түрі келесідегідей болады:

Seek(<файл атауы>, <жазбаның нөмері>);

Сонымен қатар типті файлдарда нөмірлеу нөлден басталатыны есте ұстау керек, яғни бірінші лементтің нөмері "Нөл". Олай болса, біз көрсеткішті үшінші элементті оқуға көшіру үшін, Seek( ) -  процедурасын қолдануды ескеруіміз керек. Мысалы:

Seek(FileInput, 2);

немесе

Seek(FileInput, 3-1);

Типті файл. Типті файлдарға мәліметті жазу

Келесі есепті қарастырып көрелік:

Мәтіндік файлға төрт таңбалы 50 сан жазу керек. Әрбір сан жеке жолдарға жазылатын болсын. Нәтижесіндегі файлдың өлшемі қандай болады?

Оны жуықтап бағалап көрелік. Әрбір таңба 1 байт орын алады. Ондай таңбалардың саны 50×4=200. Мәтіндік файлдарға берген анықтама бойынша әрбір жолдың соңында файл соңы белгісі болғандықтан, файл өлшемі 250 байттан асып кетеді.

Бұл мәліметтерді кіші өлшемдегі файлдарда сақтауға бола ма?

Біздің программамыз мәліметтерді өңдей алуы үшін, біз оған алдын ала оперативті жадыдан белгілі бір орын бөлуіміз керек. Жадыдан бөлінетін орынның өлшемі мәліметтердің типіне байланысты болғандықтан, бір элементті сақтау үшін, integer типті элементтерге 2 байт, byte типті бір элементке 1 байт орын бөлінеді.

Мұндай амалдарды мәліметтерді файлда сақтау кезінде қолдануға бола ма? Болады екен. Типті файл деп аталатын арнайы файлдық типтер бар.

Типті файл – барлық элементтері бір типті мәліметтер болып келетін файл түрі. Типті файл элементтері файлдық типетен басқа кез-келген тип бола алады.

Әр элементті файлға жазу үшін, мәліметтердің типіне байланысты, міндетті белгіленген мөлшерде орын бөледі. Типті файлдарды смпаттау бөлімінде ашу үшін, мәтіндік файлды смпаттағандай, файл мәліметтерді смпаттайтын тип жазылады.

<файл атауы>:file of<мәліметтер типі>

Біздің жағдайымызда:

Бұл жазу, берілген файлдағы мәліметтер – 32768-ден 32767 аралығында жататын бүтін сандар екенін көрсетеді.

Сонымен қатар, типті файлдармен жұмыс істегенде де, assign( ) - процедурассының көмегімен нақтылы файл аты мен байланыстыратын атауды көрсетеміз.

Біздің жағдайымызда:

Assign(FileOut ,’may.dat’)

Типті файлдармен жұмыс жасағанда мәтіндік файлдардағы секілді оларды жазуға және оқуға ашуға болады. Ол үшін стандартты функциялар қолданады:

Rewrite(<файл атауы>)процедурасын файлды жазуға  ашады және курсорды файлдың басына орналастырады.

Типті файлдарға мәліметтерді жазу write() процедурасы арқылы жүзеге асырылады. Ол мәтіндік файлдардағы write() процедурасына ұқсас. Алайда write() процедурасын типті файлдарда қолдануында біршама өзгешелік бар. Әрекетті орындау кезінде көрсеткіш келесі жазу блогына көшеді. Типті файлдарда writeln() процедурасын қолдану қателік көрсетеді.

Типті файлдарға writeln() процедурасын қолдануға болмайды.

Типті файлдармен жұмыс аяқталған соң Close<файл атауы>) – процедурасы көмегімен файл жабылады.

Енді тақырып басында берілген есепті шешуді жалғастырайық. 2.8.2 тақырыбындағы Мisal_F1 мәліметтерді шығару программасына келесідегідей өзгертулер енгіземіз:

Procedure Exi;

Var

FileOut  :File of integer;

I   :integer;

Begin

Assign (FileOut, ‘mayFile.in’);

Rewrite(FileOut);

For i:=1 to Sanau do

Write (FileOut, San[i]);

Close(f);

End;

Программаны толықтырып жазып Мisal_F8 атымен сақтаңыз. Программа орындалғаннан кейін "mayFile.in" файлын ашып көріңіз. Не көрдіңіз?

Мәтiндiк файлдан мэлiметтердi оқу

Егер мәтіндік файлдардағы жазбалар саны белгілі болса, онда мәліметтерді оқу онша қиын емес. Ал, егер мәтіндік файлдағы жазбалар саны белгісіз болса ше, онда не істейміз? Егер сізге орындалатын әрекеттердің саны белгісіз болса, онда қайталану саны белгісіз цикл операторларын қолдануға болатындығын білесіз.2.8.2 тақырыбында мәтіндік  файлдардың қасиеттерін сипаттаған болатынбыз, онда файлдың соңына файл соңын көсететін белгі код қойылатыны жайлы айтылған. Олай болса, мәліметтерді оқу файлдың соңы табылғанша жалғаса береді. Егер файл бос болса, яғни онда ешқандай жазба жоқ, онда одан мәліметтерді оқуға болмайды. Осы айтылғандарды тұжырымдай келе, алғы шарт циклін қолдану керек екеніне көзіміз жетті. Файл соңы белгісін анықтау үшін, EOF(Name Var)-процедурасын қолданады ағылшын тілінде EndOf File—файл соңы деген сөзден қысқартылып алынған. Жақшаның ішіне  assing() процедурасында көрсетілген файлдың нақтылы атымен байланыстыратын айнымалы атауы жазылады. EOF(Name Var)-процедурасының мәні,  False(жалған)-болады егер файл соңына жетпеген болса  Ture(ақиқат)-болады, егер файлдың соңы анықталған болса. Олай болса, алғы шарт циклін қолданғанда  Not EOF(Fileln)-шарты әзірше ақиқат болса, онда цикл орындала береді, яғни файл соңы анықталғанша. Бұл жағдайда мәліметтерді енгізу процедурасы келесідей болады:

procdure lnit;

var

{айнымалы атауын мәтiдiк файл түрiнде сипаттау}

Fileln:text;

Begin

{айнымалыны нақтылы файл атымен байланыстыру}

assing(fileln,`mayFile1.in`);

{файлды оғуға әзiрлеу}

reset(Fileln);

{санауыштын бастапқы мәнi}

Sanau:=0;

Begin

{санауыштын мәнiн бiрге арттыру}

inc(Sanau);

{массивтен элементтердi оқу}

read(Fileln,San[i]);

end;

{файлды жабу}

close(Fileln);

San: arry[1…100] of  integer;

 Sanau: byte;

Жазбалар саны белгісіз файлдан мәліметтерді оқу жұмысының  дұрыстығын тексеру үшін, оқылған мәліметтер массивін экранға баған түрінде шығарамыз:

procedure exi;

var

i: byte;

begin

for i:=1 to Sanau do

begin

writeln(San[i]);

end;

end;

Егер сіз программа мәтінінің қалған бөлігін дұрыс құрастырыңыз, онда жазбалар саны 100-ден аспайтын мәтіндік файлдан мәліметтерді және жазбалар санын оқитын программа аласыз. Сонымен қатар бұл программа файлдағы барлық жазбалар санын анықтап, оны экранда жазады.

Енді екі өлшемді массив мәліметтерін файлдан қалай оқуға болатындығын қарастырыралық. Жоғарыда айтылғандай мәліметтерді файлдан оқу, оның файл соңын анықтайтын белгісіне байланысты екен. Бірақ екі өлшемді массивтерді жазғанда оның элементтері жол бойынша және баған бойынша жазылады. Сондықтан файлдан мәліметтерді оқығанда, алдымен алғашқы жол бойынша файл соңы белгісі анықталады. Жолдағы мәліметтер толығымен оқылып болған соң келесі жолды оқуды бастау керек. Мәтіндік файлдар қасиеттерін қарастырғанда айтылғандай, онда әрбір жол, жол соңы белгісімен кодымен аяақталады. Осы белгіні анықтау үшін стандартты  EOLn(Name Var) процедурасын қолданады.  EOLn(), ағылшын тілінде End of length жол соңы сөзінің қысқартылған түрі. Жақшаның ішіне  assing() процедурасында көрсетілген файлдың нақтылы атымен байланыстыратын айнымалы атауы жазылады. EOLn(Name Var)-процедурасының мәні,  False(жалған)-болады, егер жолдың соңына жетпеген болса,  Ture(ақиқат)-болады егер жолдың соңы анықталған болса. Олай болса мәліметтерді оқу жалғаса береді егер  Not EOF(Fileln) шарты ақиқат болса, яғни жол соңы анықталғанша. Бұл жағдайда мәліметтерді оқу процедурасының түрі келесідей болады:

procedure lnit;

var

i: byte;

{айнымалы атауын мәтiндiк файл түрiнде сипаттау}

Fileln:text;

Begin

{айнымалыны нақтылы файл атымен байланыстыру}

assing(fileln,`mayFile5.in`);

{файлды оқуға әзiрлеу}

reset(Fileln);

{жолда санауыштың бастапқы мәнi}

Sanau Jol:=0;

{массив элементтерiн жол  бойынша оқу}

while Not EOF (Fileln)do

 begin

{санауыштың мәнiн бiрге арттыру}

inc(Sanau Jol);

{бағанда санауыштың бастапқы мәнi}

SanauBagan:=0;

{массив элементтерiн жол  бойынша оқу}

while Not EOF (Fileln)do

begin

{санауыштың мәнiн бiрге арттыру}

inc(Sanau Bagan); 

{массив элементтерiн  оқу}

read(Fileln, San[i,j]);

 end;

{курсорды жаңа жолдың басына қою}

read(Fileln, San[i,j]);

end;

{файлды жабу}

close(Fileln);

end;

1.Бір өлшемді массивті құрайтын `MayFile.in` файлынан мәліметтерді оқып, оларды компьютре экранына шығаратын программа жазыңыз және оны  `MayFile6.pas` атымен сақтаңыз

Мәтiндiк файлдан мәлiметтердi оқу

Өткен тақырыптарда сіздер, мәліметтерді мәтіндік файлға жазуды үйреніңіздер. Енді оларды қайтадан файлдан қалай оқуға болатынын қарастырамыз.

Ол үшін `mayFile1/in`  файлын пайдаланамыз. Мәліметтерді файлға жазу кезіндегідей, біздің файлмызды байланыстыратын айнымалыға атау беруіміз керек. Айталық, ол атау Fileln болсын, содан кейін біз оны мәтіндік файл ретінде сипаттауымыз керек. Бұл айнымалыны біз енгізу процедурасында пайдаланатын болғандықтан, сол процедураның жергілікті айнымалысы ретінде сипаттаймыз.

var

Filelnt:text;

Одан кейін біз программада, “мәтіндік типті ” Fileln айнымалысы, біздің

`mayFile1.in` атауымен берілген нақтылы файлмызды белгілейтіндігін көрсетуіміз керек. Ол үшін assing(NameVar,NameFile)-процедурасын қолданады.

Енді файлдан мәліметтерді оқу үшін, берілген файлды ашуымыз керек. Ол үшін, reset(NameVar)—процедурасында қолданады, мұндағы  NameVar-сіздің файлды белгілеуге берген айнымалыңыздың атауы, біздің жағдайымызда, ол NameVar-Fileln. Reset(NameVar)-процедурасы, мәліметтерді оқуға файлды ашады және курсорды файлдың басына орналастырадв. Егер ондай жоқ болса, қателік туралы хабарлама  береді.      Енді мәліметтерді файлдан оқуға барлығы дайын болды. Ол үшін өзімізге бұрынан таныс  Read() және  Readln() процедураларын пайдаланамыз. Мәліметтерді оқу пернетақтадан емес, файлдан жүзеге асу үшін, мәліметтерді оқудың жолын көсетеміз. Яғни, жақшалардың ішіне, assing()- процедурасының көмегімен біздің файлмызды байланыстырып тұрған, айнымалының атауын көрсетеміз.

`MayFile.in`файлындағы бірінші сан, файлдағы барлық сандардардың мөлшерін көрсетеді. Сондықтан, алдымен файлдан

Sanau айнымалысының мәнін оқытамыз,содан кейін параметрлі циклді қолданып, файлдағы сандардың мәндерін оқимыз. Мәліметтер толық оқылып болған соң, өзімізге таныс Close() процедурасын пайдаланып, файлды жабу керек.

Енді, мәліметтерді фйалдан оқу процедурасы қандай болатындығын көрелік:

procedure lnit;

 var

 i:byte;

Fileln:text;

begin

assing(fileln,`mayFile1.in`);

reset(Fileln);

readln(Fileln,Sanau);

for i:=1 to Sanau do

read(Fileln,San[i]);

close(Fileln);

end;

Дәл осындай, егер өлшемдері белгілі болса, мәліметтерді екі өлшемді массивтен оқу да онша қиыншылық туғызбайды. `MayFile.in5` файлынан мәліметтерді оқитын программадан үзінді мысалға келтірейік:

procedure lnit;

var

i,j:byte;

{айнымалы атауын мәтiндiк файл түрiнде сипаттау}

Fileln  :text;

begin

{айнымалыны нақтылы файл атымен байланыстыру}

assing(Fileln,`mayFile5.in`);

 {файлды оқуға ашу}

 reset(File);

{массив өлшемдерiн оқу, курсорды жаңа жолға көшiру}

readln(Fileln,JolSany,BaganSany);

{массив элементтерiн жол және баған бойынша оқу}

 for:=1 to JolSany do

read(Fileln,San[i,j]);

{файлды жабу}

close(Fileln);

end;

Мынаған көңіл аударыңыз, массив элементтерін оқу кезінде, Readln() процедурасын қолданбай, тек қана Read() процедурасы қолданылды. Бұл мүмкін еді, себебі массив элементтерін оқу үшін оның өлшемдері алдын ала белгілі болды. Егер мәтіндік файлдағы элементтер жазбалар саны алдын ала белгісіз болса, онда қайталану саны белгісіз цикл операторларын қолдануға тура келеді.

Тапсырма

  1. Бір өлшемді массивті құрайтын `MayFile.in` файлынан мәліметтерді оқып, оларды компьютре экранына шығаратын программа жазыңыз және оны `MayFile6.pas` атымен сақтаңыз.
  2. Екі өлшемді массивті құрайтын `MayFile5.in` файлынан мәліметтерді оқып, оларды компьютер экранына программа жазып және оны  `MayFile7.ipas` атымен сақтаңыз.
  3. pas` программасын пайдаланып, `MayFile2.in` файлынан мәліметерді оқыңыз. Алынған нәтижені 1 тапсырма нәтижесімен салыстырыңыз. Нәтижені түсіндіріңіз.
  4. BP мәтіндік редакторын пайдаланып `MayFile1.in`,  `MayFile2.in` және  `MayFile5.in` файлдарындағы массив өлшемдерін немесе жазбалар саные көрсететін жолды алып тастаңыз.

Мәтіндік файлға мәліметтер жазу. Екі өлшемді массив

Алдыңғы тақырыпта сіз мәтіндік файлдарды ашуды, оған ақпараттарды жазуды үйреніңіздер. Write()- процедурасын пайдаланып мәліметтерді бір жолға, ал writeln()—процедурасын пайдаланып оларды бағанға жазуды көрдік. Осы білгендерімізді пайдаланып, келесі есепті шешіп көрелік:

Пернетақтадан, өлшемі 100х100, элементтері бүтін сан болатын, екі өлшемді массив енгізіледі. Осы массивті элементтерінің орналасу реті бойынша, ayFile5.in` атымен, мәтіндік файл  түрінде жазатын, программа жазу керек.

Бұл есеп те, алдыңғы тақырыпта қарастырылған есепке ұқсас, екі негізгі кезеңнен тұрады:

1.Пернетақтадан мәліметтерді енгізу

2.Оларды атауы ayFile5.in` болатын, файлға жазу керек.

Бірінші кезеңді орындау үшін :

  • Пернетақтадан енгізілетін, массив өлшемдерінің нақты мәндерін кіргізу;
  • Массив өлшемдерін біле отырып параметрлі цикл операторын қолданып массив элементтеріне нақты мәндерді меншіктеу.

Мәліметтерді енгізу процедурасының мәтінін Misal_8 программасынан алуға болады. Ал мәліметтерді өңдеу процедурасы өзгеріссіз қалатындықтан, Misal_F1программасындағыдай болады.

Массив элементтерін  `МayFile5.in` файлына жазу процедурасының қандай болатындығын қарастыралық:

procedure exi;

var

FileOut: text;

begin

{нақтылы файлмен айнымалы арасындағы байланыс}

assing (FileOut,`mayFile.in`);

{файлды жазуға дайындау}

rewrite(FileOut);

{массив өлшемдерiн жазу және курсорды жаңа жолға көшiру}

writeln(FileOut, JolSany,``, BaganSany);

for i=1 to JolSany do

begin

{массив элементтерiн бос орын арқылы жолға жазу}

for j=1 to BaganSany do

write(FileOut,San[i,j],``);

{j-циклiн аяақтаған соң, курсорды жаңа жолға көшiру}

writeln(Fileout);

end;

{файлды жабу}

close(FileOut);

end;

Негiзгi программа мәтiнiнiң өзгерiсiз қалатындығын айтпаса да болады. Осы  программаны Misal_F5 атымен сактаңыз. Программаны iске қосудың алдымен, келесi әрекеттердi:

  • КурсордыExi процедурасын сипаттайтын жолдың басына қойыңыз;
  • Негiзгi менюдi Debug iшкi менюiн ашыңыз;
  • Add brekpoint… әрекетiн тандаңыз;
  • Enter пернесiн басыңыз.
  1. Жеке модульдермен “жұмыс істеу” (программалау) мүмкіндігі.
  2. Бір деңгейдегі “ойша” машиналардың тәуелсіздігі, программаның жекеленген бөліктерін, программаш\ның басқа бөліктеріне әсер етпей тәуелсіз жетілдіруге мүмкіндік береді. Э. Дейкстр атап өткендей: “... программаны жетілдіру, бір түрдегі (ойша) машиналардың басқа қолайлы машиналарға ауысуынан туындайды”.
  3. Құрылымдылық программаның жеке бөліктерімен жұмыс жасау.

Процедура мәтінімен жүріп өткенде құрама операторлардың жұмысына көңіл бөліңіз.

begin

{массив элементтерiн бос орын аркылы жолга жазу}

forj:=1 to BaganSany do

write (FileOut, San[i,j],``);

{j-цикл аякталган сон, курсорды жана жолга кошiру}

writeln(FileOut);

end;

Тоқтату нүктесін алып тастау үшін, келесі әрекеттерді орындаймыз:

  • Негізгі менюді бес\лсенділеңіз;
  • Негізгі менюден Debug  ішкі менюін ашыңыз;
  • Breakpoints пернесін басыңыз.
  • Enter пернесін басыңыз.

Экранда программаға қойылған барлық тоқтату нүктелерінің тізімі көһрсетілген,  Breakpoints… (тоқтату нүктелері) сұхбат терезесі (2.9-сурет) шығады.

  • Қажетті элементті белгілеңіз;
  • “Delete” (сұхбат терезесінен) батырмасын немесе  “D” (пернетақтадан) пернесін басыңыз.

Белгіленген тоқтату нүктесі тізімнен алынып тасталады. Егер сіз барлық тоқтату нүктесін алып тастағыңыз келсе--   “Clear all” батырмасын басу керек.

Тапсырма

  1. Егер exi ішкі программасындағы write және  writeln процедураларындағы бірінші параметр  FileOut көрсетілмесе San массиві қайда жазылған болар еді?
  2. Егер осы параметр тек writeln процедурасында көрсетілмеген болса не өзгереді?

Мәтіндік файлға мәліметтер жазу

Енді екіншісі кезеңді қарастырайық, яғни мәліметтерді «mayFile.in» атты мәтіндік типтегі файлға жазу керек. Алдымен өз файлмызды байланыстыратын, айналымның атауын беру керек.Айталық, ол айналымның атауы FileOut болсын, содан кейін біз оны мәтіндік файл ретінде сипаттаумыз керек. Бұл айнымалыны шығару процедурасында пайдаланатын болғандықтан, оны жергілікті айнымалы ретінде сипаттаймыз:

var

FileOut: text;

Одан кейін біз программаға, “мәтіндік” типтегі FileOut атты айнымалының, біздің “mayFile. in” атты нақты файлмызды белгілейтінін көрсетуіміз керек. Ол үшін assign(Name Var, Name File)процедурасы қолданылады. Name Var—бұл файлды белгілеу үшін берілген айнымалы аты, біздің жағдайда Name Var—дың орнына File Out сөзін жазасыз. NameFile—бұл біз жұмыс істейтін файлдың аты, біздің жағдайда”mayFile.in”.

Файл аты мен оның кеңейтілуінен  басқа орналасқан орнына қарай сипатталатыны да белгілі. Мысалы,”c,\bp\bin\MyFile.in”. Ал егер толық аты берілмеген жағдайда, үнсіз келісім бойынша сіздің программаңыз  орналасқан ағымдағы каталог қолданылады. Енді сіз берілген файлды ашып, оған мәліметтер жазылатындығын көрсетуіңіз керек. Ол үшін rewrite (Name Var)процедурасы қолданылады. Мұндағы, Name Var-бұл файлды белгілеу  үшін берілген айнымалы аты, біздің жағдайда Name Var—дың орнына  FileOut   атауы жазылады.  rewrite(

Name Var) процедурасы—файлды жазу үшін ашады және көрсеткішті файлдың басына орналастырады.

Енді мәліметтерді файлға жазуға бәрі дайын. Ол үшін бұрынан белгілі Write() және Write() процедураларын қолданамыз. Жазулар экранға емес файлға жазылуы үшін, мәліметтерді шығару бағытын көрсетеміз. Яғни, жақшаның ішіндегі мәліметтерді жазатын айнымалы атауының алдында, бізді файлмен байланыстыратын assign() процедурасындағы айнымалы атуын көрсетеміз. Айталық, берілгендерді шығыс файлына бір жолға жазу керек болсын, бұл жағдайда бірінші мән ол енгізілетін сандардың мөлшері болады. Жаңа  жолға көшу болмайтындықтан,Write() процедурасын қолданып, бастапқыда файлға  SanMolcheri айнымалысын мәнін жазамыз да, содан кейін параметрлі циклді пайдаланып енгізу процедурасында енгізілген сандарды жазамыз. Барлық мәліметтер файлға жазылып болған соң, файлды жазу керек. Ол Close() процедурасының көмегімен орындалады.

Close(Name Var) процедурасы—файлдың соңына, файл соңы белгісін жазып, оны жабады. Егер файл Close() процедурасымен жабылмаған болса, онда мәліметтер сақталынбайды.

Мәліметтерді файлға жазу процедурасы қандай болатынын қарастырып көрелік:

procedure exi;

var

FileOut:text;

begin

assing(FileOut,`mayFile.in`);

rewrite(FileOut);

write(FileOut, SanMolcheri);

for i=1 to SanMolcheri do

write(FileOut,San[i]);

close(FileOut);

end;

негізі программаның мәтіні өзгеріссіз қалады

begin

init;

work;

exi;

end.

Осы программаны ‘Misal_F1’ атымен дискіге жазып, оны орындауға жіберіңіз. Программа жұмысын аяқтағаннан кейін, BP редакторының көмегімен біздің программамыз құрған `mayFile.in` файлын ашып, оның мазмұнын көріңіз. Өкінішке орай сандар файлда бос орынсыз тіркесіп жазылған болып шығады. Мұндай жазбадан қандай сандар жазылғанын анықтау қиындық тудырады. Бұл жағдайды қалай түзетуге болады?

Ол үшін, сандары бір бірінен дәл ажыратудың екі мүмкіндігі бар:

а.әрбір мәнді бос орын (``)белгісі арқылы бөліп жазу

в.әрбір мәнді жаңа жолға жазу (баған бойынша).

Бірінші жағдайда енгізілетін айнымалы атауынан кейін бос орын (``) белгісін қоямыз.

write(FileOut, SanMolcheri,``);

for i:= to SanMolcheri do

write(FileOut,San[i],``);

екінші жағдай үшін, writeln() процедурасын қолданамыз:

writeln(FileOut,SanMolcheri);

for i=1 to SanMolcheri do

writeln(FileOut, San[i] );

Тапсырма

1.Енгізілетін мәліметтер `mayFile1.in` атауымен берілген файлға, бір жолға және бос орын арқылы жазылатындай етіп , Misal_F1 программасын өзгерту керек. Жаңа программаны Misal_F2 атымен сақтаңыз.

  1. Misal_F1 программасында берілген мәліметтер `mayFile2.in` файлына әрбір мәлімет жаңа жолдан жазылатындай етіп, өзгерту керек. Жаңа програманы Misal_F3 атымен сақтаңыз.

3.Пернетақтадан 20 жол мәтін енгізіп, оны шығу файлына жазатын, Misal_F4 атауымен сақталатын программа жазыңыз.

Файлдардың түрлері

Осыған дейін, біз мәліметтерді пернетақтадан негізіп, оларды экранға шығардық, программа жұмысы кезінде олар компьютердің оперативті жадында сақталатын да, есептеулер біткеннен кейін бұл мәліметтер жоғалып кетеьін. Жұмыс нәтижесін келешекте пайдалана алу үшін, мысалы, оларды есептеулерге пайдалану үшін немесе жңа мәліметтерді алу үшін, оларды есте сақтап қалу керек. Ондай тәсілдердің ьірі мынадай: нәтиже экранға шыққан соң қолға қаламсап (қарындаш) және бір бет қағаз алып, бұл мәліметтерді жазып алу. “Дербес компьютерлер” дәуірінің басында оларды “үй тапсырмасы” деп атаған да, шын мәнінде солай болған. Қазіргі кездегі дербес компьютерлердің барлығы ақпаратты сақтауға арналған арнайы құрылғылармен жабдықталған. Қызметтеріне қарай оларды: магниттік ақпарат тасымалдаушылар немесе жазылатын CD- дискілер деп атайды. Ақпаратты сақтау осы тасымалдаушыларда ұйымдастырылады, бұл жағдайда біз алған нәтижелерді солардың жадында сақтаймыз. Барлық мәліметтер осы тасымалдаушыларда файлдар түрінде сақталады.

Файл дегеніміз – мәліметтер сақтауға арналған сыртқы тасымалдаушыдағы жадының ат қойылған аймағы (бөлігі).

File (ағылшын тілінен аударылғанда) бума, іс қағаздар жинағы, сонымен қатар ақпаратты сақтау деген мағынаны білдіреді.

Borland Pascal-да файлдарды екі негізгі белгісі бойынша топтастыруға болады:

  1. файлдың типі бойынша (оның логикалық құрылымына )
  2. файл элементтеріне қатынау тәсілі бойынша

Типтері бойынша файлдар шартты тұрде үш түрге бөлінеді:

  • мәтіндік файл;
  • типтік файл;
  • типтік емес файл.

Біз көбінесе мәтіндік және типтік файлдармен жұмыс істейміз.

Қатынау тәсілі бойынша файлдар келесідей бөлінеді:

  • Тікелей қатынау файлдары
  • Кезекпен қатынау файлдары

Олардың айырмашылығы тікелей қатынау файлдарында арнайы

процедуралар  және функцияларды  пайдалана отырып, мәліметтерді, олардың файлдағы орнына тәуелсіз, оқуға немесе жазуға болады, ал кезекпен қатынау файлында оның ортасында немесе соңында тұрған мәліметті оқу үшін, оның алдындағы мәліметтердің барлығын оқуға тура келеді. Мәтіндік файлдар кезекпен қатынау файлдарына жатады, ал типтік файлдар тікелей қатынау файлдарыа жатады.

Айтыңыз құтты болсын

Ұлттың болмысын, тіршілік ету тәлімін, өмірге деген көзқарасын, рухани өресін, танымы мен нанымын жалпақ жұртқа жайып, өзін-өзі жұрағаттап танытатын әрі мәшһүр ететін халықтың ежелден келе жатқан ескі салт-дәстүрлері меп әдет-ғұрыптары, жөн-жоралғылары болса керек. Талай ұрпақтардың ұлан-ғайыр көшін ұзатып салып, тар жол, тайғақ кешуді замана зобалаңдарынан өткен өрісті тарихымыздың өнбойында өшпей, өскін жайып, халық тірлігінің өзегімен өріле жасасып келе жатқан бұл қасиетті қазыналарымыз өзінің өміршеңдігімен тәнті етеді. Өйткені мұніда бәріміздің бас иер киелеріміз, халықтың тілі, діні, ділі жатқанын көреміз. Халқымыздың бағы да, бары да, құты мен құдіреті де осыларда жатыр. Бұларсыз баянды болашақтың көкбайрағы көтеріле алмайды, емін-еркін тыныстап еңсесін тіктеу де қиынға түседі, танымы мен сеніміне сеніп, болашағына батыл бет бұрған рухани түлеуге де қолы жетпейді. Ұлттық дәстүрді сақтай білу — ұрпақтардың өз тағдырына аялай қарауы, қадірлеп қастерлеуі, иманды тірлігінің ұятына сенуі.

Әр халықтың пеншенесіне жазылған тағдыры болады.

Ұлттық келбетіміз жайлы ой қаузағанда, сол тағдырдың сан сүрлеулі соқпағына түскен халқымыздың қилы-қилы өмірі, заманалық эволюциясы көз алдымызға келеді. Оның түйінді тораптары, ілкімді арналары тереңдерге жетелеп, тарих қатпарларынан сыр сабақтағанда, халқымыздың даналығына, қайсарлығына, төзімділігіне, кеңпейілдігіне,     қарапайым-дылығына   қайран қалып, көңілге мақтаныш толады. Ал халық басына түскен зауалдар тақсіреті неше қилы өкініштер мен опыныстарға да бөлейді.

Осы тарихқа қарап тұрсақ, қазақ халқының көрмегені де, кешпегені де аз емес екен. Отаршылдықтың, империялық өктем саясаттың ноқтасынан басын көтере алмаған халықта не хал болушы еді? Бүгежек-тірлік белін жаздырмай, адымын аштырмады, рухани жағынан әбден тұралап, жүдеп-жадап, жарық дүниеге келгеннен қасаң қағида - жат уағыз миына тықпаланды, өткеннің бәрін жоққа шығару саясаты мәңгүрттікке алып келді, ақыр соңында танып-білгенімізден — ұмытқаымыз, тапқанымыздан жоғалтқанымыз көп болып шықты. Оны енді ғана ашық айтып жатырмыз. Қазіргі біздің кеудеміздегі қорқынышты жеңіп, еңсемізді  тіктеген серпілісіміз мәңгірген жанның есін жиған алакөбең әлпетін елестетеді. Егеменді ел болып етек-жеңімізді жиып, ертеңгі күнімізге алаңдай бастауымыз соның айғағы. Жадымыз бен қанымызда қалған ұлттық болмысымыз-оянып, санамызға сәуле шуағы тарап, салт-дәстүріміздің, әдет-ғұрыптарымыздың, тіліміздің, дініміздің жоғалтып алған өмірлік нышандарын жаңғыртып, жандандырып, қайта оянып жатқан жайымыз бар. Халықтық нәрсенің бәрі де жермен, елмен, халықпен бірге біте қайнасып, бірге жасайтынына, оны ешбір қатал қысым да, заң да, зорлық та өшіре алмайтынына көз жетіп, көңіл қаныққандай болады.

Ғасырлар бойы өмірдің өткелдерінен өтіп, қилы-қилы кезеңдерінде бір кұлап, бір тұрумеи келе жатса да,, бар өнеге-өсиетін, әдет-қасиетін, ғұрып пен рәміздерін сақтап қалуға ұмтылып баққан халқымыздың маңдайы енді жарқырады, бағы енді ашылды. Өмірге қайта орала бастаған ұлттық үрдістеріміз бен салт-дәстүрлеріміздің көбейе түскені соның айғағы.

Солардың    ішінде   халқымыз бен   қайта   қауышып  жатқан, өзінің болмысында халықтық сипаты мол, ізгілік пен мейірімділікке үндейтім, ел ішіне кең тараған салт- дәстүрлеріміздің бірі.— ораза тұту, айт, құрбан айт мерекелері.

Наурыз туралы түсінік

Наурыз — парсы сөзі. Бұл қазақша айтқанда, "жаңа күн" деген сөз. 22 наурыз күнін "Жаңа күн" деп атаудың мәнісі не? Оның мәнісі мынау: 21-нен 22-не қараған наурыз күні күн мен түн теңеледі. Сонан кейін күн ұзарып, жылы бола бастайды. Күн жылыға айналғаны — жазға айналғаны. Сондықтан 22 наурыз жаз айы болып табылады. Жаз болса, дүние жаңаланады: ағаш бүршік атып, жердегі шөптер қылтиып, малдар төлдейді. Жылдың төрт тоқсанының ішінде дүниені жасартып, жаңалайтын тоқсаны — жаз. Сол тоқсанның басы 22 март болғандықтан бұл күн "Наурыз'' яғни "жаңа күн" дел аталады.

Қазақ елі наурызды қалай қарсы алған?

Қызыр түні Жаңа жыл табалдырықтан аттап үйге енгенде, "жалғыз шала сәуле болмас" деп терге қос шырақ жағылып қойылады. "Жаңа жыл мұнтаздай таза үйге кірсе, ол үй ауру-сырқаудан, пәле-жаладан аман болады" деген сеніммен Наурызға дейін үй ішіндегі жиһаз мүліктің шаны қағылып, жуылып, тазартылады. "Береке басынан басталады" демекші, "жыл басы жақсы басталса, аяғы да жақсы болады". "Жыл бойы ақ мол, дән тасқын-тасқын, жауын-шашын көп болсын" деп Қызыр түні ыдыс атаулыны ырысқа (бидай , тары, арпа, сұлы, жүгері т. б.) аққа (сүт, айран, шұбат, уыз т. б.)  және кәусар бұлақ суына толтырады.

Халқымыздың мифологиялық түсінігі бойынша наурыздың 21-і түні даланы Қызыр аралайды екен. Сол себепті осы түн "Қызыр түні" деп аталады. Қызыр — адамдарга дәулет дарытып, бақ қондыратын, ақсақал кейпінде көзге көрінетін қиял-ғажайып бейне. Жақсылықтың жаршысы, жаңа түскен Күн нұрының символы — Қызыр аты даланы кезе жүріп, назары жерге түссе, оның тоң кеудесін жібіеді, ат тасқа түссе, тасты ерітіп жібереді екен.

Күн сәулесі жер шарының шығыс бөлігінен таңғы сағат 6-да себезгілеп атқан кезде біздің өңірімізде бұл сәт  түнгі  сағат 3-ке   тұспа-тұс   келеді,  сондықтан  да  қазақ  халқы   Жаңа  жылды  наурыздың  22-сі  күні  таңғы сағат 3-те қарсы алады.

Бұл түні ауыл бойжеткендері өздері ұнатқан жігіттерге арнап соғымның соқты етін уызға салып пісіріп. "ұйқыашар" деп аталатын ерекше дәм дайындайды. Ал жігіттер мен бозбалалар болса, қыздардың қолақысының қарымтасына айна, тарақ, иіссудан тұратын "селт еткізер", “дір еткізер” сыйлықтарын ұсынады. Бұл дәстүрлі сыйлықтағы айна — пәктік пен жастықтың, тарақ — әдемілік пен сұлулықтың, иіссу — бүршігін жаңа жарған жауқазындай құлпырып жайнай түсудің белгісі.

Наурыз күнінің бір ерекшелігі — бұл күн көрісуден басталады. Ұлыс күнінде сәлемдесудің қалыптаскан дәстүрі бар, кісілер бір-бірімен кездескеңде:

Өмір жасың ұзақ болсын!

Ұлыс бақты болсын!

Төрт түлік ақты болсын!

Ұлыс береке берсін!

Пәле-жала жерге енсін!—

„Ұлыстың ұлы күні — ұлыс күн”

Наурыз — өте көнеден келе жатқан мейрам. Күні бүгінге дейін жер шарындағы көптеген халықтардың дәстүрлі мейрамына айналып отырған бұл мерекенің қашаннан бері тойланып келе жатқанын дөп басып айту қиын.

Көшпелілердің байырғы астрономиялық түсінігі бойынша, әрбір жыл алты жаз ("йас") бен алты ай қысқа ("қыш")  бөлінген. Тіліміздегі „алты ай жаз бойы", „ала жаздай", „алты ай қыс бойы", „ала қыстай" секілді сөз оралымдарын осы бір түсініктің жаңғырығы десек болады. Жаз айларында дүние кеңіп, шаруадан мойып босап, жер бетін қуаныш, шаттық жайлайтындықтан — „жағымды", ал қыс айларында суық, аштық, жұт болатындықтан — „жағымсыз" саналған. Әуелгі адамдардың жақсылық пен жамандыққа жан бітіріп, оларды адам бейнесінде айтыстырып, күрестіргені туралы қызықты мәліметтер көне жазбаларда көптеп сақталған. Мәселен, біздің жыл санауымыздан бұрын дүниеге келген қасиетті „Авеста" кітабында, XI ғасырдағы түркі тілдерінің энциклопедиясы—„Диван лугат-ат-түрк" сөздігінде, сондай-ақ қазақ халқының қиял-ғажайып ертегілерінде осындай ұқсас сюжеттер қайталанып отырады. Соғдалықтар жақсылыққа „Ахуромазда", жамандыққа  „Ахирман" деп ат қойса, бұрынғы қазақтар жақсылықты „Кие", жамандықты „Кесір", қысты „Зымыстан", жазды „Табысқан" деп атаған.

Бүл күні — аспан денелері өздерінің „ең бастапқы нүктелеріне келіп, күн мен түн теңелетін, жан-жануарлар төлдеп, адамдардың аузы аққа тиетін, жер үстіне шаттық орнаған күн. Қазақ елі осы күнді „Ұлыстың ұлы күні — ұлыс күн" дсп атаған. Григориан календары бойынша ескіше 9 наурыз, жаңаша 21-нен 22-не қараған түн осы күнге сәйкес келеді. Наурыз сөзі иран тілінің ноу — „жаңа", руз — „күн"деген сөздерінен қалыптасып, жылдың бірінші күнін білдірген. Ал қазақ тілінде „наурыз" сөзі, біріншіден, жыл басында тойланатын думанды халықтық мейрам, екіншіден, наурыз айы, үшіншіден, ұлыс күні жасалатын көжеге қатысты айтылады.

Наурыз  мерекесін  тойлау  дәстүрі  дүние   жүзі  халықтарының көпшілігінің тұрмыс-салтында бағзы замандардан бері орын алған. Бұл мейрамды ежелгі гректер „Патрих", бирмалықтар „Су мейрамы", тәжіктер „Гүл гардон", „Бәйшешек", „Гүлнаурыз", хорезмдіктер „Наусарджи", татарлар „Нардуган", буряттар „Сагааи сара", соғдалықтар „Наусарыз", армяндар „Навасарди", чуваштар „Норис ояхе" деп түрліше атаған. Шығыс халықтарының Наурызды қалай тойлайтындығы жайындағы көне деректер бізге Әбу Райхан Бируни, Ибн Балхи, Омар һайям еңбектері арқылы   жетіп   отыр.

Француз революциясы кезіндегі коммунистік утопистік ағым және оның өкілдері

ХҮІІІ  ғасырда  Францияда  жеке  меншікті  сынайтын  және  коммунизм  принцпін  жақтайтын  ерекше  еңбектер  көп  шықты.  Алайда  олардың  барлығы  дерлік  түрлі  көзқарастағы  жекелеген  жазушылардың  тек  қоғамдық  принцпке  байланысты  ғана    шығармалары   болатын.  ХҮІІІ  ғасырдың  соңында  революция  дәуірінде    коммунизм  алғаш  рет  Бабефтің  айтуынша   саяси  күрестің  лозунгі  болды.

ХҮІІІ  ғасырда  Францияда  бірнеше  бағытта  қоғамдық  идеологиялық  көзқарастар  қалыптасқан  болатын.  Осылайша  осы  кезде  Францияда  ерекше  коммунистік  утопистік  ағымда  қалыптасады.   Бұл  ағым  Францияда  революциялық  дәуірге  дейін  де  жұмыс  атқарған  болатын,  алайда  дәл  революция  кезінде  ол  ерекше  дами  түседі  және  қоғамнан  қызығушылық  қолдауын  табады.  Жалпы  Францияның  революциялық  дәуірі  кезіндегі  коммунистік  утопистік  ағымның  даму  бағытын  анықтаудың  алдында  оның  ерекшелігі  мен  Франциядағы  алғашқы  қадамдарын  атап  көрсету  қажет.

Франциядағы  утопистік  коммунизмнің  ерекше  өкілі  Морелли  болып  табылады.   Морелли  Франциядағы  революциялық  кезендегі  утопистік  коммунизмнің  көрнекті  өкілі  болған  Бабефтің  оқытушысы  мен жол  сілтеушісі  болды.  Коммунизмдік  ой-пікірдің   дамуын  зерттеген  ғалымдар  үшін  Морелли – «Базилиада»   және  «Кодекс  природы»   еңбектерімен  қызықтырады.   «Базилиада»  -  ХҮІІІ  ғасырдағы  француздік  утопизмнің  ерекше   қызықты   романы  болып  табылады.  Мұнда  бір  фантастикалық   мемлекетте   дана  заң шығарушы  басшы   коммунистік   тәртіп  орнатуы  жөнінде  жазылған.  Ал    «Кодекс  природы  или  истинный  дух  ее  законов»  еңбегінде  коммунизм   принциптерінің  теориялық  негізін  жасаған  трактаті  болды.  Жалпы  Мореллимен Франциядағы  революциялық  кезеңде  белгілі  болған  бабувизм  ағымының  байланыстары  ешқандай  сынды  көтермейді.  Морелли  сонымен  қатар  тек    ХҮІІІ  ғасырдың  утопистік  коммунизімінің  жетекшісі  ретінде  ғана  емес  сонымен  қатар  бұл  ағымның  кейінгі  дәуірлердегі  ұстазы   дәрежесін  иемденді.  Морелли – утопистік  коммунизімнің  дамуындағы  сол  кезге  тән  болған  рационалистік  бағытының  иесі  болды. Морелли  прогрестің  теориясын  белсенді түрде  жақтайды,  оны  табиғаттың  заңдылығы  деп  тапты.  Мореллидің теориясына  жүгінсек  халықтар  өзінің  өмірінің  басында  қандай  қоғам  бәрінен  жақсырақ  болатынын  білмеді.  Олар  барлық  жаратылыс  жағдайының  игіліктерін  пайдаланды  және  оның  жетістікке  бет  бұратынына  мән  бермеді.  Тек  жүздеген  жыл  өткенен  соң  адамдардың  жасаған  заңдары,  басқарудың  түрлі  формалары,  олардың  игіліктің  неде  екенін  түсінуге  мүмнкіндік  береді.  Осылайша  адамзат  санасыз  коммунизмнен  болашақта  саналы  коммунизмге  өтеді  деп  түсінді. Болашақтың  коммунистік  қоғамы  дәл  «Кодекс  природы»  еңбегіндегідей  бірегей,  орталықтанған  шаруашылық  бүтінді  құрап  шаруашылық  жоспарменен  басқарылады,  қоғам  өз  мүшелерінің  қажеттіліктерін  анықтап,  жұмыстың  бөлінуін  бақылайды.  Мореллидің  көрсетуінше  табиғаттың  әрекетіне  байланысты  құрылымның  принципіне  үш  «киелі  заңдары»  жатады.  Біріншісі  жеке  меншіктің  жойылуы,  екінші  заңы  азаматқа  «тіршілік  етуге  құқы» және  «еңбек  құқын»   беру,  үшінші  заңы  екіншісін  толықтырады, азаматтардың  құқықтарының  орнығуына  байланысты  қоғамдық  еңбектегі  міндеттерін  анықтау  болып  табылады. Мореллидің  әлеуметтік  философиясы  және  оның  болашақ  қоғамның  экономикалық  ұйымдастырылуы  коммунизмнің  тарихтағы  сәтінде  белгілі  болады  және  сондықтан  оның  әрмен  дамуында  үлкен  ықпал  еткен  болатын.

Франциядағы  революциялық  кезеңге  дейінгі  утопистік  коммунизмнің  қалыптасуына  ықпал  жасаған  қарама-қайшы  тұлғалардың  бірі  Дидро  мен  Мабли  болып  табылады.  ХҮІІІ  ғасырдағы бір-бірінен  алыс  келетін қоғамдық  ойдың      өкілдері  болған   олар  «қоғамдық  тәртіпті»  ерекше  терең  және  кең  қарастыруға  тырысады,  сонымен  қатар  утопистік  коммунистік  ойларды  дамыта  түсті.

Коммунизмге  деген  үлкен  ықыласты,  кейде  тіптен  қоғамдағы  тәртіптілікті  әнұран  еткен,   ХҮІІІ  ғасырдағы  француздік  ағартушылықтың  үлкен  өкілі  болған – Дидродан  табамыз.  Міне  дәл  оысндай  сипатпен  коммунистік  идеаларды  қорғаған  және  өзінің  заманында  атақты  тарихшы,  үлкен  саяси  қызметкер,  аббат  Мабли  иемденді.

Дидроның  шығармаларының  ішінде  әлеуметтік  құрылыстың  мәселелері  қарастырылды,  әсіресе  қоғамдық  немесе  жалпылық   принциптеріне  үлкен  көнілділік  байқалды,  бұл  «Добовление  к  путешествиям  Бугенвиляда»  көрінді.  Бұл  шығармада  орталық   орында  таилықтардың  еуропалықтармен  таныспай  жатқанға  дейінгі  өмірі  мен  дәстүрлерін  көрсету  тұрды.  Бұл   ХҮІІІ  ғасырдың   ең  жарқын  утопиясы  болды,  көркем  очерк,  үгіттеу  мақсаттарын  қойған  және  мұны  Дидро  жасыруға тырыспады.

Маблидің  айтуынша  көп  ойшылдар   табиғи  тәртіптілік   адамдардың  бұл  жүйемен  танысуынан  кейін  ақ  орнайды деп  түсінеді,  алайда  бұл  жүйе  адамның  табиғатына  тән  келеді  сондықтан  оған  адамдар  ең  алдымен  ұмтылуы  қажет  деп  табады. (25)   Қоғам  таптарға  бөлінген, ал  таптар  қарама-қайшы  қызығушылықтарды  иемденеді.  Мұндай  қоғамдағы  тәртіп  ешқандайда  тапты  қанағаттандырмайды.  Коммунизмнің  мекемесін  құратын  материалдар  жоқтығында  атап  өтеді.  Мабли   таптардың   қызығушылықтарының   қарсылығын   айқындап  көрсетеді,  бұл  жалпы  революцияға  дейінгі  ең  жарқын   таптық  идеясының   айқындалуы  болып  табылады.

Буржуазиялық  радикализмнің  өзіндік  шегі  болды.  Өзінің  теориялық  құрылымындағы  батыл  ойлар  буржуазиялық  мәселерді  шешуде  шыға  алмады. 1789-1791  жылы  құрылған  көптеген  клубтардың  ішінде  әлеуметтік   мәселелерге  көңіл  аударған  Фоше  мен  Бонвиль  құрған  топ  болатын.  Бұл  клубтың  бағдарламасын  орта  дәрежелі  теңестіруші  болып  табылады,  алайда  оның  бірқатар  өкілердері   өзінің  баямандаларында  социалистік  ойларды  да  айқын  атайды. Фоше  адамның  табиғи  құқықтарының  бар  екенін  атап  өте  отырып,  барлығының  жер  алуға  құқы  бар  деп  тапты.  «Қоғамның  құқығы  жекеленген  адамдардың  құқықтарынан  жоғары  және  қоғам  өзінің  құқықтарын  орнату  қажет  және  осылайша  теңдікке  жетудің  мақсатын  қою  қажет.» (26) деген  ойларын  жеткізеді.

Францияның  революциялық  кезеңіндегі  утопистік  коммунизм  немесе  «теңдік   атындағы  қозғалыс»  деп  аталған  қоғамдық  ойдың  бағыты  ерекше  дамыды.  Бұл  қоғамдық  бағыттың  басында  Гракх  (Франсуа Ноэль)  Бабеф  және  оның  жақтаушылары  бабувистер  тұрды.  Бұл  қозғалыс  революцияның  барысында   ең  алғашқы  рет  қоғамдық  алаңда  коммунистік  тенденциямен  шыққан  болатын.

Термидордан   кейінгі   Францияның  әлеуметтік  қарама-қайшылықтары  жағдайында  бабувистер  «ең  жоғарғы  теңдік»  жағдайын  орнату  үшін  көтерілісті  ұйымдастырды,  нәтижесінде  жеке  меншіксіз  және  кедейліксіз  өмір  басталуы  керек  болатын. Қозғалыстың  ішіндегі  өкілдердің  бірінің  сатқындығынан  қозғалыс  түгелімен  тұтқындалды,  оның  екеуі  1797 жылы  жазаланып  өлтірілді.

Бабувистік  қозғалыс  жұмысшылардың  идеодлогиялық  өсуіне  әкелді.  Олар  жұмысшылардың   әлеуметтік  қажетіліктерін  айқындады  және  ұйымдасуға  жағдай  жасады.  Революцияның  кезінде  коммунистік  бағыт  жаңа  болған  жоқ.  Бабефтің  өзі  ревалюцияға  дейінде  коммунизмдік  бағытты  таңдаған  болатын.  1787  жылы  Аррасам  ғылым  Академиясының  президентіне  жіберген  хатында  Бабеф  коммунистік  тәртіптің  орнатылу  мүмнкідігі  мен  мақсатылығын  көрсетеді: «жалпы  қолдағы  біліммен  қазіргі  уақытта  халықтың  әлеуметтік  тәртіптілігі  арқылы  теңдікті  орнатып,  жерді  қоғамның  иеленетін  меншігі  етуде   жағдай  қандай  болар  еді» (26) деген  ойларын  алғаш  қалыптастыра  бастағанын  байқауғак  болдады.

1789  жылы  жарық  көрген  «Cadastre perpeturel»  еңбегіндегі  алғы  сөзде  Бабеф  қоғамдық  тәртіптің  орнатылуын  қайта  құру  идеясын  ұстанатынын  көрсетеді.  «Қоғамның басты  мақсаты  халықтың  бақыты.  Адамдар  әртүрлі  меншікті  иемденеді,  бұл  қоғамға  әртүрлі  көмектің  берілуі,  ал  қоғам  бұл  бүтін  отбасы  секілді  және  оның  мүшелері  оның  жемістерін  бірдей  үлесте  көруі  қажет.  Бұл  үлесті  теңестіру  үшін  барлығына  жерді  теңдей  етіп  бөлу қажет.» (27) деп  қоғамдық  теңдік  пен  тәртіптің  орнатылу  жолдарын  атайды.

1789  жылы  Бабеф  және  оның  коммунизмдік  ойлармен  жақтаушылары  аграрлық  реформаның  жобасын  үкіметке  ұсынады,  алайда  оның  мұндағы  ойларын  көпшілік  дұрыс  түсінбейді.

Бабувистер  құқықтардың  орнатылуы  үшін  күрестің  тарихи  процестен  көрсету  мақсатында  патрицилер  мен  плебейлердің  арасындағы   күресін  үздіксіз  жүргізілуін  алға  қояды.  «Бұл  байлар  мен  кедейлердің  күресі  ресми  түрде  жарияланғаннан  басталған  емес,  ол  мәңгілік  жүріп  жатыр,  бұл  біреулерден  алынған  байлықты  өзгелерге  беруші  институттардың  құрылуымен  пайда  болған» (28) деп  Бабеф  айқындай  түседі.

Тарихи  концепцияға  сүйене  отырып   Бабеф  Француз  революциясын  патрицилер  мен  плебейлердің  күресінің  бір  эпизоды   ғана. «Мен  жүиелері  және  қоғамды  басқарудың  жоспары  жағынан  қарама-қайшы  екі  партияны  ерекшелеймін,  Олар  екеуіде  республикалық  құрылысты  қалайды,  Біріншісі  буржуазиялық  немесе  аристократиялық  мемлекетті  қаласа,  екіншісі  халықтық  және  демократиялық  мемлекетті  қалайды» (29)  деп  көрсетеді.

Бабувистердің  теңестіруші  коммунизмі  коммунистік  құрылысты  аграрлық  және қолөнерлік  қоғамда  көрсетуге  тырысқан  болатын,  мұнда  барлығына  бірдей  және  қарапайым  табысты  ұсынады  индустрияландыру  және  пролитарлықтың  дамуына  дейінгі  қоғамды  идеалдандырады.

Утопиялық  коммунизм  идеясы   революцияның  алдыңғы  уақытындада  белгілі  болған.  Алайда  тек  «теңескендер  қозғалысында»   ғана  саяси  қозғалыстың  туына  айналды,  өзінің  мақсаты  ретінде  революция  арқылы  коммунистік  құрылысты  орнату  болатын.  Бұл  оның  ерекшелігі  бабувистердің  идеяларының  белгілерін  айқындады.

Бабувистердің  теориялық  коммунизмдік  идеалдар  жоспары  бойынша  ол  ағартушылық  түсініктен  пайда  болды.  Ол  жаратылыстық  құқықтық   және  қоғамдық  сипатты  анықтауда  рационалистік  жүйеге  негізделді.  Алайда  революцияның  кезіндегі  бабувистердің  толық  теңестіруге  жету  арқылы  идеалды  қоғам  құру  мақсаты  ревалюциялық  күрестің  тәжірбиесі  мәселесіне  айналды  және  бірқатар  идеялардың  пайда  болуына  әкеді,  бұл  тарихи  процесті  анықтауда  да  байқалды.  Жаңа  коммунистік  революцияның  болуына  қажетілік  бабувистерде  тарихтың  барлығын  қайта  қарудың  қажетілігін  туғызды.  Ең  алдымен  бабувистер  тарихты  әділетілікті  орнататын  күрес  тұрғысынан  қарауды  алға  қояды.

Бабефтің  көзқарасында  орталық  орынды   меншіктік  теңсіздіктің  пайда  болуына  меншік  институттарының  дамуы  септігін  тигізеді  деген  түсінік  қалыптасқан.  Жаратылыстық  құқықтардың  теориясына  жүгіне  отырып  ол  жеке  меншік  бұл  құқықтарға  енгізбейді.  Осылайша  жеке  меншік – бұл  біреулердің  білімсіздігін  екіншілердің  пайдалануынан  және  қанауынан  пайда  болған  тарихи  орнығуды  атайды. Осылайша  бабувистер  қоғамдық  жоспардағы    тарихты – табиғи   тәртіппен  дамыған  емес  деп  көрсетеді.

Алайда  бабувистер  ХVІІІ  ғасырда  кең  тараған  ой  пікірлерге  өзіндік  үлесінде  қосты,  табиғи  тәртіп  үшін  үздіксіз  және  қанушылық  күрестің  нәтижесінде  орнатылады.  Жоғарыда  аталғандай  олар  тарихтан  билеушілер  мен  бағынушылардың  арасындағы  таптық  күресті  көреді  «жеке  меншікпен апаттар,  жеңілістер  меншіксіздердің  бұһарасын  шыдамсыздыққа  әкеледі,  міне  осында  қаналушылардың  қанаушыларға  қарсы  шыққан  көтерілісі  басталады.» (30) - бұл  тарихи  тізбекте  болатын  жағдай  деп  көрсетеді.

Бабувизм  құлатылған  соң  коммунистік  ой  реакцияның  салтанатынан  шегініс  табады,  ол  Буонордотидің  кітабындағы  Бабефке  қарсы  құпия  қастандық  жөнінде  жазуымен  және   құпия  қоғамдастықтарды  атаған  кезінде  қайта  бас  көтерген  болатын.  Коммунизм  ХҮІІІ  ғасырдың  дәстүріне,  Мореллиге  және   Бабев  дәстүріне  байланысты  жасалып,  кең  және  терең  тамырын  жайған  болатын.

Сонымен  бөлімді  қорытындылай  келетін  болсақ  ХVІІІ  ғасырда  Францияда  ағартушылық  бағыт  дамыған  болатын,  оның  кең  тармақтарды  көрсетуі  де  байқалды.  Жалпы  осы  кезде  қоғамдық  ой  пікірлердің  түрлі  бағыттарды  ұстана  отырып  бірегей  ағартушылық  сипатынан  шыққаны  белгілі.  Міне  осы  кезде  утопистік  коммунизм  бағытының   да  кең  отарлу  дәуірі  болды.  Жалпы  ғасыр  бойында  Францияда  бірқатар  ғалымдар  мен  саяси  қайраткерлер  утопистік  коммунизммен  қызыққан  болатын.  Алайда  утопистік  коммунизмнің  белестерінде  жарқын  көрінген  Марелли  мен  Бабеф  болып  табылады.  ХVІІІ  ғасырдадың  утопистік  коммунизмінің  рационалдық  сиапатын  жасаған  Морелли  болатын.  Ал  Бабеф  Ұлы  Француз  революциясы  кезіндегі  утопистік  коммунизмнің  өкілі  және  өкілі  ғана  емес,  сонымен  қатар   оның  ерекше   идеялар  арқылы  бағытын  қалаушы.  Коммунизмге  жетудің  амалдары  мен  қоғамдағы  теңсіздік  себептерін  анықтауда  Бабеф  пен  оның  жақтаушылары  тарихи  процесті  табиғи  тәртіппен  дамымаған  және  оның  дамуына  меншіктік  институттар  әсер  еткен  деп  көрсетеді.