Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Iesirea din coproprietate

Mouse wireless ergonomic cu bater...

Cum se calculeaza dobanda lunara ...

La mulți ani @driftking91!
 Unde e recomandat sa ma cazez in ...

Descarcator de supratensiune tip 2

ping digi?

Reparare "șanțuri&#...
 De ce i se zice Mariei "Stapa...

Colet valoare Londra București

BMW seria 3 rulat vs SsangYong Ko...

Share abonament Netflix
 Cum pot sa fac rost de un negativ...

Lant Bicicleta

Un designer artist: Raymond Loewy

ATS din contactor modular
 

[TEMÃ] Aranjare cifre in ordine crescatoare.

- - - - -
  • This topic is locked This topic is locked
15 replies to this topic

#1
DaFuQ

DaFuQ

    Junior Member

  • Grup: Members
  • Posts: 120
  • Înscris: 15.08.2013
Salut, sora mea e pe clasa a 9-a si fiind incepatoare nu stie ce sunt aia vectori, array sau functii si are de facut o problema in care sa aranjeze cifrele unui numar in ordine crescatoare, stie doar buclele while(), if() si for().
Am incercat sa o ajut dar nu-mi iese nici mie, daca puteam folosi un array era mult mai usor, imi puteti da o idee?

#2
potae

potae

    Sorosist frumos si liber

  • Grup: Senior Members
  • Posts: 3,429
  • Înscris: 20.08.2013
Foloseste-te de / (divide) si % (modulo) pt. a ciordi cifrele din numar. Apoi vezi tu cum faci cu un if ceva sa le sortezi :)

#3
DaFuQ

DaFuQ

    Junior Member

  • Grup: Members
  • Posts: 120
  • Înscris: 15.08.2013
Am facut deja asta, dar nu sorteaza orice numar, doar unele...
aux=c%10;
c=c/10;
while(c!=0)
{

  if(c%10>aux)
  {
   n=n*10+aux;
   aux=c%10;
  }
  else
  {
   n=n*10+c%10;
  }
   c=c/10;
}
n=n*10+aux;
cout<<n;


PS: Stim ca numarul este format din cifre distincte.

#4
Andrey77

Andrey77

    Member

  • Grup: Members
  • Posts: 688
  • Înscris: 22.12.2009
Aplica BubbleSort numai ca in loc sa folosesti arrays foloseste cum a spus un coleg mai sus operatorii % si / si compune numarul sortat in alta variabila.

#5
EnachescuAlin

EnachescuAlin

    Active Member

  • Grup: Members
  • Posts: 1,008
  • Înscris: 08.07.2013
pai codul scris de tine nu sorteaza orice numar deoarece tu sortezi cifrele in functie de ultima cifra...
hai sa iti pun cum as face eu, dar nu sunt sigur ca merge....tu ai zis ca cifrele numarului sunt diferite. calculezi cifra minima a numarului si o introduci in alta variabila unde vei forma numarul cu cifrele in ordine crescatoare, dupaia elimini minumul din numarul care ti se da si tot asa pana cand numarul dat ajunge 0. asta ar fi o varianta, care daca o faci bine ar trebui sa mearga (zic eu) dar nu stiu daca e si cea mai eficienta.

#6
OriginalCopy

OriginalCopy

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

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Pas 1: pune-o să scrie codul care, dat fiind un număr n, iterează toate cifrele din număr şi le afişează, cifră cu cifră
Pas 2: pune-o să extindă codul de la Pas 1 aşa încât în loc de afişarea cifrei, să itereze un array a prealocat şi să insereze cifra c la poziţia i din array pentru care condiţia asta e adevărată: a[i-1] <= c && c < a[i+1] - mă rog, cu tratarea micii excepţii în care cifra c trebuie inserată la coadă, deoarece e cea mai mare (read: insertion sort, dacă a auzit de el, dar folosind doar partea online a algoritmului, dacă le-a spus ce e aia un "online algorithm"). PS: iterarea array-ului de la coadă la cap simplifică inserarea.

#7
DaFuQ

DaFuQ

    Junior Member

  • Grup: Members
  • Posts: 120
  • Înscris: 15.08.2013
Nu are voie cu array, deabia a invatat buclele while(), for() si if(), nu a invatat nici do while(). Problema cap-coada zice asa: Se citeste de la tastatura un numar n, sa i se afiseze toate cifrele distincte in ordine crescatoare. Exemplu: n=111329 , rezultatul=1239 . Pana acum a reusit sa aleaga cifrele distincte, dar sa le ordoneze nu stie, nici eu nu-mi dau seama cum as putea fara array.

Edited by DaFuQ, 13 October 2013 - 12:59.


#8
Gady_paul

Gady_paul

    Senior Member

  • Grup: Senior Members
  • Posts: 2,421
  • Înscris: 12.01.2008
Nu stie nici ce-i ala array, si tu vrei sa stie de algoritmi online, pe care oricum ma indoiesc ca va afla vreodata de la liceu? :)
@initiator: simplu si ineficient: cauti cifra maxima*, o stergi din numar, o adaugi la sfarsitul altui numar, initial 0, in care vei forma numarul sortat.

* sau minima, depinde cum vrei sa sortezi

#9
OriginalCopy

OriginalCopy

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

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Două bucle imbricate: iterează cifrele existente atunci {0,1,2,3,4,5,6,7,8,9}, şi în interior iterează cifrele numărului. Când se potrivesc, afişare + break.

View PostGady_paul, on 13 octombrie 2013 - 13:01, said:

Nu stie nici ce-i ala array, si tu vrei sa stie de algoritmi online, pe care oricum ma indoiesc ca va afla vreodata de la liceu? Posted Image
Nu a spus ce nu ştie. Nu sunt Samanta să citesc minţi. În mod normal, când înveţi for, înveţi la pachet şi array-uri ca platformă pe care să exersezi for. Nu cunosc programa şcolară românească.

View PostGady_paul, on 13 octombrie 2013 - 13:01, said:

@initiator: simplu si ineficient: cauti cifra maxima*, o stergi din numar, o adaugi la sfarsitul altui numar, initial 0, in care vei forma numarul sortat.
Îl va sări pe 0 aşa. Exerciţiul nu cere degeaba explicit "afişarea cifrelor" şi nu "generarea numărului care conţine cifrele".

#10
Heto

Heto

    Member

  • Grup: Members
  • Posts: 283
  • Înscris: 10.12.2012

View PostDaFuQ, on 12 octombrie 2013 - 20:58, said:

Salut, sora mea e pe clasa a 9-a si fiind incepatoare nu stie ce sunt aia vectori, array sau functii si are de facut o problema in care sa aranjeze cifrele unui numar in ordine crescatoare, stie doar buclele while(), if() si for().
Am incercat sa o ajut dar nu-mi iese nici mie, daca puteam folosi un array era mult mai usor, imi puteti da o idee?

... pentru surioara ta.
#include "stdafx.h"
using namespace std;
int main(){
int numar, i;
cout << "introdu numarul:" << endl;
cin >> numar;
for(i=0; i<10; i++){
  int val = numar;
  while(val>0){
   int cifra = val%10;
   val /= 10;
   if(i == cifra){
	cout << cifra;
	break;
   }
  }
}
cout << endl;
}


PS: vezi ca am pus iostream-ul unde ii e locul, adica in "stdafx.h".

Edited by Heto, 15 October 2013 - 10:10.


#11
poadol

poadol

    Guru Member

  • Grup: Senior Members
  • Posts: 14,104
  • Înscris: 13.12.2010
Pentru numere "mici" si numere mai lungi de 9 cifre:
//#include <iostream>

using namespace std;

int main(){
long int numar;
int i;
cout << "introdu numarul:" << endl;
cin >> numar;

for(i=0; i<10; i++){
long int val = numar;
while(val>0){
int cifra = val%10;
val /= 10;
if(i == cifra){
cout << cifra;
break;
}
}
}
cout << endl;
return 0;
}


Edited by poadol, 15 October 2013 - 10:39.


#12
Heto

Heto

    Member

  • Grup: Members
  • Posts: 283
  • Înscris: 10.12.2012

View Postpoadol, on 15 octombrie 2013 - 10:35, said:

Pentru numere "mici" si numere mai lungi de 9 cifre:
[CODE]


Bine ca esti tu destept... da-o-n spanac de treaba, diferenta reala dintre ce ai scris tu si ce am scris eu, pe windows(32-bit si 64-bit) si pe linux(32-bit) este 0. Daca vrei cifre atat de mari cat sa nu fie cuprinse intr-un int, atunci il declari ca sir de caractere, dar nu e cazul pentru ce avem noi aici.

Edited by Heto, 15 October 2013 - 11:43.


#13
DaFuQ

DaFuQ

    Junior Member

  • Grup: Members
  • Posts: 120
  • Înscris: 15.08.2013

View PostHeto, on 15 octombrie 2013 - 10:04, said:

... pentru surioara ta.

Iti multumeste mult, si eu deasemenea. Imi place cum ai gandit-o, eu ma complicam si nu-mi iesea nimic.

#14
poadol

poadol

    Guru Member

  • Grup: Senior Members
  • Posts: 14,104
  • Înscris: 13.12.2010

View PostHeto, on 15 octombrie 2013 - 11:30, said:

Bine ca esti tu destept... da-o-n spanac de treaba, diferenta reala dintre ce ai scris tu si ce am scris eu, pe windows(32-bit si 64-bit) si pe linux(32-bit) este 0. Daca vrei cifre atat de mari cat sa nu fie cuprinse intr-un int, atunci il declari ca sir de caractere, dar nu e cazul pentru ce avem noi aici.
In mod normal nu ai de ce sa fii suparat, deoarece meritul iti apartine,
plus ca a mea este doar o precizare (Posted Image nu este o corectie* cum gresit ai inteles Posted Image ). Este vina mea trebuia sa fiu cat mai explicit posibil, pentru intelegerea corecta a ceea ce am adaugat eu (necesar doar la numere mai mari de 9 cifre, care "mananca" mai multa memorie) la codul scris de tine.
CORECȚIE* - Corectare, îndreptare.

Edited by poadol, 15 October 2013 - 17:02.


#15
Heto

Heto

    Member

  • Grup: Members
  • Posts: 283
  • Înscris: 10.12.2012

View Postpoadol, on 15 octombrie 2013 - 16:53, said:

plus ca a mea este doar o precizare

si eu ti-am explicat ca nu e nicio precizare int-ul are 4 bytes, long-ul are 4 bytes. Asta pe orice Windows(32-bit si 64-bit) si pe orice linux(32-bit) pe linuxul de 64-bit apare diferenta. In rest mananca aceeasi memorie si acopera exact aceleasi numere. Macar de puneai unsigned int, aia era o precizare...

#16
OriginalCopy

OriginalCopy

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

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostHeto, on 15 octombrie 2013 - 10:04, said:

... pentru surioara ta.
Presupun că eşti străin de regulamentul ariei Programming.

Ai warn (de 0 puncte deocamdată, o consemnare formală mai mult, deoarece sper că te vei îndrepta).

Quote

Toate subiectele despre teme nu vor primi soluţii complete, funcţionale, la probleme, ci doar indicii în limba română şi/sau secvenţe de cod pe care creatorul topicului va trebui să le înţeleagă şi să le preia în propria sa soluţie

Vei citi şi de acum înainte vei respecta regulamentul ariei Programming.

View Postpoadol, on 15 octombrie 2013 - 10:35, said:

Pentru numere "mici" si numere mai lungi de 9 cifre:
Idem.

Anunturi

Bun venit pe Forumul Softpedia!

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