Napisz program, będzie wypisywał na wyjście wczytane liczby do momentu napotkania dwóch identycznych liczb całkowitych. Kończymy na wypisaniu tych liczb.
NP. wejscie>> 1 2 3 4 5 6 7 7
wyjscie 1 3 4 5 6 7 7 Ma ktoś pomysł jak to zrobić (c++);
prosze o pomysł jak to zrobić jestem w tym kompletnie nowy znam petle, if else, swtich, troche tablic
bool first=true;
int prev=0,val;
while((cin>>val)&&((first)||(prev==val))) { first=false; prev=val; }
Umiesz wczytać jedną liczbę? Jeśli nie to zapraszam do kursu.
Utwórz sobie dwie zmienne. Np. poprzednia
i obecna
.
Na początek wczytaj jedną liczbę do poprzednia
.
Wyświetl ją na ekran.
Od tego momentu wczytuj nowe liczby do obecna
.
Wyświetl ją na ekran.
Jeśli poprzednia
jest równa obecna
- przerwij pętlę.
W przeciwnym wypadku - przypisz obecna
do poprzednia
Jak dla mnie to całkiem proste.
_13th_Dragon napisał(a):
bool first=true;
int prev=0,val;
while((cin>>val)&&((first)||(prev==val))) { first=false; prev=val; }
dziękuje za kod, ale jednak wole sam go zrobić wsparciem kogoś innego, kto mi to objaśni
kq napisał(a):
Umiesz wczytać jedną liczbę? Jeśli nie to zapraszam do kursu.
Utwórz sobie dwie zmienne. Np.
poprzednia
iobecna
.Na początek wczytaj jedną liczbę do
poprzednia
.
Wyświetl ją na ekran.Od tego momentu wczytuj nowe liczby do
obecna
.
Wyświetl ją na ekran.
Jeślipoprzednia
jest równaobecna
- przerwij pętlę.
W przeciwnym wypadku - przypiszobecna
dopoprzednia
Jak dla mnie to całkiem proste.
dzięki za pomysł wyszło mi coś takiego, dziękuje za podpowiedź;
#include <iostream>
using namespace std; main(){
int first,second,poprzednia;
cin>>first; //czytam pierwsza
cout<<first<<"\n"; //daje ja na ekran
poprzednia=first;// przypisanie
while(cin>>second){
cout<<second<<"\n";//ekran
if(poprzednia==second) break; //ostatnia==poprzednia jest ok ;)
else poprzednia=second;
}
}
Przyda się trochę ludzkiego formatowania i wcięcia:
#include <iostream>
using namespace std;
int main() // int main(), a nie samo main()
{
int first, second, poprzednia; // spacja po przecinku
cin >> first; //czytam pierwsza
cout << first << "\n"; //daje ja na ekran
poprzednia = first;// przypisanie <--- bezsensowny komentarz
while(cin >> second)
{
cout << second << "\n";//ekran
if (poprzednia == second)
break; //ostatnia==poprzednia jest ok ;)
else
poprzednia = second;
}
}
... Po czym przyda się unifikacja nazewnictwa zmiennych oraz wywalenie zbędnych zmiennych i zbędnego kodu:
#include <iostream>
using namespace std;
int main() // int main(), a nie samo main()
{
int value,prev; // spacja po przecinku - być nie musi
cin>>prev; //czytam pierwsza
cout<<prev<<endl; //daje ja na ekran
while(cin>>value)
{
cout<<value<<endl;//ekran
if(prev==value) break; //ostatnia==poprzednia NIE jest ok - koniec
prev=value;
}
}
- Niepoprawne wcięcia
- Nie powinno się używać using namespace std tylko użyć operatora zakresu
- Mimo, że instrukcja warunkowa ma jedną linijkę powinna mieć klamry, wcięcia i nie być w jednej linii
- Przed operatorem i po nim powinna być spacja
- Komentarze są zbędne i zaciemniają kod
@_13th_Dragon i ty się bierzesz za pomaganie? Nadajesz się do tarcia chrzanu.
I gdzie tych kretyńskich zasad cię nauczono?
Z książki "Czysty kod. Podręcznik dobrego programisty".
To co przedstawiłeś to są TWOJE zasady kodowania, twoja racja. A racja jest jak dupa. Nikomu nie narzucisz swojej d**y.
To w jakim celu powstała książka np. "Czysty kod. Podręcznik dobrego programisty"?
I dlaczego w wielu firmach przed rozpoczęciem pracy nakazują zapoznać się z nią i przestrzegać tych zasad?
Super! Teraz powiedz, jeszcze, że powinny mieć zawsze przedrostek typu i zastosowania, jak CVector, SScreen, EFlag, argX, varY
Wręcz przeciwnie. Nic takiego nie napisałem.
I przestańcie pisać komentarze, bo nie mogę na nie odpowiadać.
Złamana Pała napisał(a):
To co przedstawiłeś to są TWOJE zasady kodowania, twoja racja. A racja jest jak dupa. Nikomu nie narzucisz swojej d**y.
To w jakim celu powstała książka np. "Czysty kod. Podręcznik dobrego programisty"?
I dlaczego w wielu firmach przed rozpoczęciem pracy nakazują zapoznać się z nią i przestrzegać tych zasad?
Teraz zapoznaj się ze stylem formatowania proponowanym przez google czy microsoft.
Kod ma być czysty. Ale nie według zasad jakiejś książki, która mówki jak i kiedy nadmiarowo stosować klamerki - ma być jednolity, pisany jednym stylem.
Jak już wspomniałem, to twoja dupa i trzymaj ją dla siebie - chyba, że założysz firmę i właśnie takie nazi-zasady będą panowały przy code-review.
spartanPAGE napisał(a):
Kod ma być czysty. Ale nie według zasad jakiejś książki, która mówki jak i kiedy nadmiarowo stosować klamerki - ma być jednolity, pisany jednym stylem.
Ale musicie chyba przyznać że formatowanie zastosowane przez @_13th_Dragon jest po prostu tragiczne - mało czytelne i wygląda niewiele lepiej od formatowania @TheDominik który dopiero zaczyna programowanie
Tak samo nikt nam nie każe używać przerw w postach - można spokojnie walić ściany tekstu. A jednak są tu tacy którzy napastują gdy ktoś w zdaniu użyje spacji przed znakiem interpunkcyjnym lub gdy napisze 40 zdań bez podziału na akapity.
Panu @Złamana Pała (gratuluję wylewności, choć na tym forum to raczej niestosowne) przypominam, że wątek nie dotyczy "czystości kodu", a wyświetlania liczb, więc proszę nie robić off-topu i bałaganu w cudzym wątku; Trochę szacunku dla pytacza by się przydało okazać;
A jak koniecznie chcesz dyskutować na temat formatowania kodu @_13th_Dragon, to zarejestruj się i albo ciągnij OT w komentarzach, albo wal na PM do smoka.
Pisze jak mi wygodnie, nie chciałem wywołać wojny. :) Mam kolejne pytanie. Jak wyznaczyć drugą największą liczbę? np
wejście
2 3 4 3 5 6 5 3 4 2 1 4 0
wyjście
5
dodanie znacznika <code>
- @furious programming
Wystarczy trzy zmienne:
cin>>A>>B;
if(A<B) swap(A,B);
while(cin>>C)
{
if(B<C)
{
swap(B,C);
if(A<B) swap(A,B);
}
}
Aj niestety ma błędy, ja zrobiłem, ze program mi znajduje największą i najmniejszą, ale co zrobić dalej, aby znaleźć tę druga najmniejszą.
tu więcej przykładowych testów
wejście
1 2 3 0
12 3 4 0
4 4 5 5 1 0
1 2 3 4 4 1 0
wyjście
2
4
4
3
#include <iostream>
#include <algorithm>
using namespace std; main(){
int max,min,c;
cin>>max>>min;
if(max<min) swap(max,min);
while(cin>>c){
if(c==0) break;
if(c<min) min=c;
if(max<c) max=c;
}
}
Nic dziwnego, wymyśliłeś niepoprawny algorytm.