Reklama
Pokazuje wyniki od 1 do 8 z 8

Temat: problem z programem w c++

  1. #1
    Avatar Criss26
    Data rejestracji
    2012
    Położenie
    Płock
    Wiek
    32
    Posty
    3,076
    Siła reputacji
    14

    Domyślny problem z programem w c++

    Witam.
    Mam do napisania program o tresci:
    Kod:
    
    
    Zamień liczbę całkowitą z systemu dziesiątkoweo na dowolny inny. Zakładamy, że w razie potrzeby cyfry większe od 9 reprezentowane są przez kolejne duże litery alfabetu łacińskiego (tj cyfra dziesięć - A, cyfra jedenaśćie - B, itd aż do Z).
    
    Wyjście
    
    Pierwsza linia zawiera 64-bitową liczbę całkowitą nieujemną, która ma być zamieniona na inne podstawy.
    
    Druga linia zawiera jedną liczbę przedstawiającą liczbę podstaw na które będziemy zamieniać.
    
    Trzecia linia zawiera podstawy na które będziemy zamieniać oddzielone spacjami.
    
    Wyjście
    
    Kolejne linie zawierają naszą liczbę zapisane w systemie o kolejnych podstawach 
    
    
    Przykład 1
    
    Wejście:
    
    2013
    5
    2 8 10 16 36
    
    Wyjście:
    
    11111011101
    3735
    2013
    7DD
    1JX
    Napisalem juz troche, program zamienia mi z dziesietnego na kazdy inny, jednak nie moge sobie poradzic z pkt 2, tzn. "Druga linia zawiera jedną liczbę przedstawiającą liczbę podstaw na które będziemy zamieniać."

    Kod programu
    Kod:
    #include <iostream>
    #include <string>
    
    std::string zamien(int liczba,int system)
    {
     std::string wyjscie;
           std::string str_tmp;
           char tablica[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    while(liczba)
           {
             str_tmp+=tablica[liczba%system];
             liczba/=system;
           }
           for(int i=str_tmp.size()-1;i>=0;i--) 
                   wyjscie+=str_tmp[i];
            return wyjscie;
    } 
         
    int main ()
    {
     using namespace std;
    while(1)
    { 
    cout <<"Zamiana liczb pomiedzy dziesietnym, a innymi systemami"<<endl<<endl;
    int x,y;
    cout <<"Podaj liczbe w systemie dziesietnym, ktora chcesz zamienic:";
    cin>>x;
    cout <<"Na jaki system chcesz zamienic? (wpisz liczbe)";
    cin>>y;
     
    cout<<"wartosc "<<x<<"(10) w systemie "<<y<<"-owym wynosi: "<<zamien(x,y)<<"\n";
    return 0;
    }
    }
    Prosze o szybka pomoc.
    (jesli zly dzial to prosze admina o przeniesienie).

  2. #2
    Avatar dadag90
    Data rejestracji
    2009
    Wiek
    33
    Posty
    108
    Siła reputacji
    15

    Domyślny

    Może wieczorem zobaczę Twój kod, ale oglnie jakbyś to swoje zapisał jako funkcję przyjmującą jeden parametr to w pętli for mógłbyś pobierać drugą linijkę.
    Kod:
    cout<<"Ile podstaw chcesz podać?";
    cin>>ilosc_podstaw;
    for(int i=0;i<ilosc_posdtaw;++i)
    {
        cin>>podstawa;
        zmien_liczbe(podsawa); //Twoja funcja
    }
    możesz też pobrać je do tablicy, ta będzie brzydko zadelkarowana.
    Kod:
    cout<<"Ile podstaw chcesz podać?";
    cin>>ilosc_podstaw;
    int tab[ilosc_podstaw];
    for(int i=0;i<ilosc_posdtaw;++i)
    {
       cin>>podstawa;
       tab[i]=podsawa;
    }
    później wywołujesz funkcję z wartościami z tablicy.
    Ostatnio zmieniony przez dadag90 : 11-01-2013, 09:25
    Format to ostateczność - walka do końca ...

  3. Reklama
  4. #3
    Avatar Fedake
    Data rejestracji
    2007
    Położenie
    Żory
    Wiek
    28
    Posty
    229
    Siła reputacji
    17

    Domyślny

    W zadaniu ułożonym w ten sposób najczęściej chodzi o to aby liczby były wprowadzone a nastepnie zapisane do pliku i wtedy jego struktura wygląda tak jak podane jest w zadaniu.

    Wczytywanie:
    Kod:
    	std::ifstream in;
    	in.open("dane.txt");
    
    	int x;
    	in >> x;
    
    	int n;
    	in >> n;
    
    	int* sys = new int[n];
    	for(int i = 0; i < n; i++)
    	{
    		in >> sys[i];
    	}
    	in.close();
    Po tym w zmiennej x masz liczbę którą należy zamienić, w n liczbę systemów do zmiany i w tablicy sys kolejne systemy. Następnie wystarczy dla każdego systemu wywołać funkcję i zapisać do pliku wg podanego wzoru (kolejne wyniki pod sobą)

    Zapisywanie:
    Kod:
    	std::ofstream out;
    	out.open("wynik.txt");
    	for(int i = 0; i < n; i++)
    	{
    		out << zamien(x, sys[i]) << std::endl;
    	}
    	out.close();
    A tutaj cały kod, dane bierze z pliku dane.txt tak jak opisane w zadaniu oraz zapisuje do wynik.txt. Wpisałem przykładowe liczby z treści zadania i wyniki są poprawne.
    http://wklej.to/A67hh

    #edit
    Teraz zauważyłem że wprowadzona liczba ma być 64 bitową bez znaku więc zamiast int x; możesz dać unsigned long long x; czy co tam chcesz ;d
    Ostatnio zmieniony przez Fedake : 11-01-2013, 10:01

  5. #4
    Avatar Tibiarz
    Data rejestracji
    2008
    Położenie
    Tibiantis
    Wiek
    4
    Posty
    16,095
    Siła reputacji
    27

    Domyślny

    @up
    po cholerę to?

    @top
    W pierwszej linii wejścia podajesz liczbę na której będziesz operował, w drugiej liczbę testów (każdy jeden test to zamiana z dziesiętnego na inny) a w trzeciej na jakie systemy będziesz zamieniać w poszczególnych testach. Są dwa proste sposoby, żeby to zrobić.
    Pierwszy: wczytujesz liczbę testów do jakiejś zmiennej n i potem w pętli for n razy wykonujesz: wczytanie liczby do zmiennej m oraz zamianę na system m-kowy.
    Drugi: wczytujesz liczbę testów do zmiennej n, tworzysz tablicę o długości n, w pętli for wczytujesz n intów do tej tablicy i następnie, także w pętli for, dla każdego z testów wykonujesz zamianę.
    Dokładnie tak, jak zrobił to dadag90.
    Ostatnio zmieniony przez Tibiarz : 11-01-2013, 10:10

  6. #5
    Avatar Criss26
    Data rejestracji
    2012
    Położenie
    Płock
    Wiek
    32
    Posty
    3,076
    Siła reputacji
    14

    Domyślny

    Cytuj Fedake napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    W zadaniu ułożonym w ten sposób najczęściej chodzi o to aby liczby były wprowadzone a nastepnie zapisane do pliku i wtedy jego struktura wygląda tak jak podane jest w zadaniu.

    Wczytywanie:
    Kod:
    	std::ifstream in;
    	in.open("dane.txt");
    
    	int x;
    	in >> x;
    
    	int n;
    	in >> n;
    
    	int* sys = new int[n];
    	for(int i = 0; i < n; i++)
    	{
    		in >> sys[i];
    	}
    	in.close();
    Po tym w zmiennej x masz liczbę którą należy zamienić, w n liczbę systemów do zmiany i w tablicy sys kolejne systemy. Następnie wystarczy dla każdego systemu wywołać funkcję i zapisać do pliku wg podanego wzoru (kolejne wyniki pod sobą)

    Zapisywanie:
    Kod:
    	std::ofstream out;
    	out.open("wynik.txt");
    	for(int i = 0; i < n; i++)
    	{
    		out << zamien(x, sys[i]) << std::endl;
    	}
    	out.close();
    A tutaj cały kod, dane bierze z pliku dane.txt tak jak opisane w zadaniu oraz zapisuje do wynik.txt. Wpisałem przykładowe liczby z treści zadania i wyniki są poprawne.
    http://wklej.to/A67hh

    #edit
    Teraz zauważyłem że wprowadzona liczba ma być 64 bitową bez znaku więc zamiast int x; możesz dać unsigned long long x; czy co tam chcesz ;d
    Zamiast int dalem unsigned long long, ale Sprawdzarka wywala blad "Złamanie reguł".

  7. #6
    Avatar Tibiarz
    Data rejestracji
    2008
    Położenie
    Tibiantis
    Wiek
    4
    Posty
    16,095
    Siła reputacji
    27

    Domyślny

    Cytuj Criss26 napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Zamiast int dalem unsigned long long, ale Sprawdzarka wywala blad "Złamanie reguł".
    Jaką macie sprawdzarkę? U nas w zeszłym roku było tak, że sprawdzarka wywalała "złamanie reguł", kiedy wklejało się kod, który został już wcześniej wklejony przez kogoś innego (kod musiał być identyczny, więc wystarczyło inaczej nazwać zmienne i było ok). O innych przypadkach mi nie wiadomo.
    Tak poza tym, to tych napisów typu "podaj liczbę", "wynik to:" itp. chyba nie powinno być, bo zapewne jest to traktowane tak, że wyjście się różni od tego, które ma być. Na wyjściu powinny być same liczby, tak jak w przykładzie.

  8. #7
    Avatar Criss26
    Data rejestracji
    2012
    Położenie
    Płock
    Wiek
    32
    Posty
    3,076
    Siła reputacji
    14

    Domyślny

    Cytuj tibia77 napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Jaką macie sprawdzarkę? U nas w zeszłym roku było tak, że sprawdzarka wywalała "złamanie reguł", kiedy wklejało się kod, który został już wcześniej wklejony przez kogoś innego (kod musiał być identyczny, więc wystarczyło inaczej nazwać zmienne i było ok). O innych przypadkach mi nie wiadomo.
    Tak poza tym, to tych napisów typu "podaj liczbę", "wynik to:" itp. chyba nie powinno być, bo zapewne jest to traktowane tak, że wyjście się różni od tego, które ma być. Na wyjściu powinny być same liczby, tak jak w przykładzie.
    No u mnie np byl taki przypadek, ze kolega wklepal program i dzialal, a ja zmienilem tylko nazwy zmiennych (poniewaz nie byly okreslone w zadaniu) i sprawdzarka nie przyjmowala ;p

    A co do programu to nie ma zadnych napisow, ale blad jest.
    Wkleilem to, co podal Fedake w linku, zamieniajac "int x" na "unsigned long long x".
    Wyglada to tak http://wklej.to/Oucv2
    Ostatnio zmieniony przez Criss26 : 14-01-2013, 11:16

  9. #8
    Avatar Tibiarz
    Data rejestracji
    2008
    Położenie
    Tibiantis
    Wiek
    4
    Posty
    16,095
    Siła reputacji
    27

    Domyślny

    Cytuj Criss26 napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    No u mnie np byl taki przypadek, ze kolega wklepal program i dzialal, a ja zmienilem tylko nazwy zmiennych (poniewaz nie byly okreslone w zadaniu) i sprawdzarka nie przyjmowala ;p

    A co do programu to nie ma zadnych napisow, ale blad jest.
    Wkleilem to, co podal Fedake w linku, zamieniajac "int x" na "unsigned long long x".
    Wyglada to tak http://wklej.to/Oucv2
    Fedake napisał jakieś bzdury.
    Wejście powinno być wprowadzane normalnie z klawiatury, zrób tak jak napisałem wcześniej.

    W mainie powinno być tylko to:

    wczytaj x;
    wczytaj n;
    for (i = 0; i < n; i++) {
    wczytaj y;
    zamien(x,y);
    wyswietl wynik;
    }

    lub:

    wczytaj x;
    wczytaj n;
    zadeklaruj tablicę int y[n];
    for (i = 0; i < n; i++) {
    wczytaj y[i];
    }
    for (i = 0; i < n; i++) {
    zamien(x,y[i]);
    wyswietl wynik;
    }

    i tyle.
    W pierwszym przypadku po każdym wprowadzeniu kolejnej liczby z 3 linii wejścia, od razu wypisze wynik dla niej. A w drugim wprowadzasz od razu n liczb z 3 linii wejścia i dopiero wtedy wypisze n wyników. Sprawdzarka powinna akceptować oba.
    Ostatnio zmieniony przez Tibiarz : 14-01-2013, 22:36

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Problem z programem?
    Przez Perkun w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 0
    Ostatni post: 26-01-2015, 13:56
  2. Problem z programem(Gcody)
    Przez Halunek w dziale Szkoła i nauka
    Odpowiedzi: 0
    Ostatni post: 25-12-2014, 16:57
  3. Java (podstawy) problem z programem
    Przez Absynt w dziale Programowanie
    Odpowiedzi: 2
    Ostatni post: 21-02-2014, 13:21
  4. Problem z programem AEGISUB
    Przez Krychu99 w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 10
    Ostatni post: 03-04-2013, 14:08
  5. [Poradnik] Nagrywanie filmików programem Bynacam
    Przez Abrith w dziale Tibia
    Odpowiedzi: 1
    Ostatni post: 26-12-2010, 23:38

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •