Forum CDRinfo.pl

Forum CDRinfo.pl (https://forum.cdrinfo.pl/)
-   Komputery - oprogramowanie i sprzęt (https://forum.cdrinfo.pl/f113/)
-   -   Programowanie C (https://forum.cdrinfo.pl/f113/programowanie-c-80361/)

andy 06.06.2009 21:05

Już sobie poradziłem ;)
Tutaj poprawiony kod.

andy 06.06.2009 17:22

Ilość załączników: 1
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...

Patrix 31.10.2008 13:56

Cytat:

Napisany przez andy (Post 976249)
[OT]Ze swojej strony polecam Thinking in C++[/OT]

[ot]
Mam dwa tomy tej cegiełki, czeka na swoją kolej :)

andy 31.10.2008 11:38

[OT]Ze swojej strony polecam Thinking in C++[/OT]

IceManSpy 31.10.2008 11:04

Cytat:

Napisany przez gallus (Post 976158)
J...
Zabieram się za naukę tego języka więc chciałbym dowiedzieć się jaka książkę na jego temat warto kupić i przeczytać, wielu ludzi poleca niby Symfonie C++...


Kupiłem tą symfonie i jeżeli nie miałeś nigdy styku z C++ lub bardzo mały to wydaje mi sie, że książka jest właśnie dla takiej osoby napisana. Sam nigdy nie miałem styku z C++ ale ze wzg, że na studiach go mam to uczę sie z tej książki i bardzo przyjemnie się ją czyta.

Piterniel 31.10.2008 10:34

To usuń :P
Licencja GNU :D

Patrix 31.10.2008 02:03

hehe rozumiem pomys***322; :D:D
dzia***322;a - nie podszed***322;bym do tego w ten spos***243;b

Chyba jednak linijka:

if(znak == 60)
znak=fgetc(plik);

jest zb***281;dna :)

Piterniel 31.10.2008 01:33

Kod:

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int main() {
  FILE * plik;
  plik = fopen("abc.txt","rt");
  if(plik != NULL) {
    int znak;

       
       
    while((znak=fgetc(plik)) != EOF)
{
        if(znak == 60 && fgetc(plik) == 112 && fgetc(plik) == 62)
        {
        znak = 0;
        while(znak != 60)
        {       
        if(znak == 60)
        znak=fgetc(plik);
        putchar(znak);
        znak = fgetc(plik);       
        }       
        printf(" ");

        }
       
}

    fclose(plik);
}

  else printf("Blad otwarcia pliku");
  getchar();

return EXIT_SUCCESS;
}

Masz i nie psiocz ;P

Patrix 31.10.2008 01:20

Cytat:

Napisany przez Piterniel (Post 976188)
Nikt nie mówił o dodatkowych znacznikach :P
Działa tylko dla przykładu pierwotnego pliku abc.txt ;-)

tak ?
przeczytaj post numer 3 :taktak:

Piterniel 31.10.2008 01:18

Nikt nie mówił o dodatkowych znacznikach :P
Działa tylko dla przykładu pierwotnego pliku abc.txt ;-)

Patrix 31.10.2008 01:16

Cytat:

Napisany przez Piterniel (Post 976183)
Tak na szybko, zap***281;tla si***281; gdzie***347;, ale nie wiem gdzie ;D

Jeste***347; mistrzem :rotfl: Ale to dzia***322;a tylko do tego jednego przypadku...

Odpal program dla takiej zawartosci pliku:

Cytat:

<p>tekst tekst tekst</p>smieci smieci smieci smieci smieci smieci <a href=> </a>smieci smieci smieci smieci <img src=>smieci smieci <p>tekst tekst tekst</p>smieci smieci smieci smieci smieci smieci <a href=> </a>smieci smieci smieci smieci <img src=>smieci smieci <p>tekst tekst tekst</p>smieci smieci smieci smieci smieci smieci <a href=> </a>smieci smieci smieci smieci <img src=>smieci smieci <p>tekst tekst tekst</p>smieci smieci smieci smieci smieci smieci <a href=> </a>smieci smieci smieci smieci <img src=>smieci smieci <p>tekst tekst tekst</p>smieci smieci smieci smieci smieci smieci <a href=> </a>smieci smieci smieci smieci <img src=>smieci smieci <p>tekst tekst tekst</p>smieci smieci smieci smieci smieci smieci <a href=> </a>smieci smieci smieci smieci <img src=>smieci smieci <p>tekst tekst tekst</p>smieci smieci smieci smieci smieci smieci <a href=> </a>smieci smieci smieci smieci <img src=>smieci smieci <p>tekst tekst tekst</p>smieci smieci smieci smieci smieci smieci <a href=> </a>
Wynik operacji powstaje taki:
Cytat:

tekst tekst teksthref=> g src=>smieci smieci tekst tekst teksthref=> g src=>smieci smieci tekst tekst teksthref=> g src=>smieci smieci tekst tekst teksthref=> g src=>smieci smieci tekst tekst teksthref=> g src=>smieci smieci tekst tekst teksthref=> g src=>smieci smieci tekst tekst teksthref=> g src=>smieci smieci teksttekst teksthref=>
Jak wida***263; sieka || A mia***322; wy***347;wietla***263; tylko zawarto***347;***263; znacznik***243;w <p> :)

Piterniel 31.10.2008 00:59

Kod:

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int main() {
  FILE * plik;
  plik = fopen("abc.txt","rt");
  if(plik != NULL) {
    int znak;

       
       
    while((znak=fgetc(plik)) != EOF)
{
        if(znak == 60)
        {
                znak=fgetc(plik);
                if(znak == 47)
                {
                        while(fgetc(plik) != 60)
                                ;
                        fgetc(plik);
                        fgetc(plik);
                        znak=fgetc(plik);
                       
                }
                else
                {
                fgetc(plik);
                znak=fgetc(plik);
                }
        }
        putchar(znak);
}

    fclose(plik);
}

  else printf("Blad otwarcia pliku");
  getchar();

return EXIT_SUCCESS;
}

Tak na szybko, zapętla się gdzieś, ale nie wiem gdzie ;D

Patrix 30.10.2008 23:56

Cytat:

Napisany przez gallus (Post 976158)
Jako, ***380;e trafi***322; si***281; aktualnie taki temat to mam pytanie do koleg***243;w znaj***261;cych si***281; na c++...

Ludzie czytajcie ze zrozumieniem, gallus - sio mi z tego topiku, on jest o C a nie C++ !!!!!!!!
Reported.

gallus 30.10.2008 23:54

Jako, ***380;e trafi***322; si***281; aktualnie taki temat to mam pytanie do koleg***243;w znaj***261;cych si***281; na c++...
Zabieram si***281; za nauk***281; tego j***281;zyka wi***281;c chcia***322;bym dowiedzie***263; si***281; jaka ksi***261;***380;k***281; na jego temat warto kupi***263; i przeczyta***263;, wielu ludzi poleca niby Symfonie C++, cho***263; mo***380;e pojawi***322;o si***281; ju***380; co***347; innego wartego uwagi...? Ewentualnie je***380;eli kto***347; zna jakie***347; dobre strony itp. na temat tego j***281;zyka to prosi***322;bym o adresy... :)
PS Mam kilka book***243;w w pdf-ie ale jako***347; ci***281;***380;ko zabra***263; mi si***281; za czytanie na kompie :/
Dzi***281;ki za wskaz***243;wki :piwo:

Patrix 30.10.2008 23:38

Cytat:

Napisany przez andy (Post 976127)
EDIT

Dodatkowo można sprawdzać czy znaki po [i] są "/p>" czyli
Kod:

if(plik[i] + 1 == "/" and plik[i] + 2 == "p" and plik[i] + 3 == ">")
{
i += 4;
buff += plik[i];
}


pomysł dobry tylko jak to zrobić za pomocą fgets/fgetc i jak tam sprawdzać licznik ?


Wszystkie czasy w strefie CET. Aktualna godzina: 04:53.

Powered by vBulletin® Version 3.9.0 LTS
Copyright ©2000 - 2026, vBulletin Solutions Inc.