Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++] Problem z sprawdzaniem błędu


Rekomendowane odpowiedzi

Opublikowano

siemka ;) mam niecodzienny problem, z zadaniem ze spoja, pierwsze na liście z łatwych a przysparza tyle problemów, pomyślałem, że może chodzi o sprawdzanie błędnego wejścia, ale z tym właśnie jest problem, gdy wpisze np. asdf do cina, to program sie zawiesza, a powinna iść pętla do ponownego wprowadzenia danych, o co tu chodzi?

 

 
#include <iostream>
using namespace std;
 
bool isPrime(int n)
{
    for(int d = 2; d*d <= n; d++) 
    {
    if(n % d == 0 || !n )
    {
              cout << "NIE\n";
                  return 0; 
    }
     }
    cout << "TAK\n"; 
    return 1; 
}
 
 
int main(){
ios_base::sync_with_stdio(0);
int *wskint, ile;
cin >> ile;
wskint = new int[ile];
 
for(int i = 0; i < ile; i++) cin >> wskint[i];
for(int i = 0; i < ile; i++) isPrime( wskint[i] );
delete[] wskint;
}

 

http://pl.spoj.com/problems/PRIME_T/
G8loSX2.png
Opublikowano

ok, ale dlaczego nawet bez sprawdzania poprawności wejścia ten szajs mi mówi, że napisałem błędnie kod? czyli tak:

 

 
#include <iostream>
using namespace std;
 
bool isPrime(unsigned short int n)
{
    for(int d = 2; d*d <= n; d++) 
    {
    if( !(n % d) )
    {
              cout << "NIE\n";
                  return 0; 
    }
     }
    cout << "TAK\n"; 
    return 1; 
}
 
 
int main(){
ios_base::sync_with_stdio(0);
unsigned int ile;
unsigned short int liczba;
cin>>ile;
for(unsigned int i = 0; i < ile; i++){
    cin >> liczba;
        isPrime(liczba);
}
 
}
 
G8loSX2.png
Opublikowano

Zbawiłeś mnie i moje życie, jak to zadziała ide Ci sypać plusy :D

// edit, mówi, że błędna odpowiedź

 

 

 
#include <iostream>
using namespace std;
 
bool isPrime(int n)
{
    for(int d = 2; d*d <= n; d++) 
    {
    if(n % d == 0 || !n )
    {
              cout << "NIE\n";
                  return 0; 
    }
     }
    cout << "TAK\n"; 
    return 1; 
}
 
 
int main(){
ios_base::sync_with_stdio(0);
int *wskint, ile;
cin >> ile;
wskint = new int[ile];
 
for(int i = 0; i < ile; i++) cin >> wskint[i];
for(int i = 0; i < ile; i++) isPrime( wskint[i] );
delete[] wskint;
}
G8loSX2.png
Opublikowano

dalej nic nie zmieniłeś. Nie do końca jasno się wypowiedziałem.

Wczytuj liczby po kolei, przy każdej zapisuj wynik do tablicy.

Na końcu wypisz.

 

Chodzi o to, że jeśli podasz mu liczby po kolei to aktualnie będzie to wyglądało tak

 

3

TAK

4

NIE

5

TAK

 

a powinno

 

3

4

5

TAK

NIE

TAK

 

@zastanawiam się jednak, czy to ma jakiekolwiek znaczenie, bo wyjście powinno być przekierowane do osobnego pliku. Ale nie przychodzi i nic innego do głowy bo algorytm wygląda poprawnie,

@edit.

A co z liczbą jeden? Bo taka może się znaleźć w zestawach. 1 nie jest liczbą pierwszą, a twój algorytm pokaże, że jest.

Opublikowano
#include <iostream>
using namespace std;
 
bool isPrime(int n)
{
    for(int d = 2; d*d <= n; d++) 
    {
    if(n % d == 0 || n == 1 )
    {
              cout << "NIE\n";
                  return 0; 
    }
     }
    cout << "TAK\n"; 
    return 1; 
}
 
 
int main(){
ios_base::sync_with_stdio(0);
int *wskint, ile;
cin >> ile;
wskint = new int[ile];
 
for(int i = 0; i < ile; i++) cin >> wskint[i];
for(int i = 0; i < ile; i++) isPrime( wskint[i] );
delete[] wskint;
}

Nadal błąd ;x

G8loSX2.png
Opublikowano

spróbuj to

#include <iostream>
using namespace std;

bool isPrime(int n)
{
    if(n == 1) return false;
    for(int d = 2; d*d <= n; d++) //to można zoptymalizować
    {
        if(n % d == 0 )
        {
            return false;
        }
    }
    return true;
    return 1;
}


int main() {
    ios_base::sync_with_stdio(0);
    int *wyniki, ile, liczba;
    cin >> ile;
    wyniki = new int[ile];

    for(int i = 0; i < ile; i++) cin >> liczba, wyniki[i] = isPrime(liczba);
    for(int i = 0; i < ile; i++) cout << "NIE\0TAK"+wyniki[i]*4 << '\n';
    delete[] wyniki;
}

Opublikowano
if(wyniki[i]) cout << "TAK\n";
else cout << "NIE\n";
 

zrobiłem tak, bo zapomniałem zrobić, żeby wyświetlało "tak/nie" tekstowo

    for(int i = 0; i < ile; i++) cout << wyniki[i] << '\n';

 

, a przerobienie tego na takie coś jak w powyższym poście było najszybsze.

 

bardziej się zagłębiając to

"asdasdads" jest typu char*

reszta to arytmetyka na wskaźnikach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...