• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z nazwą tablicy w pętli

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
142 wizyt
pytanie zadane 12 listopada 2015 w C i C++ przez Luna Cognita Dyskutant (8,130 p.)
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <windows.h>


using namespace std;

string autor = "Luna Cognita";
string version = "v0.1";

string question[5];
string answer[5];

string anA[3],anB[3],anC[3],anD[3],anE[3];

string reply;

int points = 0;

int main()
{
    question[0] = "Szybkosc lacza okreslamy w:";
    question[1] = "Ile potrzeba minimum dyskow by stworzyc RAID 5:";
    question[2] = "Koncowka kabla Ethernet nosi nazwe:";
    question[3] = "Glowny skladowy element dysku twardego HDD:";
    question[4] = "Protokol polaczeniowy ktory nie traci pakietow:";

    answer[0] = "b";
    answer[1] = "b";
    answer[2] = "a";
    answer[3] = "c";
    answer[4] = "c";

    anA[0] = "MB";
    anA[1] = "Mb";
    anA[2] = "mb";

    anB[0] = "2";
    anB[1] = "3";
    anB[2] = "5";

    anC[0] = "RJ-45";
    anC[1] = "RJ-48";
    anC[2] = "RJ-50";

    anD[0] = "Silownik";
    anD[1] = "Glowica";
    anD[2] = "Talerz";

    anE[0] = "UDP";
    anE[1] = "SCTP";
    anE[2] = "TCP";

    for (int i=0; i<=4; i++)
    {
        cout << autor << " Quiz version " << version << endl << endl;
        cout << "Twoje punkty: " << points << endl << endl;
        cout << question[i] << endl;

        for (int j=0; j<=2; j++)
        {
            cout << j+1 << "." << anA[j] << endl;

        }

        cout << endl << "Odpowiedz: ";  cin >> reply;

        transform(reply.begin(),reply.end(),reply.begin(), ::tolower);

        if (answer[i]==reply)
        {
            cout << endl << "Poprawna odpowiedz! Dostajesz 1 punkt.";
            points++;
            cout << " Masz juz: " << points;

            if (points<=1)
            {
                cout << " punkt.";
            } else
            {
                cout << "punktow.";
            }

            Sleep(2000);
            system("cls");

        } else
        {
            cout << endl << "Zla odpowiedz!";
            Sleep(2000);
            system("cls");
        }
    }

    getchar();
    getchar();

    return 0;
}

I teraz pytanie: jak zrobić jeśli pierwsza pętla for osiągnie i=1 to aby w drugiej pętli zamiast anA[j] było anB[j], może inaczej powinienem to rozpracować, ktoś pomoże?

1 odpowiedź

+1 głos
odpowiedź 12 listopada 2015 przez furas Maniak (53,800 p.)
wybrane 12 listopada 2015 przez Luna Cognita
 
Najlepsza

Można trzymać w tablicy dwuwymiarowej aby potem odwoływać się do danych 

an[i][j] 

Bez tego zostaje Ci używać if lub switch

if(i == 0)
   cout << anA[j];
else if(i == 1)
   cout << anB[j];
// itd.

 

switch(i)
{
   case 0:
      cout << anA[j];
      break;
   case 1:
      cout << anB[j];
      break;
   // itd.
}

 

komentarz 12 listopada 2015 przez Luna Cognita Dyskutant (8,130 p.)

 

 

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <windows.h>


using namespace std;

string autor = "Luna Cognita";
string version = "v0.1";

string question[5];
string answer[5];

string an[5][3];

string reply;

int points = 0;

