zapętlanie programu i formatowanie tekstu

0

Witam,

Zaczynam przygodę z C++ i chciałbym coś osiągnąć ale nie wiem jak to zrobić :P Mianowicie chciałbym się dowiedzieć i zrozumieć zrobić:

1) Zapętlić program, tzn, naciskam Enter uruchamiam jeszcze raz proces od nowa... napisałem sobie prosty kalkulator, wszystko fajnie tylko jak zrobić żeby po zakończeniu działania po naciśnięciu Enter można było liczyć kolejne dzialanie? Poczytałem trochę i zapewne konstruckja do... while ale mógłby mi to ktos łopatologicznie wytłumaczyć lub wskazać miejsce gdzie mogę doczytać i zrozumieć ? :)

Mam coś takiego:

{
string zmienna;
int a;
int b;
int dzialanie;

do{
cout << "Podaj pierwsza cyfre: \t" ;  // Wprowadzanie danych
cin >> a ;

.... dalszy ciąg programu.....

        cout << "Dzielenie przez 0 jest NIEMOZLIWE" ;
    } 
    break ;
    
default :
    cout << "Operacja niemozliwa! \n" ;
    break ;                                                                                            
    
}   // Koniec "drukowania" wyniku
    cout << " T czy N?";
    cin >> zmienna;
}
while(zmienna=!T);

Co zrobiłem źle? :)

Wywala błędy:

//D:\C++\Kalkulator.cpp In function 'int main()':
97 15 D:\C++\Kalkulator.cpp [Error] 'T' was not declared in this scope

D:\C++\Kalkulator.cpp In function 'int main()':
97 15 D:\C++\Kalkulator.cpp [Error] 'T' was not declared in this scope
//

2) Też prosty programik, wpisuje dane z klawiatury pokolei pyta o dane a potem tworzy wizytówkę. Chciałbym dowiedzieć jak "wynik" czyli już dane w formie wizytówki otoczyć w ramkę... i wycentrować. Próbowałem ręcznie ale nie da się gdyż ramka będzie przesuwać się w zależności od wprowadzonych danych... krótsze/dłuższe..

Pomoże ktoś? Tak samo pokazać jak zrobić lub odesłać do materiałów gdzie jest to łopatologicznie wytłumaczone.
Będę wdzięczny

poprawienie formatowania całego posta - fp

0

popraw tytul tematu bo za tytul ten temat moze poleciec do kosza

blad mowi jasno. Nie masz zadeklarowanego T w 15 linijce kodu.

  1. masz rozne opcje. Najprostsza do zrozumienia dla Ciebie bedzie jak poczytasz sobie o switch. Zrob proste menu i po tym menu wybierzesz sobie jaka opcje chcesz zrobic.

  2. wczytuj tekst do stringa sprawdzaj jaka ma dlugosc i na podstawie tej dlugosci dodaj mu spacje i dodaj tyle gwiazdek zeby utworzyc wystarczajaca dluga ramke

0
fasadin napisał(a):

popraw tytul tematu bo za tytul ten temat moze poleciec do kosza

blad mowi jasno. Nie masz zadeklarowanego T w 15 linijce kodu.

  1. masz rozne opcje. Najprostsza do zrozumienia dla Ciebie bedzie jak poczytasz sobie o switch. Zrob proste menu i po tym menu wybierzesz sobie jaka opcje chcesz zrobic.

  2. wczytuj tekst do stringa sprawdzaj jaka ma dlugosc i na podstawie tej dlugosci dodaj mu spacje i dodaj tyle gwiazdek zeby utworzyc wystarczajaca dluga ramke

Nie mogę niestety poprawić, nie widzę opcji edytuj.. będą trafniej konstruował tematy w przysłości

  1. poczytałem o switch... wykorzystałem go do stworzenia kalkulatora tj. wybierania działań itd ale jak go wykorzystać jeżeli chodzi o wrócenie do początku programu?
    Jeżeli chodzi o błąd to nie jest to błąd w 97 linijce (wiersz 97, kol 15)? Ten wiersz to
