Coś nie tak z zadaniem


(14:11:2008) #1

tutaj jest link do zadania http://users.v-lo.krakow.pl/~dyrek/letn ... /p182.html

a to moje rozwiązanie:

#include

#include

using namespace std;

int main(){

    string slowo;

    int kod, i, a=97, A=65, spacja=31;

    cin>> slowo;


    if(slowo.size()>=1000) cout<<"NIE"<<"\n"; 


    for(i=0;i==slowo.size();++i){

                          kod=int(slowo[i]);

                          if(kod-a<=26 && kod-a>=0);

                          else if(kod-A<=26 && kod-A>=0);

                          else if(kod-spacja==1);

                          else cout<<"NIE"; 

                          break;

                          }


                          cout<<"TAK"<<"\n";

return 0;

system ("pause");

}

coś nie tak... ale nie wiem co... pewnie znowu jakiś głupi błąd... kompiluje bez problemu ale nie wyswietla odpowiedzi TAK/NIE


(Sawyer47) #2

Warunek pętli i == slowo.size() - zły. No i warunki w if-ach też niezbyt logiczne, czemu kod-spacja==1, a nie po prostu kod == ' ' ?


([alex]) #3
  1. [*:31eyz0qz]W wyniku operacji cin>>slowo; napis slowo nigdy nie będzie zawierać spacji, zamienić na:

    getline(cin,slowo);

[*:31eyz0qz]Jeżeli zostanie spełniony warunek slowo.size()>=1000 zostanie wydrukowane "NIE" ale pętla i tak się wykona, zamienić na:

if(slowo.size()>=1000) cout<<"NIE"<<"\n";

else

  {

  }

[*:31eyz0qz]W wyniku operacji cin>>slowo; napis slowo będzie zawierać przynajmniej jeden znak, więc warunek pętli nigdy nie będzie prawdą, co za tym idzie - nigdy nie zostanie wykonany żaden krok pętli, zamienić na:
lub:

if((kod==' ')||(isalpha(kod)))

odwrócony warunek:

if((kod!=' ')&&(!isalpha(kod)))

[*:31eyz0qz]instrukcja break zadziała po pierwszym kroku pętli, więc nigdy nie dojdzie do następnego kroku [*:31eyz0qz]cout<<"TAK" na końcu main zadziała zawsze. Podejrzewam że chodziło o sprawdzanie czy napis zawiera tylko litery i spacje:

#include 

using namespace std;


int main()

  {

   string slowo;

   int i=-1;

   getline(cin,slowo);

   if(slowo.size()<1000)

     {

      for(i=0;i
        {

         if((slowo[i]!=' ')&&(!isalpha(slowo[i])))

           {

            i=-1;

            break;

           }

        }

     }

   if(i<0) cout<<"NIE"<
   else cout<<"TAK"<
   cin.get();

   return 0;

  }

gdzie cały wydruk można zamienić na:

cout<<(i>=0?"TAK":"NIE")<




Edit: Dopiero zauważyłem treść zadania :lol:

Nie tędy droga, powinieneś stworzyć tabelkę wartości logicznych na 26 elementów, ewentualnie wykorzystać ze long zawiera 32 bity (ponad 26) np:

[code]#include using namespace std; int main() { cout<<"Wpisz napis: "; string s; getline(cin,s); long m=0x3FFFFFFL; for(int i=0;i cout<<(m?"NIE":"TAK")< cin.get(); return 0; }

for(i=0;i


[*:31eyz0qz]Najprostszy warunek sprawdzający czy znak jest literą bądż spacja:

[code]if((kod==' ')||(('a'<=kod)&&(kod<='z'))||(('A'<=kod)&&(kod<='Z')))