• 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

Object Storage Arubacloud
0 głosów
107 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 882 wizyt
pytanie zadane 14 października 2015 w Java przez Hinaru Początkujący (310 p.)
+1 głos
1 odpowiedź 202 wizyt

92,669 zapytań

141,567 odpowiedzi

320,033 komentarzy

62,034 pasjonatów

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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...