Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jak porównać dwie, kolejne liczby z dwóch plików tekstowych z tych samych linijek? Code Block C++

Ostatnio zmodyfikowano 2015-11-02 18:27
Autor Wiadomość
janusz3000
Temat założony przez niniejszego użytkownika
Jak porównać dwie, kolejne liczby z dwóch plików tekstowych z tych samych linijek? Code Block C++
» 2015-11-02 17:41:55
Witam, to znowu ja, mam problem z następującym zadaniem:
Dane są dwa pliki tekstowe: gracz1.txt i gracz 2.txt. Każdy z nich zawiera  taka samą ilość liczb naturalnych  z przedziału [0,100], są to liczby  wylosowane odpowiednio przez gracza 1. i gracza 2.  W każdej rundzie gry są porównywane liczby z odpowiadających sobie wierszy w tych dwóch plikach. Dany gracz wygrywa rundę, jeśli jego liczba jest większa, przegrywa, gdy jego liczba jest mniejsza, a gdy liczby są równe wynikiem jest remis. Całą grę wygrywa gracz z większą liczbą wygranych rund.
Napisz program, który wypisze na ekranie numer gracza, który wygrał całą grę.

Póki co udało mi się sprawić, aby program wylosował liczby z przedziału od 0 do 100 dla dwóch graczy i zapisał je w odpowiednich plikach.

C/C++
#include <iostream>
#include <stdlib.h>
#include <iomanip>
#include <time.h>
#include <fstream>

int n, d;
using namespace std;
int const zk = 100;
ifstream we( "gracz1.txt" );
ofstream wy( "gracz1.txt" );
ifstream we2( "gracz2.txt" );
ofstream wy2( "gracz2.txt" );


void losuj( int k, int * t ) // losuj (n, a) // k=n t=a np. i=5 t[i] i losuje a¿ do k czyli t[0,1,2,3,4,5]

{
    for( int i = 0; i < k; i++ )
         t[ i ] = rand() % zk; //Losuje z zakresu od 0-100 // Przypisuje wartoœci dla kolejnych t[0] = cos t[1]= cos......t[5]=cos
   
}

void wypisz( int k, int * t ) // wypisz (n, a)

{
    for( int i = 0; i < k; i++ ) // k=5
    {
        cout << t[ i ] << " "; //wyœwietli t[0] = cos t[1] = cos itd. po spacji
        wy << t[ i ] << endl;
    }
}
void losuj2( int k, int * t ) // Dla gracza2 to samo

{
    for( int i = 0; i < k; i++ )
         t[ i ] = rand() % zk;
   
}

void wypisz2( int k, int * t )
{
    for( int i = 0; i < k; i++ )
    {
        wy2 << t[ i ] << endl;
    }
}

int main()
{
   
    srand( time( NULL ) );
    int n;
   
    cout << "Podaj liczbe elemntow" << endl;
   
    cin >> n;
   
    int a[ n ]; // np. a[5] n=5 a[1]=cos
   
    losuj( n, a ); // i = n  t = a
   
    wypisz( n, a );
   
    losuj2( n, a );
   
    wypisz2( n, a );
   
    we.close();
    wy.close();
    we2.close();
    wy2.close();
    return 0;
   
}
 


Niestety tutaj moja wiedza się kończy i mam jedynie jakiś mętny pomysł co dalej:
Po wszystkich losowaniach i wypisaniach, zrobiłbym pętle np. "for" która wczytałaby by wartości z pierwszej linijki z obu plików a po każdym przejściu zwiększałaby numer linijki o 1 ( na następną).W tej pętli byłaby kolejna pętla np. "if" która porównałaby te dwie liczby i dodawałaby za każdym przejściem punkt dla gracza którego liczba okazała się większa. Wszystko wykonywałoby się tak długo, aż zabrakło by liczb, czyli do momentu kiedy liczba przejść zrównałaby się z liczbą elementów tablicy, podaną przez użytkownika. Potem nastąpiłoby już tylko porównanie punktów graczy i gotowe. Ale to tylko pomysł i nie mam pojęcia jakby to napisać.

Problem właśnie w tym, że nie wiem jak miałoby wyglądać polecenie które wczytywałoby i porównywałoby linijki z tych dwóch plików tekstowych i nigdzie jakoś nie mogę tego znaleźć, a na lekcje na których uczęszczam nie było to omawiane. Wszędzie znajduje tylko informację jak się zamyka i otwiera pliki teksowe i zapisuje do nich dane, ale niestety nic więcej.
P-139525
carlosmay
» 2015-11-02 18:27:19
C/C++
ifstream we( "gracz1.txt" ); // obiekt nieuzywany
ofstream wy( "gracz1.txt" );
ifstream we2( "gracz2.txt" ); // rowniez
ofstream wy2( "gracz2.txt" );
 
C/C++
cin >> n;

int a[ n ]; // to jest blad
 rozmiar tablicy statycznej musi być znany trakcie kompilacji (użyj
new
 dla tablic lub np. std::vector ).

Powtarzanie kodu w kilku funkcjach mija się z celem. Zrób jedną funkcję i odpowiednio wywołuj dla każdego przypadku.

  W każdej rundzie gry są porównywane liczby z odpowiadających sobie wierszy w tych dwóch plikach.
 
C/C++
unsigned gracz1 = 0, gracz2 = 0;
unsigned temp1, temp2;
// otworz pliki
while( we1 >> temp1 && we2 >> temp2 ) {
    if( temp1 < temp2 )
         gracz2++;
    else gracz1++;
   
    if( gracz1 < gracz2 )
    // wygral gracz2
    else
    // wygral gracz1
}
 
P-139529
« 1 »
  Strona 1 z 1