while(zmienna=!t);

Jak to zrobić aby błąd usunąć? zdeklarowałem zmienną, potem dałem żeby ją wprowadzić i potem chciałem żeby po wpisaniu T przejść do początku. Podpowie ktoś co muszę jeszcze wpisać bo nie mam pomysłu niestety...

  1. Dzięki za naprowadzenie. Jakim komendy muszę wykorzystać i którym się przyjrzeć? Będę próbował, gdybym nie wpadł na to jak zrobić będę prosił o podsunięcie pod nos... ale mam nadzieje że się uda zrobić samemu
0

masz pod postem po prawej stronie na dole opcje szybka edycja pozniej edytuj. Klikasz w edytuj i tam mozesz zmienisz temat

  1. nie jestem jasnowidzem, musisz dac kod.
    przykladowo mozesz zrobic tak
 int wybor;
do {
  wyswietlMenu(); //tutaj mozesz zrobic funkcje ktora wyswietla menu
  cin >> wybor 
  switch(wybor) 
  {
     case 1: 
       // tutaj wczytujesz liczbe, robisz z nia odpowiednie rzeczy (dodajesz albo mnozysz zalezy od tego co chcesz pod 1)
       break;
     (...)
     case 5:
       cout << " wychodzimy z programu";
       break;
     default:
       cout << " nie ma takiej opcji w menu ";
  }
while (wybor != 5);

powyzsze mozesz zrobic ladniej i mozesz zrobic tak

 int wybor;
do {
  wyswietlMenu(); //tutaj mozesz zrobic funkcje ktora wyswietla menu
  cin >> wybor 
  if (wybor == opcjaKtoraWychodziZMenu)
    break;
  cin >> liczba1 >> liczba2;
  switch(wybor) 
  {
     case 1: 
       //  robisz z nia odpowiednie rzeczy (dodajesz albo mnozysz zalezy od tego co chcesz pod 1)
       break;
     (...)
     default:
       cout << " nie ma takiej opcji w menu ";
  }
while (1);

opcji jest wiele(dalem moim zadniem te najprostsze bys zrozumial). Pamietaj ze przy pisaniu kodu ladnie go fortamujesz i staraj sie nie lamac DRY oraz KISS (do wygooglowania jezeli nie wiesz)

  1. http://www.cplusplus.com/reference/string/string/
0

Opcja edycji zniknęła po tym jak odpowiedziałeś na mój temat ;)

daję cały kod :) Co jest nie tak? :D

#include <iostream>
 
using namespace std;

main() 

{


string zmienna;
int a;
int b;
int dzialanie;

do{
    string zmienna;
cout << "Podaj pierwsza cyfre: \t" ;  // Wprowadzanie danych
cin >> a ;

cout << "Podaj druga cyfre: \t" ;
cin >> b ;  // Koniec danych

cout << "Jakie dzialanie chcesz wykonac?: \n"  // Wybor dzialania
    <<"1 - dodawanie \n"    
    <<"2 - odejmowanie \n"
    <<"3 - mnozenie \n"
    <<"4 - dzielenie \n" ;  // Koniec wyboru działania
    
cout << "\n \n" ;
    
cout << "Twoj wybor to: " ; cin >> dzialanie ;        

cout << "\n \n" ;

switch(dzialanie)  // Pierwszy "switch" - "Drukowanie" wyboru działania.
{
case 1 :
    cout << "Wybrales dzialanie: DODAWANIE \n" ;
    break ;

case 2 :
    cout << "Wybrales dzialanie: ODEJMOWANIE \n" ;
    break ;
    
case 3 :
    cout << "Wybrales dzialanie: MNOZENIE \n" ;
    break ;
    
case 4 :
    cout << "Wybrales dzialanie: DZIELENIE \n" ;
    break ;
    
default :
    cout << "Operacja niemożliwa! \n" ;
    break ;
    
}  //    Koniec pierwszego switcha - "Drukowania: działania
        
    
                
        
cout << "\n \n \n \n" ;

switch(dzialanie)  // Druggi Switch -  "Drukowanie wyniku z opisem

{
case 1 :
    cout << "Wynik dodawania to: " << "\n" << a << "+" << b << "=" << a + b << "\n" ;
    break ;
    
case 2 :
    cout << "Wynik odejmowania to: " << "\n" << a << "-" << b << "=" << a - b << "\n" ;
    break ;
    
case 3 :
    cout << "Wynik mnozenia to: "<< "\n" << a << "x" << b << "=" << a * b << "\n" ;
    break ;
    
case 4 :
    if(b!=0)
    {
        cout << "Wynik dzielenia to: "<< "\n" << a << " / " << b << "=" << a / b << "\n" ;
    }
    else
    {
        cout << "Dzielenie przez 0 jest NIEMOZLIWE" ;
    } 
    break ;
    
default :
    cout << "Operacja niemozliwa! \n" ;
    break ;                                                                                            
    
}  // Koniec "drukowania" wyniku
    cout << " T czy N?";
    cin >> zmienna;
}
while(zmienna!=t);
  // Do dodania pętla ponownego dzialania!
}

Mam nadzieję że nie dostanę po głowie za prostotę tego czegoś :D

Co do 2) Zagłębiam się w lekturę :) Jak będą pytania to napiszę :)

0

tak jak Ci mowilem. nie masz zadeklarowanej zmiennej t

zamiast

zmienna != t

powinno byc

zmienna != "t"

czytaj komunikaty kompilatora.

powinno być

int main()

a na koncu programu powinno byc

return 0
0

Koleś nawet przepisać poprawnie nie jest w stanie: http://forum.dobreprogramy.pl/pytania-zaczecie-programu-nowa-oraz-ramka-t549815.html
Więc bez gotowca nie da rady ;D

0
_13th_Dragon napisał(a):

Koleś nawet przepisać poprawnie nie jest w stanie: http://forum.dobreprogramy.pl/pytania-zaczecie-programu-nowa-oraz-ramka-t549815.html
Więc bez gotowca nie da rady ;D

Jakbyś zauważył ten sam nick nie byłoby twojego postu ;)

@_13th_Dragon ślepota... nie zczaiłem że brakuje ""... No ale na początku trzeba zdać sobie sprawę że nic nie umiemy żeby się czegokolwiek nauczyć;]

0
fasadin napisał(a):

tak jak Ci mowilem. nie masz zadeklarowanej zmiennej t

zamiast

zmienna != t

powinno byc

zmienna != "t"

czytaj komunikaty kompilatora.

powinno być

int main()

a na koncu programu powinno byc

return 0

Niestety wstawiłem i okazało się że wszystko co zostanie wpisane powoduje rozpoczęcie programu na nowo a nic nie powoduje jego zakończenia... chyba że zamknięcie okna..

0
#include <iomanip> // na samym początku
...
cin >> ws >> zmienna; // dodać ten ws
0
_13th_Dragon napisał(a):
#include <iomanip> // na samym początku
...
cin >> ws >> zmienna; // dodać ten ws
// Program Kalkulator//
/* Praca na przedmiot Metody i Języki programowania
Autor:Michał Polak Data:18.10.13 Wersja: 1.4*/

#include <iostream>
#include <iomanip> 
 
using namespace std;

main() 

{


string zmienna;
int a;
int b;
int dzialanie;

do{
    string zmienna;
cout << "Podaj pierwsza cyfre: \t" ;  // Wprowadzanie danych
cin >> a ;

cout << "Podaj druga cyfre: \t" ;
cin >> b ;  // Koniec danych

cout << "Jakie dzialanie chcesz wykonac?: \n"  // Wybor dzialania
    <<"1 - dodawanie \n"    
    <<"2 - odejmowanie \n"
    <<"3 - mnozenie \n"
    <<"4 - dzielenie \n" ;  // Koniec wyboru działania
    
cout << "\n \n" ;
    
cout << "Twoj wybor to: " ; cin >> dzialanie ;        

cout << "\n \n" ;

switch(dzialanie)  // Pierwszy "switch" - "Drukowanie" wyboru działania.
{
case 1 :
    cout << "Wybrales dzialanie: DODAWANIE \n" ;
    break ;

case 2 :
    cout << "Wybrales dzialanie: ODEJMOWANIE \n" ;
    break ;
    
case 3 :
    cout << "Wybrales dzialanie: MNOZENIE \n" ;
    break ;
    
case 4 :
    cout << "Wybrales dzialanie: DZIELENIE \n" ;
    break ;
    
default :
    cout << "Operacja niemożliwa! \n" ;
    break ;
    
}  //    Koniec pierwszego switcha - "Drukowania: działania
        
    
                
        
cout << "\n \n \n \n" ;

switch(dzialanie)  // Druggi Switch -  "Drukowanie wyniku z opisem

{
case 1 :
    cout << "Wynik dodawania to: " << "\n" << a << "+" << b << "=" << a + b << "\n" ;
    break ;
    
case 2 :
    cout << "Wynik odejmowania to: " << "\n" << a << "-" << b << "=" << a - b << "\n" ;
    break ;
    
case 3 :
    cout << "Wynik mnozenia to: "<< "\n" << a << "x" << b << "=" << a * b << "\n" ;
    break ;
    
case 4 :
    if(b!=0)
    {
        cout << "Wynik dzielenia to: "<< "\n" << a << " / " << b << "=" << a / b << "\n" ;
    }
    else
    {
        cout << "Dzielenie przez 0 jest NIEMOZLIWE" ;
    } 
    break ;
    
default :
    cout << "Operacja niemozliwa! \n" ;
    break ;                                                                                            
    
}  // Koniec "drukowania" wyniku
    cout << "Chesz wykonac kolejne dzialanie? \n \n Aby liczyć dalej wpisz: t \n Aby zakonczyc wpisz dowolny inny znak! \n \n";
    cin >> ws >> zmienna;
    
}
while(zmienna != "t");
return 0 ;

}

Tak wstawiłem i nadal co bym nie wpisał to i tak liczy dalej...

1
  1. wywal drugą deklaracje zmienna wewnątrz pętli bo wprowadzasz cin >> ws >> zmienna; do wewnętrznej zaś badasz while(zmienna != "t"); zewnętrzną.
  2. zamień na while(zmienna == "t"); inaczej na t - będzie wychodzić.
0

Dzięki wielkie! Teraz czas na 2-gi punkt :) Może dam radę :)

0

Mam problem z ramką.

Jak obudować to co chcę "wydrukować" ramką i żeby się automatycznie dostosowała w zależności od ilości wpisanych znaków? Pomoże ktoś?

I jeszcze jedno pytanie odnośnie stringów tj. Jak normalnie wprowadzałem dane czyli np. cin >> imie itd to po wpisaniu np ulicy która składała się z 2-óch członów nap Osiedle Krakusa, Krakusa dopasowywało już do kolejnej zmiennej. Rozwiązałem ten problem używają getline(cin, ulica). Nie wiem czy dobrze to rozwiązałem i czy jest lepsze rozwiązanie tego "problemu"?

Dzięki z góry za pomoc :)

0

Może najwyższy czas jakiś kurs przeczytać?

string str="Jestem mega leniem";
cout<<setfill('*')<<setw(str.length()+4)<<endl<<"* "<<str<<" *"<<setfill('*')<<setw(str.length()+4)<<endl;

1 użytkowników online, w tym zalogowanych: 0, gości: 1