Dyskusja: Programowanie C
Podgląd pojedynczego posta
Stary 06.06.2009, 17:22   #26
andy
logged out
CDRinfo VIP
 
Avatar użytkownika andy
 
Data rejestracji: 12.07.2003
Lokalizacja: /home
Posty: 12,518
andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>
Zadanie z C++.

Tresc: Program tworzy losowo stringa i sprawdza czy z tych literek można stworzyć słowo w słowniku.

Kod:

Kod:
#include <iostream>
#include <fstream>
#include <time.h>
#include <string>

using namespace std;

int main()
{
    string napis_los;
    int x;
    bool ok;
    string napis;
    int t_napis[24];
    int t_napis_los[24];
    srand(time(0));
    /* 
        Czyszczenie tablic w ktorych przechowuje 
        ilosc kazdej literki
    */
    for(int i=0;i<24;i++){
        t_napis[i] = 0;
        t_napis_los[i] = 0;
    }
    /* 
        Czyszczenie tablic w ktorych przechowuje 
        ilosc kazdej literki
    */
    
    /* Generowanie stringa */
    for(int i=0;i<6;i++){
        x = rand() % 25 + 97;
        napis_los += (char)x;
    }
    /* Generowanie stringa */
    
    /* Zliczanie znakow ze strina wylosowanego */
    for(int j=0;j<napis_los.length();j++){
                switch(napis_los[j]){
                    case 'a': 
                        t_napis_los[0] += 1;
                        break;
                    case 'b': 
                        t_napis_los[1] += 1;
                        break;
                    case 'c': 
                        t_napis_los[2] += 1;
                        break;
                    case 'd': 
                        t_napis_los[3] += 1;
                        break;
                    case 'e': 
                        t_napis_los[4] += 1;
                        break;
                    case 'f': 
                        t_napis_los[5] += 1;
                        break;
                    case 'g': 
                        t_napis_los[6] += 1;
                        break;
                    case 'h': 
                        t_napis_los[7] += 1;
                        break;
                    case 'i': 
                        t_napis_los[8] += 1;
                        break;
                    case 'j': 
                        t_napis_los[9] += 1;
                        break;
                    case 'k': 
                        t_napis_los[10] += 1;
                        break;
                    case 'l': 
                        t_napis_los[11] += 1;
                        break;
                    case 'm': 
                        t_napis_los[12] += 1;
                        break;
                    case 'n': 
                        t_napis_los[13] += 1;
                        break;
                    case 'o': 
                        t_napis_los[14] += 1;
                        break;
                    case 'p': 
                        t_napis_los[15] += 1;
                        break;
                    case 'r': 
                        t_napis_los[16] += 1;
                        break;
                    case 's': 
                        t_napis_los[17] += 1;
                        break;
                    case 't': 
                        t_napis_los[18] += 1;
                        break;
                    case 'u': 
                        t_napis_los[19] += 1;
                        break;
                    case 'w': 
                        t_napis_los[20] += 1;
                        break;
                    case 'x': 
                        t_napis_los[21] += 1;
                        break;
                    case 'y': 
                        t_napis_los[22] += 1;
                        break;
                    case 'z': 
                        t_napis_los[23] += 1;
                        break;
            }
        }
    /* Zliczanie znakow ze strina wylosowanego */
    
    cout << "Napis wylosowany: " << napis_los << "\nRozmiar: " << napis_los.length() << endl;
    cout << "Wystepowanie: ";
    for(int i=0;i<24;i++) cout << t_napis_los[i] << " ";
    cout << endl;
    cout << "*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*" <<  endl;
    
    /* 
        Skojarzenie pliku slownika otwarcie i dla kazdego 
        wyrazu robi sie zliczanie wystepowania znakow i
        potem nastepuje porownanie i jesli mozna zlozyc to wyswietlaj
        chyba coś tutaj jest ****ane :( 
    */
    fstream plik("slownik.txt", fstream::out | fstream::in);
    while(!plik.eof()){
        getline(plik, napis);
        if(napis.length() <= napis_los.length()){
                for(int j=0;j<napis.length();j++){ // Wiem, ze lepiej uzyc while ale tak mi kur.. wygodniej
                switch(napis[j]){
                    case 'a': 
                        t_napis[0] += 1;
                        break;
                    case 'b': 
                        t_napis[1] += 1;
                        break;
                    case 'c': 
                        t_napis[2] += 1;
                        break;
                    case 'd': 
                        t_napis[3] += 1;
                        break;
                    case 'e': 
                        t_napis[4] += 1;
                        break;
                    case 'f': 
                        t_napis[5] += 1;
                        break;
                    case 'g': 
                        t_napis[6] += 1;
                        break;
                    case 'h': 
                        t_napis[7] += 1;
                        break;
                    case 'i': 
                        t_napis[8] += 1;
                        break;
                    case 'j': 
                        t_napis[9] += 1;
                        break;
                    case 'k': 
                        t_napis[10] += 1;
                        break;
                    case 'l': 
                        t_napis[11] += 1;
                        break;
                    case 'm': 
                        t_napis[12] += 1;
                        break;
                    case 'n': 
                        t_napis[13] += 1;
                        break;
                    case 'o': 
                        t_napis[14] += 1;
                        break;
                    case 'p': 
                        t_napis[15] += 1;
                        break;
                    case 'r': 
                        t_napis[16] += 1;
                        break;
                    case 's': 
                        t_napis[17] += 1;
                        break;
                    case 't': 
                        t_napis[18] += 1;
                        break;
                    case 'u': 
                        t_napis[19] += 1;
                        break;
                    case 'w': 
                        t_napis[20] += 1;
                        break;
                    case 'x': 
                        t_napis[21] += 1;
                        break;
                    case 'y': 
                        t_napis[22] += 1;
                        break;
                    case 'z': 
                        t_napis[23] += 1;
                        break;
            }
        }
        ok = false;
        /* 
            Tutaj powinno sprawdzac czy dany napis ze slownika
            zawiera w sobie wylosowany napis
        */
        for(int y=0;y<24;y++){
            if(t_napis_los[y] <= t_napis[y]) ok = true;
            else{
                ok = false;
                break;
            }
        }
        /* 
            Tutaj powinno sprawdzac czy dany napis ze slownika
            zawiera w sobie wylosowany napis
        */
        
        if(ok == true) cout << napis << endl;
        for(int i=0;i<24;i++) t_napis[i] = 0;
    }
    }    
    /*    
        Skojarzenie pliku slownika otwarcie i dla kazdego 
        wyrazu robi sie zliczanie wystepowania znakow i
        potem nastepuje porownanie i jesli mozna zlozyc to wyswietlaj
        chyba coś tutaj jest ****ane :( 
    */
        
    cin.get();     
    return 0;
}
W załączniku jest słownik wyrazów.

Coś nie za bardzo on mi działa jednak nie potrafię się dopatrzeć luki. Najprawdopodobniej coś w warunkach jest ******e :/



Wiem, wiem wiem dzisiaj sobota...
Dołączone pliki
File Type: zip slownik.zip (256.2 KB, 25 oglądane)
__________________
XMPP: andrzej(at)czerniak.info.pl
andy jest offline   Odpowiedz cytując ten post