int main()
{
    question[0] = "Szybkosc lacza okreslamy w:";
    question[1] = "Ile potrzeba minimum dyskow by stworzyc RAID 5:";
    question[2] = "Koncowka kabla Ethernet nosi nazwe:";
    question[3] = "Glowny skladowy element dysku twardego HDD:";
    question[4] = "Protokol polaczeniowy ktory nie traci pakietow:";

    answer[0] = "b";
    answer[1] = "b";
    answer[2] = "a";
    answer[3] = "c";
    answer[4] = "c";

    an[0][0] = "MB";
    an[0][1] = "Mb";
    an[0][2] = "mb";

    an[1][0] = "2";
    an[1][1] = "3";
    an[1][2] = "5";

    an[2][0] = "RJ-45";
    an[2][1] = "RJ-48";
    an[2][2] = "RJ-50";

    an[3][0] = "Silownik";
    an[3][1] = "Glowica";
    an[3][2] = "Talerz";

    an[4][0] = "UDP";
    an[4][1] = "SCTP";
    an[4][2] = "TCP";

    for (int i=0; i<=4; i++)
    {
        cout << autor << " Quiz version " << version << endl << endl;
        cout << "Twoje punkty: " << points << endl << endl;
        cout << question[i] << endl;

        for (int j=0; j<=2; j++)
        {
            cout << j+1 << "." << an[i][j] << endl;

        }

        cout << endl << "Odpowiedz: ";  cin >> reply;

        transform(reply.begin(),reply.end(),reply.begin(), ::tolower);

        if (answer[i]==reply)
        {
            cout << endl << "Poprawna odpowiedz! Dostajesz 1 punkt.";
            points++;
            cout << " Masz juz: " << points;

            if (points<=1)
            {
                cout << " punkt.";
            } else
            {
                cout << " punktow.";
            }

            Sleep(2000);
            system("cls");

        } else
        {
            cout << endl << "Zla odpowiedz!";
            Sleep(2000);
            system("cls");
        }
    }

    cout << autor << " Quiz version " << version << endl << endl;
    cout << "Quiz zakonczony. Zdobyta liczba punktow: " << points;

    getchar(); getchar();

    return 0;
}

 

A czy teraz jak mam taki kod mozna go jakis bardziej "zoptymalizowac badz skrocic"?
komentarz 12 listopada 2015 przez furas Maniak (53,800 p.)
edycja 12 listopada 2015 przez furas

Wygląda mi, że u Ciebie odpowiedzi są numerowane "1", "2", "3" a nie "a", "b", 'c" więc "reply" i "answer"  mogły by być typu int i nie potrzebowałyby zamiany na małe litery - czyli niepotrzebne było by użycie transform().

Z odmianą "punkt", "punktów" jest nieprecyzyjnie bo są "2 punkty" a nie "2 punktów". Podobnie "22 punkty", "102 punkty" ale "21 punktów", "25 punktów" i "101 punktów", "105 punktów". Liczby z końcówką 2, 3, 4 mają "punkty" - za wyjątkiem "12, 13, 14 punktów".

Gdyby pytania i odpowiedzi były wczytywane z pliku to można by w pliku dodawać pytania bez potrzeby ponownego kompilowania programu. W pierwszym wierszu pliku można dać ile jest pytań w pliku

---

W `for` zwykle warunek `i<=4` zapisuje się jako `i < 5`  bo wtedy liczba 5 od razu nam mówi ile razy będzie wykonana pętla.

komentarz 12 listopada 2015 przez Luna Cognita Dyskutant (8,130 p.)
Dzięki wielkie! :)

Podobne pytania

0 głosów
2 odpowiedzi 936 wizyt
pytanie zadane 14 października 2015 w Java przez Hinaru Początkujący (310 p.)
+1 głos
1 odpowiedź 284 wizyt

93,164 zapytań

142,176 odpowiedzi

321,938 komentarzy

62,493 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 688p. - dia-Chann
  2. 676p. - CC PL
  3. 675p. - Łukasz Piwowar
  4. 664p. - Marcin Putra
  5. 662p. - Łukasz Eckert
  6. 649p. - Michal Drewniak
  7. 641p. - rucin93
  8. 641p. - rafalszastok
  9. 629p. - Piotr Aleksandrowicz
  10. 621p. - Dawid128
  11. 606p. - Mariusz Fornal
  12. 602p. - Michał Telesz
  13. 597p. - Hubert Chęciński
  14. 572p. - ssynowiec
  15. 527p. - Adrian Wieprzkowicz
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...