Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z zdaniem Król z Main2

Ostatnio zmodyfikowano 2020-02-18 21:19
Autor Wiadomość
blockedd4
Temat założony przez niniejszego użytkownika
Problem z zdaniem Król z Main2
» 2020-02-16 21:36:19
Wstęp do programowania, lekcja 10 (Quiz). Dostępna pamięć: 256 MB. 13–19.12.2014
Na pewnym polu na szachownicy 8 × 8 stoi król. Chcielibyśmy dowiedzieć się, na ile różnych pól może przeskoczyć ta figura w jednym ruchu∗
. Zakładamy, że na szachownicy nie ma w tym momencie żadnych innych
figur.
Wejście
Pierwszy i jedyny wiersz wejścia zawiera jedną literę k oraz jedną cyfrę w, oddzielone spacją. Litera k oznacza
kolumnę szachownicy (k ∈ {a, . . . , h}), a cyfra w oznacza wiersz szachownicy (w ∈ {1, . . . , 8}).
Wyjście
W jedynym wierszu wyjścia Twój program powinien wypisać jedną liczbę całkowitą – liczbę pól szachownicy,
na które może przeskoczyć król umieszczony na zadanym polu.
Przykład
Dla danych wejściowych:
d 5
poprawnym wynikiem jest:
8
natomiast dla danych wejściowych:
a 8
poprawnym wynikiem jest:
3

Czy może ktoś poprawić ten kod aby działał poprawnie i dla wszystkich przypadków.
Totalnie nie wiem jak to zrobić proszę o pomoc, pilne.

Raport ostatecznego sprawdzania
Test Wynik Czas Wynik
1 OK 0.00s/1.00s 10/10
2 OK 0.00s/1.00s 10/10
3 OK 0.00s/1.00s 10/10
4 OK 0.00s/1.00s 10/10
5 OK 0.00s/1.00s 10/10
6 OK 0.00s/1.00s 10/10
7 Zła odpowiedź 0.00s/1.00s 0/10
8 Zła odpowiedź 0.00s/1.00s 0/10
9 OK 0.00s/1.00s 10/10
10 Zła odpowiedź 0.00s/1.00s 0/10
7 wiersz 1: wczytano '3', a oczekiwano '5'
8 wiersz 1: wczytano '3', a oczekiwano '5'
10 wiersz 1: wczytano '8', a oczekiwano '5'

#include <iostream>
using namespace std;

int ilosc_ruchow(int k, int w){
if(k==1 || w==8){
if(w=='a' || w=='h') return 3;
return 5;
}
if(w=='a' || w=='h'){
return 3;
}
return 8;
}
int main(){
int k;
char w;
cin>>w>>k;

cout<<ilosc_ruchow(k,w);

return 0;
}

P-176243
pekfos
» 2020-02-16 22:32:51
Dla A2 wynik jest błędny.
P-176244
mizie
Rozwiązanie
» 2020-02-17 12:20:45
Twój kod może wyglądać następująco:

C/C++
// Zadanie: KRO 2. Król
// Wstęp do programowania, lekcja 10 (Quiz). Dostępna pamięć: 256 MB.
#include <iostream>
#include <cctype> // tolower()

short ilosc_ruchow( int let, short num ) {
    if(( let == 'a' || let == 'h' ) &&( num == 1 || num == 8 ) ) {
        // narozniki szachownicy
        return 3;
    }
    else if((( num >= 2 && num <= 7 ) &&( let == 'a' || let == 'h' ) ) ||(( num == 1 || num == 8 ) &&( let >= 'b' && let <= 'g' ) ) ) {
        // brzegowe kolumny i wiersze szachownicy bez naroznikow
        return 5;
    }
    else {
        // pcozostale pola
        return 8;
    }
}

int main() {
    char k;
    int w;
    std::cout << "Podaj pozycje krola (kolumna - litera od a do h, wiersz - liczba od 1 do 8: ";
    std::cin >> k >> w;
    std::cout << ilosc_ruchow( tolower( k ), w ) << std::endl;
    system( "PAUSE" );
    return 0;
}
P-176245
pekfos
» 2020-02-17 19:48:38
Skoro już i tak padła odpowiedź "umiem zrobić to zadanie!", to dodam że metoda eliminacji autora jest znacznie bardziej zwięzła niż twoja metoda siłowa, w której każdy warunek jest praktycznie samowystarczalny.
C/C++
int ilosc_ruchow( int k, int w ) {
    if( k == 1 || w == 8 ) { // rząd 1,8 (powinno być 2 razy `k` w warunku)
        if( w == 'a' || w == 'h' ) return 3; // i kolumna A,H = róg
       
        return 5; // rząd 1,8, ale nie róg
    }
    if( w == 'a' || w == 'h' ) {
        return 3; // kolumna A,H, rzedy inne niż 1,8 (powinno być return 5)
    }
    return 8; // Zostają tylko pola w środku
}
P-176246
mizie
» 2020-02-17 23:59:01
Mała rada. Zamiast marnować czas na niewiele wnoszące komentarze (nie przypominam sobie, żebym pytał o twoje zdanie) powinieneś poświęcić chwilę na naukę czytania ze zrozumieniem. Nad źródłem widnieje, cytuję: "Twój kod MOŻE wyglądać następująco:". Nie oznacza to, że jest to jedyne, najlepsze i najbardziej zwięzłe rozwiązanie. Nikt tego tutaj nie twierdzi. Działa i tyle. Może będzie w jakiś sposób pomocne dla autora zapytania (blockedd4). Jeżeli masz taką potrzebę i chcesz zoptymalizować kod lub pokazać alternatywne rozwiązanie, absolutnie nie widzę przeciwwskazań. Wręcz przeciwnie, zawsze chętnie się czegoś przydatnego nauczę lub spojrzę na problem z innej strony. Natomiast łaskawie zachowaj swoje niezwykle wnikliwe oceny dla tych, których one interesują (czyli głównie dla siebie).
P-176250
latajacaryba
» 2020-02-18 01:47:23
@mizie no zobacz, a mnie zainteresowało jego zdanie. Zresztą dlaczego ktoś widząc, że można coś zrobić lepiej ma się wstrzymywać od opinii, bo Ty słabo znosisz uzasadnioną krytykę?
P-176251
pekfos
» 2020-02-18 21:19:29
powinieneś poświęcić chwilę na naukę czytania ze zrozumieniem. Nad źródłem widnieje, cytuję: "Twój kod MOŻE wyglądać następująco:".
A w pierwszym poście "Czy może ktoś poprawić ten kod aby działał poprawnie i dla wszystkich przypadków". Napisanie kodu od nowa to też jakiś sposób na poprawienie błędów :)
P-176255
« 1 »
  Strona 1 z 1