Afişează mesaje
|
Pagini: [1] 2
|
3
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Functiile
|
: Octombrie 15, 2013, 20:53:11
|
eu credeam ca face asa: dupa ce se executa Back(1), pana se intalneste cu Back(2)--> aici, nu se apeleaza din nou functia, si intr iara prin for(int i=1;i<=n;i++)...etc...Daca ar fii asa, pentru: 1 2 --> ar fii corect 2 1 --> nu ar fii corect, pentru ca: a[2]=2 , iar a[2]=2 ? asa imi da mie pe hartie, unde gresesc?Eu fac o greseala undeva, unde mi se duce tot algoritmu )
|
|
|
5
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Functiile
|
: Octombrie 14, 2013, 19:02:36
|
am inteles,codul normal:
#include<iostream> using namespace std; int a[20], n, viz[20]; void PrintSol() { int i; for (i = 1; i <= n; i++) { cout << a[ i ]<< " "; } cout << "\n"; cout<<endl; } void Back(int top) { int i; if (top == n + 1) PrintSol(); else for (i = 1; i <=n; i++) if (viz[ i ]==0) { viz[ i ] = 1; a[top] = i; Back(top + 1); viz[ i ] = 0; } } int main() { cout << "n = "; cin >> n; Back(1); system("pause"); return 0; }
acum este ok ? pentru n=2: imi apare: 1 2 2 1 si nu inteleg cum s-a ajuns la rezultate, am o carte ce nu explica prea bine functiile.Daca ma puteti ajuta.
|
|
|
7
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Functiile
|
: Octombrie 14, 2013, 14:02:08
|
am inteles, dar nu inteleg asta: de ex: cand incepe for-ul: for(i=1;i<=n;i++) , pentru i=1 , se executa programul si cand ajunge la: back(top+1) nu se apeleaza din nou functia de la inceput ? sau se activeaza DUPA ce se termina for-ul ?Si cand se apeleaza functia print(); --> afiseaza rezultatele, si dupaia cum face sa revina la functia asta back() , pentru a continua Combinarile(ex: n=2 , 1 2 si 2 1)
|
|
|
8
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Functiile
|
: Octombrie 14, 2013, 12:52:05
|
Salut, si imi cer scuze pentru acest topic(dar nu inteleg o problema) Metoda Backtracking:
presupunem: n=2
#include<iostream> using namespace std; int a[20], n, viz[20]; void PrintSol() { int i; for (i = 1; i <= n; i++) { cout << a << " "; } cout << "\n"; cout<<endl; } void Back(int top) { int i; if (top == n + 1) PrintSol(); else for (i = 1; i <=n; i++) if (viz==0) { viz = 1; a[top] = i; Back(top + 1); // aici: pentru i=1, top va deveni 2,pentru i=2, top va deveni 3, si se activeaza din nou functia Back(), nu? Eu nu inteleg, a[1]=1,a[2]=2 corect ? dupaia se activeaza PrintSol(), si imi afiseaza 1 2, dar dupaia nu se opreste functiile(ambele)?Cum face din nou sa imi apare si 2 1 ? Nu pot intelege, si profesorul de Informatica nu stie pe ce "planeta este" a spus ca el a terminat matematica(nu stie chestii dinastea).Multumesc viz = 0; } } int main() { cout << "n = "; cin >> n; cout<<"da ce plm"<<endl; Back(1); system("pause"); return 0; }
|
|
|
10
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: numere pare
|
: Octombrie 12, 2013, 19:50:34
|
Am scris urmatorul cod:
#include<iostream> #define Max 100 int S[Max]; int S1[Max]; using namespace std; int main() { int v[100],v1[100],i,n,dim,dim1; cout<<"n="; cin>>n; for(i=1;i<=n;i++) { cin>>v; if(v%2==0) { S[++dim]=v; } else S1[++dim1]=v; } cout<<endl; while(dim!=0) { cout<<S[dim--]<<endl; } cout<<endl; while(dim1!=0) { cout<<S1[dim1--]<<endl; } system("pause"); return 0; }
pentru: n=4, respectiv: 1,2,3,4, imi afiseaza, pare:4 2 si impare: 3 1 0.De ce imi apare 0 ?Multumesc
|
|
|
14
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / numere pare
|
: Octombrie 11, 2013, 21:44:52
|
Salut, am revenit cu o problema ce nu o gasesc pe internet si nici in cartea de informatica, eu vreau urmatoarele: Sa se dea un sir de numere, si sa se ordoneze crescator numerele pare.Eu am gasit numerele pare, dar nu stiu cum sa le fac sa le ordonez crescator, ma poate ajuta cineva.Multumesc.
|
|
|
21
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Problema Stiva - C++
|
: Octombrie 04, 2013, 14:33:25
|
Am incercat sa rezolv o problema cu stive, dar nu-mi iasa, adica nu stiu cum sa citesc aceste stive sa apara de la stanga la dreapta, problema spune asa:
Marele savant Lotocus a inventat dispozitivul din imaginea de mai jos, care functioneaza astfel: • initial cele n bile, numerotate de la 1 la n, sunt asezate în zona A, într-o ordine oarecare; • prin apasarea butonului identificat prin litera I prima bila din zona A cade în zona B; • prin apasarea butonului identificat prin litera O prima bila din zona B urca în zona C.
Cerinta Deoarece onorabilul savant spera sa-si vânda inventia unei loterii, ajutati-l scriind un program care sa indice ordinea în care trebuie apasate cele doua butoane astfel încât plecând de la o configuratie initiala a bilelor în zona A sa se obtina o anumita configuratie a lor în zona C (ceea ce va dovedi importanta extraordinara a masinariei!). Date de intrare Fisierul de intrare bile.in are urmatoarea structura: • pe prima linie valoarea numarului natural nenul n; • pe a doua linie n numere naturale nenule, separate prin spatii, reprezentând configuratia initiala a bilelor în zona A, specificate in ordine de la stanga la dreapta; ... 3 9 8 10 prof. Lucia Miron, C. N. "C. Negruzzi" 2 • pe a treia linie n numere naturale nenule, separate prin spatii, reprezentând configuratia finala la care trebuie sa ajunga bilele în zona C, specificate in ordine de la stanga la dreapta. Date de iesire Prima linie a fisierului bile.out va contine o singura linie pe care va fi scris un sir format numai din literele I si O reprezentând ordinea în care trebuie apasate cele doua butoane astfel încât plecând de la configuratia initiala sa se obtina configuratia finala sau mesajul imposibil daca nu se poate realiza acest lucru. Restrictii 1 <= n <= 2000 Ex:
bile.in 5 5 4 2 1 3 2 4 1 5 3 bile.out IIIOOIOOIO
Nu inteleg, nu gasesc deloc carti(am incercat si la biblioteca) despre probleme cu stive si cozi(si rezolvarea lor) ma puteti ajuta ?
|
|
|
25
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Problema Stiva - C++
|
: Octombrie 01, 2013, 15:49:07
|
Salut, am inceput sa studiez stivele, dar nu inteleg o chestie.In carte este explicat asa:
Inserarea unui element în stivă Pentru a insera un element x în stiva S trebuie să verificăm în primul rând dacă „avem loc”, deci dacă stiva nu este plină. Dacă stiva este plină, inserarea nu se poate face, altfel vom mări vârful stivei şi vom plasa la vârf noul element.
Iar Codul:
#define DimMax 18 //numarul maxim de elemente din stiva typedef int Stiva[DimMax]; //tipul Stiva implementat ca vector Stiva S; //stiva int vf; //varful stivei
if (vf == DimMax-1) //stiva este plina cout<<"Eroare - stiva este plina\n"; else //inseram elementul x in stiva S S[++vf] = x;
daca presupunem: x=3 si DimMax=18(Dimensiunea maxima a stivei).Nu pot intelege ce se intampla in if acolo ? if(vf==DimMax-1)..verifica daca ultimul element al stivei este egal cu DimMax-1? Nu inteleg...ma puteti ajuta?
|
|
|
|