• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

matura 2013 problem ze zadaniem ,błąd

Object Storage Arubacloud
0 głosów
1,968 wizyt
pytanie zadane 16 grudnia 2016 w C i C++ przez Krystek102 Bywalec (2,440 p.)
edycja 16 grudnia 2016 przez Krystek102

Witam,mam problem z zadaniem z matury 2013

W pliku dane.txt znajduje się 5 000 liczb całkowitych z przedziału od 108 do 20000008,
zapisanych w systemie ósemkowym, po jednej liczbie w wierszu. W wybranym przez siebie
języku programowania napisz program, za pomocą którego uzyskasz odpowiedzi
na poniższe polecenia. Odpowiedzi zapisz w pliku wyniki6.txt, a odpowiedź do każdego
podpunktu poprzedź literą oznaczającą ten podpunkt.
a) Ile spośród liczb zapisanych w pliku dane.txt spełnia taki warunek, że pierwsza cyfra
tej liczby jest równa ostatniej cyfrze tej samej liczby?

poniższy kod wypisuje mi 0 nwm dlaczego :(  prawidłowy wynik to 447

#include <iostream>
#include<fstream>
#include<algorithm>
#include<string>
#include<cstdlib>


using namespace std;



int main()
{
   
    int ile=0;

    string s;
    ifstream we("dane.txt");
    ofstream wy("wyniki6_a.txt");
    for(int i=0; i<5000; i++)
    {
we>>s;
if(s[0]==s[s.size()-1])ile++;


    }

    cout<<ile<<endl;



    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 16 grudnia 2016 przez Yiome Obywatel (1,000 p.)
edycja 16 grudnia 2016 przez Yiome

Znawcą nie jestem, i nie rozumiem działania Twojego kodu, ale tak się składa że zdaję maturę z infy w tym roku i ostatnio robiłem to zadanie :). Ja użyłbym getline() o tak :

    fstream dane; dane.open("dane.txt", ios::in);
    string linia;
    int ileA=0;
    while(getline(dane,linia))
    {
        if( linia[0]==linia[linia.length()-1] ) ileA++;
    } cout<<ileA;

Teraz już chyba nie wiem w czym problem. jakis_string.size() to nie jego długość a wielkość w bajtach.

komentarz 16 grudnia 2016 przez Krystek102 Bywalec (2,440 p.)

kurcze,no nic ,tak samo, a i chyba powinno być 

 if( linia[0]==linia[linia.length()-1] ) ileA++;

 

komentarz 16 grudnia 2016 przez unknown Nałogowiec (39,560 p.)

jakis_string.size() to nie jego długość a wielkość w bajtach. Use length() instead

Te 2 metody robią to samo, zwracają długość string'a.

komentarz 16 grudnia 2016 przez Yiome Obywatel (1,000 p.)
Masz rację, zagapiłem się i nie dopisałem. Poprawiona wersja powinna działać, u mnie wyrzuca 447.
0 głosów
odpowiedź 16 grudnia 2016 przez operator Stary wyjadacz (10,920 p.)
komentarz 16 grudnia 2016 przez Krystek102 Bywalec (2,440 p.)
niestety,ale to też się nie sprawdza
komentarz 16 grudnia 2016 przez operator Stary wyjadacz (10,920 p.)
Wyślij mi kod i dane wejściowe. Zazwyczaj jest jakiś głupi mały błąd.
komentarz 16 grudnia 2016 przez Krystek102 Bywalec (2,440 p.)

http://maturzysta.cba.pl/include/dane/oct.txt

#include <iostream>
#include<fstream>
#include<string>
using namespace std;

int main()
{
    string s;
    int ile=0;
    ifstream we("dane.txt");
    ofstream wy("wyniki.txt");

    /* while(getline(we,s))
     {
         if(s[0]==s[s.length()-1])ile++;
     }

     string str(s);
     */
    for(unsigned i=0; i<str.length(); i++)
    {
        if(str[0]==str[str.length()-1])ile++;
    }
    cout<<ile<<endl;

    return 0;
}

 

komentarz 17 grudnia 2016 przez operator Stary wyjadacz (10,920 p.)
Metoda std::string::at działa prawidłowo.

Funkcja getline będzie dobrym pomysłem.

Metoda std::string::size działa prawidłowo.

Do tego prosty warunek porównujący i będzie działać.

Na std::string patrz jak na obiekt, a nie tablice znaków.
komentarz 17 grudnia 2016 przez Krystek102 Bywalec (2,440 p.)

Napisałem w inny troche sposób,ale nadal nie działa 

#include <iostream>
#include<fstream>
#include<string>
using namespace std;
string s[5000];
bool czy_rowne(string s)

{
    if(s[0]==s[s.size()-1])return true;
    return false;

}
int main()
{
    int ile=0;

    ifstream we("dane.txt");
    for(int i=0; i<5000; i++)
    {
        we>>s[i];
        if(czy_rowne(s[i]))ile++;
    }
    cout<<ile<<endl;
    return 0;
}

 

komentarz 17 grudnia 2016 przez operator Stary wyjadacz (10,920 p.)

Zobacz to:

while( getline( in, line ) ){
        if( line.at(0) == line.at( line.size()-1 ) ){
                cnt++;
        }
}

;)

Podobne pytania

0 głosów
2 odpowiedzi 1,312 wizyt
pytanie zadane 28 grudnia 2016 w C i C++ przez Krystek102 Bywalec (2,440 p.)
0 głosów
2 odpowiedzi 1,292 wizyt
pytanie zadane 29 maja 2018 w Java przez Gambr Dyskutant (7,530 p.)
0 głosów
2 odpowiedzi 556 wizyt
pytanie zadane 14 grudnia 2015 w C i C++ przez Memories Obywatel (1,410 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...