![]() |
Autor artykułu: mgr Jerzy Wałaszek, wersja1.0 |
©2013 mgr
Jerzy Wałaszek
|
Został dodatkowo przekonwertowany na duże litery w systemie Latin II, który używa konsola Windows do wyświetlania polskich znaków. Fragment tego pliku wygląda następująco:
PRZYMIOTNIK
AARON
ABADDON
ABAŻUREK
ABAŻUR
LICZYDŁO
ABAKUS
ABAK
ABAKUS
BIOT
ABANDON
PORZUCENIE
OPUSZCZENIE
OPACTWO
OPACTWO
Napiszemy teraz program, który odczyta zawartość pliku data.txt i umieści ją w dynamicznej tablicy łańcuchów znakowych. Musimy tutaj rozwiązać kilka problemów:
Nie znamy liczby wyrazów w pliku. Lepiej nie zakładać jakiejś określonej wartości, ponieważ dane mają to do siebie, że lubią się zmieniać. A nóż będziemy chcieli coś dodać lub usunąć. Zatem program powinien podjąć taką strategię
Utwórz nowy projekt konsoli i skopiuj do niego pliki:
| newconio.cpp | - | plik źródłowy biblioteki |
| newconio.h | - | plik nagłówkowy dla biblioteki |
Dodaj te pliki do projektu (Project → Add files...).
// Odczyt pliku tekstowego do tablicy dynamicznej
//-----------------------------------------------
#include <iostream>
#include <fstream>
#include <cstring>
#include "newconio.h"
using namespace std;
// Klasa łańcuchów tekstowych
//-----------------------------
class Tstring
{
private:
char **c; // wskaźnik do tablicy wskaźników
int n; // rozmiar tablicy
int last; // numer ostatniego wpisu
public:
Tstring(); // konstruktor
~Tstring(); // destruktor
void print(); // wyświetla zawartość tablicy
};
// Konstruktor
//------------
Tstring::Tstring()
{
char buf[1000];
int i;
ifstream infile("data.txt");
last = n = 0;
c = NULL;
for(i = 0; infile.good(); i++)
{
infile >> buf;
if(buf[0])
{
if(last == n)
{
char ** t = new char * [n + 100];
for(int j = 0; j < n; j++) t[j] = c[j];
delete [] c;
c = t;
n += 100;
}
c[last] = new char [strlen(buf) + 1];
strcpy(c[last++],buf);
}
buf[0] = 0;
}
infile.close();
}
// Wyświetla testowo zawartość tablicy
//------------------------------------
void Tstring::print()
{
int i;
for(i = 0; i < last; i++) cout << c[i] << endl;
}
// Destruktor
//-----------
Tstring::~Tstring()
{
int i;
for(i = 0; i < last; i++) delete [] c[i];
delete [] c;
}
int main()
{
_cinit();
textcolor(LIGHTGREEN);
clrscr();
Tstring V; // Słownik
V.print(); // Test zawartości
textcolor(WHITE);
cout << endl << "Koniec danych..." << endl;
textcolor(7);
return 0;
}
|
W dalszej części zajęć napiszemy prostą grę logiczną w odgadywanie wyrazów. Gra będzie przebiegała wg następujących reguł:
TELEFON
ŻYLETKA
*ELE***Program pierwszy odpowiednio rozbudowujemy, dodając do obiektu Tstring nowe funkcje składowe, które obsługują przebieg gry.
// Zgadywanka
//-----------
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include "newconio.h"
using namespace std;
// Klasa łańcuchów tekstowych
//-----------------------------
class Tstring
{
private:
char **c; // wskaźnik do tablicy wskaźników
int n; // rozmiar tablicy
int last; // numer ostatniego wpisu
public:
Tstring(); // konstruktor
~Tstring(); // destruktor
void print(); // wyświetla zawartość tablicy
void play(); // rozgrywka
};
// Konstruktor
//------------
Tstring::Tstring()
{
char buf[1000];
int i;
ifstream infile("data.txt");
last = n = 0;
c = NULL;
for(i = 0; infile.good(); i++)
{
infile >> buf;
if(buf[0])
{
if(last == n)
{
char ** t = new char * [n + 100];
for(int j = 0; j < n; j++) t[j] = c[j];
delete [] c;
c = t;
n += 100;
}
c[last] = new char [strlen(buf) + 1];
strcpy(c[last++],buf);
}
buf[0] = 0;
}
infile.close();
}
// Wyświetla testowo zawartość tablicy
//------------------------------------
void Tstring::print()
{
int i;
for(i = 0; i < last; i++) cout << c[i] << endl;
}
// Rozgrywka
//----------
void Tstring::play()
{
char hword[100], uword[100], sword[100];
int i,j,k,hlen,ulen;
srand(time(NULL)); // Inicjujemy generator pseudolosowy
memset(hword,0,100); // Zerujemy bufor
strcpy(hword,c[(rand() + (rand() << 15)) % last]); // Losujemy słowo
hlen = strlen(hword); // Obliczamy długość słowa
clrscr();
ulen = uword[0] = 0;
for(i = 1; i <= 7; i++)
{
textcolor(LIGHTGREEN);
cout << "RUNDA NR ";
textcolor(YELLOW);
cout << i << endl;
for(j = 0; j < hlen; j++) sword[j] = '*';
sword[j] = 0;
for(j = 0; j < ulen; j++)
if(uword[j] == hword[j])
for(k = 0; k < hlen; k++)
if(hword[k] == uword[j]) sword[k] = uword[j];
textcolor(WHITE);
cout << sword << endl;
cin >> uword;
cout << endl;
ulen = strlen(uword);
if(!strcmp(hword,uword))
{
textcolor(CYAN);
cout << "*** GRATULACJE ***" << endl;
break;
}
if(i == 7)
{
textcolor(LIGHTRED);
cout << _pl("*** Przegrałeś - nie odgadłeś hasła ***") << endl << endl;
textcolor(YELLOW);
cout << hword << endl << endl;
}
}
textcolor(7);
}
// Destruktor
//-----------
Tstring::~Tstring()
{
int i;
for(i = 0; i < last; i++) delete [] c[i];
delete [] c;
}
int main()
{
_cinit();
Tstring V; // Słownik
V.play(); // Gra
return 0;
}
|
![]() | I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe