Wyświetlanie liczb do momentu powtórzenia się jakieś.

0

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

3
bool first=true;
int prev=0,val;
while((cin>>val)&&((first)||(prev==val))) { first=false; prev=val; }
2

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.

0
_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 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.

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;
	}
}
0

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;
    }
}
0

... 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;
     }
  }
3
  1. Niepoprawne wcięcia
  2. Nie powinno się używać using namespace std tylko użyć operatora zakresu
  3. Mimo, że instrukcja warunkowa ma jedną linijkę powinna mieć klamry, wcięcia i nie być w jednej linii
  4. Przed operatorem i po nim powinna być spacja
  5. Komentarze są zbędne i zaciemniają kod

@_13th_Dragon i ty się bierzesz za pomaganie? Nadajesz się do tarcia chrzanu.

0

@_13th_Dragon

I gdzie tych kretyńskich zasad cię nauczono?

Z książki "Czysty kod. Podręcznik dobrego programisty".

0

@spartanPAGE

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?

0

@spartanPAGE

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ć.

3
Złamana Pała napisał(a):

@spartanPAGE

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.

0
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.

0

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.

0

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

1

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);
     }
  }
0

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;
  }
}
0

Nic dziwnego, wymyśliłeś niepoprawny algorytm.

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