Napisałem taki program używający tablic do wyświetlania ocen 5 uczniów, ale nie wiem jak ograniczyć by można było wpisywać liczby od 1 do 6, czy mógłby ktoś mi z tym pomóc?
#include <iostream>
using namespace std;
int main() {
int i;/*Numer Ucznia*/
int j;/*Numer Sprawdzianu*/
setlocale(LC_CTYPE, "Polish");
float oceny[5][2];
for(j=0;j<2;j++){
cout<<"Wprowadź oceny z sprawdzianu "<<j+1<<" dla 5 uczniów "<<endl;
for(i=0;i<5;i++)
{
cout<<"podaj ocene dla " << i+1 <<" ucznia"<<endl;
cin>>oceny[i][j];
}}
cout<<"Tablica wygląda następująco: "<<endl;
cout<<" Sprawdzian I "<<"Sprawdzian II"<<endl;
cout<<"Uczeń 1: "<<oceny[0][0]<<" "<<oceny[0][1]<<endl;
cout<<"Uczeń 2: "<<oceny[1][0]<<" "<<oceny[1][1]<<endl;
cout<<"Uczeń 3: "<<oceny[2][0]<<" "<<oceny[2][1]<<endl;
cout<<"Uczeń 4: "<<oceny[3][0]<<" "<<oceny[3][1]<<endl;
cout<<"Uczeń 5: "<<oceny[4][0]<<" "<<oceny[4][1]<<endl;
return 0;
}
Czy liczba uczniów i sprawdzianów będzie się zmieniać.
Wtedy zastanowiłbym się, aby użyć dwóch pętli do wypisania ocen uczniów, bo gdyby było ich 50, to musiałbyś “po Twojemu” zrobić kopiuj-wklej 50 razy ze zmianą numeru ucznia
Nie wiem czy masz ograniczenia co do wykorzystania dodatkowych funkcji
Ja zastosowałbym regex i string zamiast int
regex ograniczy wpisywanie ocen do zakresu 1 - 6, jak również nie wpiszesz liter, znaków, itd.
jeśli wpiszesz coś innego, to powtórzy pytanie
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main() {
int i;/*Numer Ucznia*/
int j;/*Numer Sprawdzianu*/
setlocale(LC_CTYPE, "Polish");
string oceny[5][2];
regex regex_pattern("[1-6]");
for(j=0;j<2;j++){
cout<<"Wprowadź oceny z sprawdzianu "<<j+1<<" dla 5 uczniów "<<endl;
for(i=0;i<5;i++)
{
do{
cout<<"podaj ocene dla " << i+1 <<" ucznia"<<endl;
cin>>oceny[i][j];
}while(!regex_match(oceny[i][j],regex_pattern));
}}
cout<<"Tablica wygląda następująco: "<<endl;
cout<<" Sprawdzian I "<<"Sprawdzian II"<<endl;
cout<<"Uczeń 1: "<<oceny[0][0]<<" "<<oceny[0][1]<<endl;
cout<<"Uczeń 2: "<<oceny[1][0]<<" "<<oceny[1][1]<<endl;
cout<<"Uczeń 3: "<<oceny[2][0]<<" "<<oceny[2][1]<<endl;
cout<<"Uczeń 4: "<<oceny[3][0]<<" "<<oceny[3][1]<<endl;
cout<<"Uczeń 5: "<<oceny[4][0]<<" "<<oceny[4][1]<<endl;
return 0;
}
Robię ten program w dev c++ i może brakuje mi jakiejś biblioteki albo coś w tym stylu gdyż po odpaleniu tego kodu pokazuje mi error
oraz otwiera się drugie okno z tą wiadomością:
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// http://www.gnu.org/licenses/.
/** @file bits/c++0x_warning.h
This is an internal header file, included by other library headers.
Do not attempt to use it directly. @headername{iosfwd}
*/
#if __cplusplus < 201103L #error This file requires compiler and library support for the
ISO C++ 2011 standard. This support is currently experimental, and must be
enabled with the -std=c++11 or -std=gnu++11 compiler options. #endif
Zamień while(oceny[i][j]<0 && oceny[i][j]>6);
na while(oceny[i][j]<1 || oceny[i][j]>6);
czyli && (AND) na || (OR) w pętli while (bo np. chcesz wykluczyć 7 a ta liczba nie jest jednocześnie mniejsza od 1 i większa od 6 - wykluczane liczby są albo mniejsze od 1 albo większe od 6). Warunek z <0 zmień na <1 (żeby wykluczyć 0).