• 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

0 głosów
208 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 1,028 wizyt
pytanie zadane 14 października 2015 w Java przez Hinaru Początkujący (310 p.)
+1 głos
1 odpowiedź 422 wizyt

93,631 zapytań

142,556 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
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

Kursy INF.02 i INF.03
...