29 / 59
Sep 2018

Dzieki twojemu testowi zauwazyłam, że nie zeruje sumy na koncu petli, wiec to był problem. Dziękuje za pomoc, bo tak to bym pewnie szukała problemu przez kilka kolejnych godzin :smiley:

6 months later

czy ktoś mi powie dlaczego pętla tutaj wykonuje mi się tylko raz w programie?

A podajesz liczbę testów? Bo mi normalnie zrobil

Program jest poprawny i usuń go, i link do ideone w drigim wątku, jedyny błąd to rozmiar tablicy char, na końcu jeszcze NULL ma sie zmieścić, i pewnie przez to mogą sie dziac rozne dziwne rzeczy

no tak dałem rozmiar tablicy na 12 i już było ok. I to tak zawsze trzeba rezerwować dodatkowo jedno miejsce ?

Tak, w charach na końcu łańcucha znaków jest Null, musi być dla niego miejsce, w innych tablicach nie musi (liczbowe).

1 month later

Hej. Ja zrobiłem to tak. Na moim kopi działa dobrze wyniki są poprawne.
Na SPOJ nie działa. Dlaczego?

#include <iostream>
#include <string>
#include <cstdlib>
#include <math.h>
using namespace std;

int main()
{
	string pesel;
	string pomocnicza="";
	double wynik=0;
	int tab[11];
	short ile;
	cin >> ile;
	for (int k = 0; k < ile; k++)
	{
		cin >> pesel;

		for (int i = 0; i < 11; i++)
		{
			pomocnicza.push_back(pesel[i]);
			tab[i] = atoi(pomocnicza.c_str());
			pomocnicza = "";
		}
		tab[0] = tab[0] * 1;
		tab[1] = tab[1] * 3;
		tab[2] = tab[2] * 7;
		tab[3] = tab[3] * 9;
		tab[4] = tab[4] * 1;
		tab[5] = tab[5] * 3;
		tab[6] = tab[6] * 7;
		tab[7] = tab[7] * 9;
		tab[8] = tab[8] * 1;
		tab[9] = tab[9] * 3;
		tab[10] = tab[10] * 1;
		for (int j = 0; j < 11; j++)
		{
			wynik += tab[j];
		}
		if ((wynik - ((floor(wynik / 10)) * 10)) == 0)
			cout << "D" << endl;
		else
			cout << "N" << endl;
	}

    return 0;
}

prawdopodobnie dlatego, że niedokładnie przeczytałeś treść zadania

To musisz być w błędzie, ponieważ w programie suma wychodzi 121, dla sprawdzenia u mnie na kartce zgodnie z algorytmem podanym w zadaniu też wychodzi 121.
121%10!=0

z tego wniosek, że

  1. przeczytaliśmy treść różnych zadań (co mało prawdopodobne)
  2. przeczytałeś nieuważnie treść zadania - zdecydowanie bardziej prawdopodobne :slight_smile:
23 days later

Witam, ciągle wyrzuca mi błąd. Pdejrzewam, że ma to coś wspólnego z wczyywaniem danych za pomocą scanf (białe znaki) ponieważ gdy wpisze ciąg 11 cyfr program uważa, że to jedna wprowadzona (muszą być odzielone enterem).
Bardzo prosze o rade i z góry dziekuje :slight_smile:
Link do kodu: https://ideone.com/b7VPaa8

scanf("%d", &pesel[i]);

wczytuje Ci całą liczbę, jeśli nie jest rozdzielona białym znakiem, a nie pojedynczą cyfrę. Możesz użyć czegoś w stylu

scanf(" %c ", &pesel[i]);
pesel[i] -= '0';

Wtedy wczyta jeden znak. Spacja przed i po %c jest po to, żeby zjadało line feed (enter) po ostatniej cyfrze i nie wczytywało go w następnym obiegu jako znak. ‘0’ odejmujemy, gdyż komputer wczytuje jedną cyfrę jako jej kod ASCII i trzeba odjąć kod zera, żeby otrzymać tę cyfrę.

Wtedy też będziesz musiał wyzerować tablicę pesel przed pierwszym użyciem:

memset(pesel, 0, sizeof(pesel));

Lub zadeklarować ją jako tablicę charów:

char pesel[12];

Dlaczego zwiększyłem rozmiar tablicy o 1? Gdyż wtedy będzie miejsce na ostatni znak ‘\0’, co pozwoli ci wczytywać pesel w następujący sposób:

scanf("%s", pesel);

Potem jednak w pętli będziesz musiał poodejmować kody zera.

I mała uwaga na koniec: w konsoli być może nie będzie chciało ci “ogarnąć”, że wpisałeś ostatni pesel, w takim wypadku trzeba wcisnąć CTRL-Z i potwierdzić enterem (wysyła to znak końca pliku do programu).

Powodzenia :slight_smile:

BTW: Linijka

if(sprawdzenie(pesel)<=0) return 0;

pewnie nie spowoduje błędnej odpowiedzi w tym zadaniu, ale w takim wypadku powinieneś zgodnie ze specyfikacją zadania wypisać, że pesel jest błędny, a nie wychodzić z programu.

Witam, sędzia odrzuca a porgram działa jak powinien (prawie). Problem polega na tym, że potrzebuje wczytać liczby pesel jako char a nie int (wtedy lapie mi ciag 11 znakow jako jedna liczbe).
Prosze o pomoc,z gory dziekuje!

Dobrym pomysłem byłoby czytanie odpowiedzi w tematach, w których prosiłeś o pomoc… Post wyżej masz wszystko dokładnie opisane…