Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cum accesez site-ul CNAS ?

Algoritm simplu de calculare al u...

Bitdefender Total Security ș...

casa verde 2024
 Intrerupator cu N - doza doar cu ...

Incalzire casa fara gaz/lemne

Incalzire in pardoseala etapizata

Suprataxa card energie?!
 Cum era nivelul de trai cam din a...

probleme cu ochelarii

Impozite pe proprietati de anul v...

teava rezistenta panou apa calda
 Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...

Rezultat RMN

Numar circuite IPAT si prindere t...
 

C ++ Triunghi- Problema

- - - - -
  • Please log in to reply
29 replies to this topic

#1
AlexandruRaboj

AlexandruRaboj

    New Member

  • Grup: Junior Members
  • Posts: 21
  • Înscris: 16.09.2016
Salutare! Am si eu o problema de rezolvat in C++ si nu stiu cum deoarece nu am inteles prea bine while-ul.Se dă un număr N. Să se afișeze următorul triunghi de numere:
N N-1 N-2 ... 2 1
N-1 N-2 ... 2 1
....
2 1
1
Mai exact, pe prima linie se vor afișa toate numerele de la N la 1, pe cea de-a doua linie toate numerele de la N-1 la 1 etc. Numerele de pe fiecare linie vor fi despărțite prin spații, si poate puteti sa imi explicati pasii folosind while (nu vreau cu for sau ceva mai complicat, vreau strict cu while si restul : if, else etc.) si daca puteti sa imi explicati cum fac si invers de la cel mai mic la cel mai mare, de ex 1 2 3 4 5 pe primul rand, pe al doilea rand 1 2 3 4 s.a.m.d. Multumesc anticipat!

Ex de piramida :
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1

#2
waterman

waterman

    Guru Member

  • Grup: Senior Members
  • Posts: 28,372
  • Înscris: 17.05.2004
Uite frățică despre while

A while loop statement repeatedly executes a target statement as long as a given condition is true.
Syntax
The syntax of a while loop in C++ is −
while(condition) {
   statement(s);
}
Here, statement(s) may be a single statement or a block of statements. The condition may be any expression, and true is any non-zero value. The loop iterates while the condition is true.
When the condition becomes false, program control passes to the line immediately following the loop.
Flow Diagram
C++ while loop
Here, key point of the while loop is that the loop might not ever run. When the condition is tested and the result is false, the loop body will be skipped and the first statement after the while loop will be executed.

Example

#include <iostream>
using namespace std;

int main () {
   // Local variable declaration:
   int a = 10;
   // while loop execution
   while( a < 20 ) {
  cout << "value of a: " << a << endl;
  a++;
   }

   return 0;
}

#3
AlexandruRaboj

AlexandruRaboj

    New Member

  • Grup: Junior Members
  • Posts: 21
  • Înscris: 16.09.2016
Ok am inteles cum sta cu while dar tot nu am inteles cum fac piramida..
Eu pana acum am reusit doar asta:

#include<iostream>
using namespace std;
int main(){
    int N ;
    cin >> N ;
    int N_1= N - 1 ;
    while (N > 0){
    cout << N << " " ;
        N -=1;
    }
    cout << endl;
    while(N_1 > 0){
    std::cout << N_1 << " " ;
        N_1 -= 1;
    }
return 0;
}
Dar imi afiseaza decat 2 randuri : Introduc 5
5 4 3 2 1
4 3 2 1
Si atat..
Intrebarea este cum fac mai departe? Dar daca am un numar mai mare ex: 50?Stau sa scriu pe fiecare in parte? Trebuie sa fie ceva sa le faca automat..Asta nu inteleg..

#4
waterman

waterman

    Guru Member

  • Grup: Senior Members
  • Posts: 28,372
  • Înscris: 17.05.2004
Nu știu C++


#include <iostream>
using namespace std;
int main(){  
int n, i;  
cout<<"n=";
cin>>n;  
while(n>0){   
  i=n;   
while(i>0){   
cout<<i<< " "; i--; }   
cout<<endl; n--; }}



Cred că mai trebuie aranjat




Citește mai multe pe Brainly.ro - https://brainly.ro/t...308064#readmore

Edited by exceswater, 14 May 2018 - 15:15.


#5
AlexandruRaboj

AlexandruRaboj

    New Member

  • Grup: Junior Members
  • Posts: 21
  • Înscris: 16.09.2016
#include <iostream>
using namespace std;
int main(){
int N, i;
cin>>N;
while( N > 0 ){
  i=N;
  while(i>0){
    cout << i << " " ;
    i--;
  }
    cout << endl;
    N--;
}
return 0;
}


Da, este perfect. Multumesc mult.

#6
MembruAnonim

MembruAnonim

    MembruAnonim

  • Grup: Banned
  • Posts: 398,226
  • Înscris: 08.10.2015
Nu are treaba cu limbajul in sine cat are treaba cu analiza problemei adica cu logica. Logica din spatele algoritmului se aplica in orice limbaj se implementeaza algoritmul. Adica odata ajuns la o rezolvare logica a problemei de fata implementarea e usoara, fie ca e C, C++, perl, python, etc...
Inainte de scris cod efectiv trebuie gasit algoritmul aka logica din spatele codului.

#7
AlexandruRaboj

AlexandruRaboj

    New Member

  • Grup: Junior Members
  • Posts: 21
  • Înscris: 16.09.2016

View PostMembruAnonim, on 14 mai 2018 - 15:25, said:

Nu are treaba cu limbajul in sine cat are treaba cu analiza problemei adica cu logica. Logica din spatele algoritmului se aplica in orice limbaj se implementeaza algoritmul. Adica odata ajuns la o rezolvare logica a problemei de fata implementarea e usoara, fie ca e C, C++, perl, python, etc...
Inainte de scris cod efectiv trebuie gasit algoritmul aka logica din spatele codului.
Da m-am gandit, de aceea am postat si mai sus cum am gandit-o, m-am gandit ca trebuie sa scriu pe primul rand toate numerele de la N la 1, pe al doilea rand toate numerele de la N-1 la 1 si tot asa dar nu stiam exact cum sa scriu asta prescurtat. De ex daca aveam restricite de N < 50, nu ma apucam sa scriu de nebun 200 de linii de cod.. trebuia sa fie o scurtatura si pe aceea eu nu o intelegeam..Oricum multumesc pentru raspunsuri. :)

#8
andreim77

andreim77

    Senior Member

  • Grup: Senior Members
  • Posts: 4,233
  • Înscris: 11.04.2006
afiseaza si tu cate o linie doua si vezi ce iese din aproape in aproape, uneori prinzi ideea din zbor...adica pe parcurs.

#9
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,197
  • Înscris: 24.02.2007
Cand iti miroase a cod repetitiv, mai mult ca sigur se poate simplifica.

#10
PlatonX

PlatonX

    Senior Member

  • Grup: Senior Members
  • Posts: 5,727
  • Înscris: 13.09.2009
Pentru n = 5 codul trebuie sa afiseze:

5  4  3  2  1
4  3  2  1
3  2  1
2  1
1

1   int n; //Declari variabila
2   int k; //Declari variabila
3   n = 5; //Initializezi variabila  
4   while (n > 0){ // Valoarea de inceput pt fiecare rand Ex: 5, 4, 3, 2, 1
5   k = n; //Aici k ia pe rand valorile de mai sus: 5, 4, 3, 2, 1
6    while (k > 0){
7    Afiseaza k si spatiu; //la acest while afisezi randul
8   k--; // k scade pana la 1, dar se reinitializeaza la linia 5
9 }
10 Afiseaza rand urmator
11 n--; // n scade pana la 1
12  }


Verifica si in C cum afiseaza, eu l-am verifica in php, si merge.

Edited by PlatonX, 14 May 2018 - 17:57.


#11
MembruAnonim

MembruAnonim

    MembruAnonim

  • Grup: Banned
  • Posts: 398,226
  • Înscris: 08.10.2015
Eu l-am facut in Python, o functie recursiva care afiseaza linia si o a doua functie care o apeleaza pe prima cat timp N >= 1. Functioneaza perfect:
Spoiler
De asta am si zis, logica din spate, odata gasita poate fi implementata in orice limbaj. Nu e cel mai okay cod dar merge pentru joaca / invatat.

Edited by MembruAnonim, 14 May 2018 - 18:29.


#12
AlexandruRaboj

AlexandruRaboj

    New Member

  • Grup: Junior Members
  • Posts: 21
  • Înscris: 16.09.2016

View PostPlatonX, on 14 mai 2018 - 17:31, said:

Pentru n = 5 codul trebuie sa afiseze:

5  4  3  2  1
4  3  2  1
3  2  1
2  1
1

1   int n; //Declari variabila
2   int k; //Declari variabila
3   n = 5; //Initializezi variabila  
4   while (n > 0){ // Valoarea de inceput pt fiecare rand Ex: 5, 4, 3, 2, 1
5   k = n; //Aici k ia pe rand valorile de mai sus: 5, 4, 3, 2, 1
6    while (k > 0){
7    Afiseaza k si spatiu; //la acest while afisezi randul
8   k--; // k scade pana la 1, dar se reinitializeaza la linia 5
9 }
10 Afiseaza rand urmator
11 n--; // n scade pana la 1
12  }


Verifica si in C cum afiseaza, eu l-am verifica in php, si merge.
Multumesc mult pentru explicatie, acum am inteles mult mai bine. Avand in vedere ca sunt la inceput, si invat pe cont propriu (acasa), eu zic ca incep sa invat cat de cat mult mai repede.

#13
AlexandruRaboj

AlexandruRaboj

    New Member

  • Grup: Junior Members
  • Posts: 21
  • Înscris: 16.09.2016
#include <iostream>
using namespace std;
int main () {
int N; // Introduci variabila
   //( ca sa fie mai usor de inteles ii dam valoare de 5)
int M; // Intoducem variabila M ( variabila ajutatoare)
cin >> N ; //Citim  variabila N de la tastatura
while ( N > 0 ) { // In timp ce 5 > 0
M = N ;   // Si M = 5 rezulta ca 5=5
while ( M > 0){   // In timp ce  5 > 0
cout << M << " " ; // Afiseaza 5 "Spatiu" ( se trece la urmatorul rand)
--M ; // Scade 1 din M( din 5 ) si revin-o la linia 12
} // Si atunci 5 devine 4 urmand sa afiseze la linia 13 = 5 4 s.a.m.d
  // Pana M > 0 nu mai este adevarat si se trece la
  // urmatoarele instructiuni
std::cout << endl; // Trece pe randul urmator
--N ; // scade 1 din N  si revin-o la linia 10
} // pana N > 0 nu mai este adevarat
return 0; // Revin-o
}

O sa las asta aici poate se intelege mai bine pentru cei care cauta Posted Image . Multumesc tuturor pentru explicatii !

Edited by AlexandruRaboj, 14 May 2018 - 19:40.


#14
chinezu22

chinezu22

    Junior Member

  • Grup: Members
  • Posts: 60
  • Înscris: 08.04.2017
Stiu ca a fost problema rezolvata, dar am zis sa vin si eu cu o alta metoda.

#include <iostream>
using namespace std;

int main(){
int n,i,j;
cin>>n;
for(i=n;i>=1;i--){
for(j=i;j>=1;j--)
cout<<j<<" ";
cout<<endl;}

return 0;}

#15
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
Frumos, dar cam prea 'deodata'.

Quote

N N-1 N-2 ... 2 1
N-1 N-2 ... 2 1
....
2 1
1

void printLine(unsigned int number)
{
while(number) {
// number and space
}
// end of line;
}

printLine(5)
printLine(4)
....


void printTriangle(unsigned int lines)
{
while (lines) {
	 printLine(lines--)
}
}

Edited by MarianG, 15 May 2018 - 13:14.


#16
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
Attached File  triunghi.png   25.05K   36 downloads

Ce si unde putem modifica sa pastram alinierea?

Edited by MarianG, 15 May 2018 - 13:56.


#17
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
As memoiza acea prima linie, si cu o structura de date corespunzatoare, as merge de la O(n^2/2) la O(2n).

Prea multe bucle, prea multe recalculari.

Da, overkill pentru aceasta problema, dar cred ca scopul temei e sa te faca sa te gandesti si la "what if", ca sa ai idee de abordari in cazuri reale din industrie.

In practica, acea numaratoare descrescatoare poate fi un alt algoritm, mai complicat.

Iar a doua problema ridicata de MarianG ar fi usor paralelizabila, cu aceasta structura.

Cu trenduri ca threadripper sau apache beam, nu prea iti mai permiti sa nu pui paralelizarea pe  locul copilotului, langa algoritmica.

#18
PlatonX

PlatonX

    Senior Member

  • Grup: Senior Members
  • Posts: 5,727
  • Înscris: 13.09.2009
As crea un array bidimenional si as aloca un numar de spatii pentru fiecare element: Daca N = 124, voi crea un array de dimeniunea 124x124 si pentru fiecare element array[i][k] voi aloca un numar de 3 spatii pt ca N are 3 cifre. Apoi, as inlocui numarul de spatii corespunzator: Daca array[i][k] = 2,  elementul "   " se va inlocui cu "2  ", daca este 12 se va inlcui cu "12 ".

Edited by PlatonX, 15 May 2018 - 14:23.


Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate