Маруш йорданов денчев



Дата03.01.2017
Размер33 Kb.
#11590
КУРСОВА РАБОТА № 1


ПРОГРАМИРАНЕ И ИЗПОЛЗВАНЕ НА КОМПЮТРИ


МАРУШ ЙОРДАНОВ ДЕНЧЕВ

Факултет: ФЕТТ

Група: 24

Факултетен номер: 1012060260



Задание: Да се напише програма на С, за откриване на буквите в зададена дума. Да се използва символен низ, като първоначално низа се инициализира със символа „*”. Когато бъде отгатната буква, тя се поставя на мястото на съответните „*”.

Програмата да е оргранизирана с меню и да се реализира ( чрез функции ):

  • Отгатване на дума

  • Задаване на нова дума и брой възможни грешни отговори ( запис на списъка с думи във файл )

  • Думите да се избират произволно от зададен файл


Използвани библиотеки:

    1. stdio.h – основна библиотека в C за вход/изход

    2. stdlib.h – необходима за rand() функцията

    3. string.h – форматиране на стринг

    4. time.h – необходима за инициализиране на текущото време



Използвани константи:

  1. maxrows – брой редове

  2. maxcols максимален брой символи на дума


Описание на собствените функции:
file_open_error
Описание: Изкарва на екрана общо съобщение за грешка при опит за отваряне на файл.

Параметри: -
guess_a_word

Описание: Основна функция. Работата на фунцкията е да извлече случайна дума от масива words. Това се постига чрез вградената в C функция rand(). Показване на потребителя * вместо буквите на думата. Преглежда се целия низ на думата буква по буква и се сравнява дали въведената от потребителя буква вече е използвана – реализира се чрез масив „pos”, в които всяка позната буква се записва с позицията си, проверява се дали въведената буква е вярна и ако не – показване пак на *. Излиза се от фунцкията в момента, в който потребителя познае цялата дума.

Параметри: char words[максимално количество редове][максимално количество колони], int count
read_words

Описание: Четене на думите от файл-а “words.txt”

Параметри: char words[максимално количество редове][максимално количество колони], int *count – обръщане към адреса на променливата
write_a_word

Описание: Записване на въведена от потребителя дума в края на “words.txt”. Записване на броя възможни отговори към тази дума.

Параметри: -

#include

#include

#include

#include
#define maxrow 10

#define maxcol 100


extern void read_words( char words[maxrow][maxcol], int *count );

extern void write_a_word();

extern void file_open_error();

extern void guess_a_word( char words[maxrow][maxcol], int count );


int main()

{

int menu, count, random, i, b = 0, stoinost = 0,letters = 0;



char words[maxrow][maxcol], word[maxrow], letter;

static int pos[maxrow];

do

{

// Menu



printf( "\n\n1.Zaredi dumi\n2.Pusni igrata\n3.Napishi novi dumi\n4.Izlez\n\nTvoqt izbor: " );

scanf( "%d", &menu);

if( menu == 1 )

{

read_words( words, &count );



printf( "Bqha zaredi %d dumi", count );

} else if( menu == 2 )

{

guess_a_word( words, count );



} else if( menu == 3 )

{

write_a_word();



} else if( menu == 4 )

{

break;



}

} while(1);

return 0;

}
void guess_a_word( char words[maxrow][maxcol], int count )

{

int random, i, b = 0, stoinost = 0,letters = 0;



char word[maxrow], letter;

static int pos[maxrow];

// Prarvim sluchaino chislo v intervala ot nula do broq na dumite

srand ( time( NULL ) );

random = rand()%count;

// Blagodarenie na sluchainoto chislo vzemame sluchaina duma ot masiva s dumi

strcpy( word, words[random] );

// Pokazvame zvezdichki na mqstoto na vsqka bukva

for( i = 0; i < strlen( word ); i++ )

printf( "*" );

// Nulirane

letters = 0;

// Preborqvane broq na znacite na dumata

for( i = 0; i < strlen( word ); i++ ) {

if( ( ( word[i] >= 'a' ) && ( word[i] <= 'z' ) ) ){

letters++;

}

}

// Nulirane na rabotnite promenlivi



stoinost = 0;

b = 0;


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

pos[i] = 0;

do {

// Prost razgranichitel



printf("\t");

// Potrebitelq vavejda bukva

scanf( "%c", &letter );

// Broene na otgorite na potrebitelq

b++;

// Cikalene prez dumata



for( i = 0; i < strlen( word ); i++ ) {

// Podsigurqvame se che nqma da chetem prazni znaci

if( !( ( letter >= 'a' ) && ( letter <= 'z' ) ) ){

break;


}

// Ako potrebitelq e poznal bukvata - otbeleji tova

if( word[i] == letter ){

pos[i] = 1;

stoinost++;

}

// Pri poznata bukva - pokaji q



if( word[i] == letter ){

printf( "%c", letter );

// Ako veche ima poznati bukvi

} else if( pos[i] ){

printf( "%c", word[i] );

// Pokaji pak * ako nishto ot gornite ne otgovarq

} else printf("*");

}
} while( stoinost != letters );

printf( "\n\n" );

printf( "Poznahte dumata '%s' s %d opita", word, b/2 );

}
void file_open_error()

{

printf( "Ima problem s otvareneto na faila. Molq proverete dali fails s ime words.txt se namira w directoriata na programata" );



}
void write_a_word()

{

char word[maxrow];



int b;

printf( "Molq vavedete jelanata ot vas duma koqto iskate da zapisha: " );

scanf( "%s", &word );

printf( "\n" );

printf( "Zapishete broq na greshnite otgovori: " );

scanf( "%d", &b );

printf( "\n" );

FILE *fp;

if( ( fp = fopen( "words.txt", "a+" ) ) == NULL )

file_open_error();

else {

fprintf( fp, "%s|%d\n", word, b );



}

fclose( fp );

}
void read_words( char words[maxrow][maxcol], int *count )

{

int i = 0;



// File pointer

FILE *fp;

if( ( fp = fopen( "words.txt", "rt" ) ) == NULL ) {

file_open_error();

} else {

do {


fscanf( fp, "%s", words[i] );

if( feof( fp ) )

break;

i++;


} while(1);

*count = i;



}

fclose( fp );



}


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница