Afişează mesaje
Pagini: [1] 2
1  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Ajutor program inserare '?' dupa fiecare aparitie a unui cuvant intrun sir : Iunie 21, 2014, 23:17:12
nu faci bine compararea

Cod:
int main()
{
    int i,n,rez,ok=1,j,w,pi=0,poz;
    char s[100],v[]="aeiou",s2[16];
    cin.get(s,100);
    cin.get();
    cin.get(s2,16);
    n=strlen(s)-1;
    for(i=0;i<=n;i++)//parcurg sirul
        {
          if(s[i]!=' ')//parcurg sirul pana intalnesc spatiu
          {
              j=0;
              while(s[i]==s2[j])
              {i++;
              j++;
              }
                    if(j==strlen(s2))
                    {
                        inserare(s,n,'?',i);
                        i=i++;//stiind ca exista un singur spatiu intre fiecare cuvant sar 2 pozitii si ajung pe prima litera a cuvantului urmator
                    }
           }
          else if(ok==1)//memorez prima litera a cuvantului
          {
              pi=i;
              ok=0;
          }
        }
    for(i=0;i<=n;i++) cout<<s[i];
    return 0;
}
2  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Ajutor program dublare vocale : Iunie 20, 2014, 22:36:57
dupa ce ai apelat functia inserare trebuie sa maresti i-ul ca sa sara peste dublura
3  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Problema sir de numere : Iunie 18, 2014, 11:33:35
Nu trebuie neaparat sa memorezi toate numerele intr-un vector si apoi sa cauti.

Cod:
int main()
{
 ifstream f("BAC.txt");
 int penultim,ultim,nr,poz_p=0,poz_u=0,poz=0;
 f>>nr;
 while(nr%2==0) {  //cauta primul numar impar
    f>>nr;
    poz++;
  }
 penultim=nr;  // memoreaza primul numar impar
 poz_p=poz;  // memoreaza pozitia
 f>>nr;
 poz++;
 while(nr%2==0) { // cauta al doilea numar impar
   f>>nr;
   poz++;
}
ultim=nr;  // memoreaza al doilea numar impar
poz_u=poz; // memoreaza pozitia
 for( ;poz<10000;poz++)  //cauta dupa alte numere impare
 { f>>nr;                     
   if(nr%2==1)
   {penultim=ultim;
   poz_p=poz_u;
   poz_u=poz;
   ultim=nr;     
  }
 }
 cout<<penultim<<"  "<<poz_p;
}
4  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Sudoku : Mai 13, 2014, 15:00:32
ok... nu m-am uitat eu bine pe cod. ai putea sa verifici daca se poate pune acea cifra si in alte casute din acel patratel de 3x3 si daca nu atunci o pui, altfel treci la urmatoarea...
5  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Sudoku : Mai 13, 2014, 11:42:13
Nu stiu cat de bine merge ideea ta dar am vazut ca mai folosesti de doua ori for(i=...),for(j=...) in for-urile care folosesc tot i si j. cand iasa din for-urile alea doua, i si j au valoare 10 si nu mai intra in for-urile mari.

si nu cred ca e buna ideea fiindca nu tot timpul primul numar care intra intr-o casuta ii bun...
6  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: prob info : Mai 10, 2014, 17:07:16
http://info.mcip.ro/?cap=Algoritmi%20elementari&prob=237
7  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Cum citesc spatiile de pe o linie? : Aprilie 16, 2014, 13:22:58
Daca folosesti Codeblocks incearca asta:
Stettings->Editor->General Settings si la End-of-line options debifeaza Strip trailing blanks
8  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: De la x la y : Martie 18, 2014, 20:50:52
nu imi prea place metoda folosita de time dar uite codul:
Cod:
#include <iostream>

using namespace std;

int main(){
    int o,m,s,o2,m2,s2,p2,p,d,nr=0,nr2=0,g=0,g1=0;
    cin>>o>>m>>s>>o2>>m2>>s2;
    o=o*3600;
    m=m*60;
    p=o+m+s;
    o2=o2*3600;
    m2=m2*60;
    p2=o2+m2+s2;
   
    if(p2>p){
        d=p2-p;
        if(d>=60){   
           while(d!=0){
              d--;
              nr++;
              if(nr==60){//asa se verifica o egalitate
                  g++;
                  nr=0;
              }
            }
        }
        if(g>=60){
            while(g!=0){
                g--;
                nr2++;
                if(nr2==60){//asa se verifica o egalitate
                    g1++;
                    nr2=0; //resetezi minutele
                }
            }
        }
        else
            g1=0;

    }
   
    cout<<g1<<" "<<nr2<<" "<<nr;
    return 0;
}


Incearca pe viitor sa ai mai organizat codul fiindca la felul cum l-ai scris tu e o durere de cap ca sa inteleaga cineva ce faci.

uite alta metoda de a transforma secundele in ore si minute:
Cod:
#include <iostream>

using namespace std;

int main()
{   int o,m,s,o2,m2,s2,p2,p,d,nr=0,nr2=0,g=0,g1=0;
    cin>>o>>m>>s>>o2>>m2>>s2;
    o=o*3600; m=m*60; p=o+m+s;
    o2=o2*3600; m2=m2*60; p2=o2+m2+s2;
    if(p2>p){
        d=p2-p;
        g1=d/3600;
        d=d%3600;
        g=d/60;
        d=d%60;
    }
cout<<g1<<" "<<g<<" "<<d;
return 0;
}
9  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Metoda backtracking : Februarie 25, 2014, 22:36:17
mi-e greu sa imi dau seama cum faci...
uite o varianta mai simpla:
Cod:
#include<iostream>
#include<math.h>
using namespace std;
long n,x[25],v[4];

int prim(long long nr)
{
    long d;
    for(d=2;d<sqrt(nr);d++)
        if(nr%d==0)
        return 0;
    return 1;
}
int sol (int k)
{
    long long nr=0;
    int i;
    nr=x[1];
    for(i=2;i<=k;i++)
      {nr*=10;
      nr+=x[i];
      }
    if(prim(nr))
        return 1;
    return 0;
}
void print (int i)
{
    int l;
    for (l = 1; l <= i; l++)
        cout<<x[l];
        cout<<endl;

}
void back (int k)
{
    int j;
    for (j = 1; j <= 3; j++)
    {
            x[k] = v[j];
            if(k==n)
            {if(sol(k))
            {
                print(k);
            }}
            else
            back(k+1);
    }
}
int main()
{
  cout<<"n=";cin>>n;
  cout<<"c1=";cin>>v[1];
  cout<<"c2=";cin>>v[2];
  cout<<"c3=";cin>>v[3];

  back(1);
    return 0;
}
10  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Grafica in C++ : Februarie 18, 2014, 22:30:51
am incercat eu mai demult sa fac snake in C, uite ce mi-a iesit:
Cod:
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
char *a[23];
int s[2][200],head,tail;
int i,j,direction=2,score=0,diff;

void print()
{
    for(i=0;i<22;i++)
        printf("%s\n",a[i]);
    printf("SCORE: %i",score);

}
void init_edges()
{
    for(i=0;i<22;i++)
        a[i][0]=a[i][78]='*';
    for(j=0;j<78;j++)
        a[0][j]=a[21][j]='*';
}
void init()
{
    for(i=0;i<22;i++){
        for(j=0;j<78;j++)
            a[i][j]=' ';
            a[i][79]='\0';
     }
}
int main(){
    int ch1, ch2, t, l=10,k=10,ok=1,tl=10,tk=5,fx,fy,fok=1;
    for(i=0;i<22;i++)
        a[i]=(char *)malloc(79*sizeof(char));
    init();
    init_edges();
    head=0;
    for(i=tk+1;i<=k;i++){
            a[l][i]='o';
            s[0][head]=l;
            s[1][head]=i;
            head++;
    }
    tail=0;
    srand(time(NULL));
    fx = rand()%21;
    fy = rand()%77;
    ok=1;
    while(fx==0||fy==0||a[fx][fy]!=' '){
       fx = rand()%21;
       fy = rand()%77;
    }
    a[fx][fy]='@';
    printf("Select difficulty:\n1-EASY\n2-MEDIUM\n3-HARD\n4-VERRY HARD\n5-EXTREME\n");
    scanf("%i",&diff);
    diff=200/(diff*diff);
    while(ok){
        while (!kbhit()){
            Sleep(diff);
            system("cls");
            print();
            a[l][k]='o';
            if(direction==1){
                l--;
                if(l==0)
                    ok=0;
            }
            else if(direction==2){
                k++;
                if(k==78)
                    ok=0;
            }
            else if(direction==3){
                l++;
                if(l==21)
                    ok=0;
            }
            else if(direction==4){
                k--;
                if(k==0)
                    ok=0;
            }
            if(a[l][k]=='o')
                ok=0;
            else if(a[l][k]=='@'){
                fx = rand()%21;
                fy = rand()%77;
                ok=1;
                while(fx<2||fy<2||a[fx][fy]!=' '){
                    fx = rand()%20;
                    fy = rand()%76;
                }
                a[fx][fy]='@';
                score++;
            }
            else{
                a[s[0][tail]][s[1][tail]]=' ';
                tail++;
                if(tail==199)
                tail=0;
            }
            a[l][k]='x';
            s[0][head]=l;
            s[1][head]=k;
            head++;
            if(head==199)
                head=0;
            if(ok==0)
                break;
        }
        if(ok){
            ch1=getch();
            ch2 = 0;
            if (ch1 == 0xE0&&ok) {
                ch2 = getch();
                switch(ch2){
                    case 72: {if(direction!=3)direction=1;//printf("UP\n");
                        break;}
                    case 80: {if(direction!=1)direction=3;//printf("DOWN\n");
                        break;}
                    case 75: {if(direction!=2)direction=4;//printf("LEFT\n");
                        break;}
                    case 77: {if(direction!=4)direction=2;//printf("RIGHT\n");
                        break;}
                default:break;
                }
            }
        }
    }
    printf("\nGAME OVER!");
    getchar();
    getchar();
    return 0;
}
11  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: if(!x) : Ianuarie 16, 2014, 00:01:16
daca x este diferit de 0 atunci !x este 0 (adica fals) si nu intra in functia if
daca x este 0 atunci !x este 1(adica adevarat) si intra in functia if
12  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: alocare dinamica : Ianuarie 15, 2014, 11:09:22
unde ai *(*(p+i)+j) scrie *(*(p+j)+i)
13  infoarena - concursuri, probleme, evaluator, articole / Teme / Răspuns: Problema divizibilitate : Ianuarie 09, 2014, 23:43:46
iti spun doar la problema 2:

 natural a,d
    citeste a   //citesti doar numarul
      Pentru (d<-2,a div 2,1) executa  // d il folosesti pentru parcurgerea tuturor numerelor de la 2 pana la a div 2
          inceput
          daca (a mod d=0) atunci   //daca a se imparte exact la d atunci d ii un divizor
              scrie d
          sfarsit
14  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Problema algoritm : Ianuarie 06, 2014, 18:39:01
secventa poate contine numerele 10,x,y,z,  cu x>=10,y>=10,z>=10, sau orice combinatie de aceste numere daca am inteles bine problema
15  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Problema pseudocod divizibilitate : Decembrie 15, 2013, 14:11:23
Cod:
natural n,i
   citeste n
    i<-0
   cat timp (i<= n) executa
     inceput
      daca i(divizibil)3 atunci
                 scrie i
      i<-i+1
     sfarsit
16  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Deschidere fisier out : Decembrie 12, 2013, 23:39:41
f.open("date.txt",ios::out)
17  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Verificare existenta nr in sir. : Decembrie 09, 2013, 14:10:22
Pseudocodul genereaza sirul 1,3,5,11,21,43,... , deci de la tastatura se citeste doar n, care ii lungimea sirului, x si y, numerele care trebuie cautate in sir. Se poate verifica si fara a memora sirul intr-un vector.
Cod:
int main()
{
    int n,A,B,C,x,y,i;
    int ok=0;
    cin>>n;
    cin>>x>>y;
    A=1;
    B=3;
    if(x==A||x==B)
       ok++;
    if(y==A||y==B)
       ok++;
    for(i=1;i<=n-2;i++){
       C=A*2+B;
       A=B;
       B=C;
       if(x==B)
         ok++;
       if(y==B)
        ok++;
   }
   if(ok==2)
    cout<<"DA";
   else
    cout<<"NU";

    return 0;
}
18  infoarena - concursuri, probleme, evaluator, articole / Arhiva Infoarena Monthly / Răspuns: 004 Diagonale : Decembrie 06, 2013, 16:28:26
initializeaza  maxp si maxs cu 12 zerouri, adica -1000000000000
19  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Triunghiul numerelor,sa se afle pozitia numarului citit. : Decembrie 05, 2013, 12:23:59
Salut,

Daca observi ultimul numar de pe fiecare linie n e suma de la 1 pana la n, suma se poate afla asa s=n(n+1)/2. Sa zicem ca x este numarul citit deci el se afla pe linia n daca n(n+1)/2=x adica n(n+1)-2x=0. Din aceasta ecuatie necunoscuta este n deci o sa ai doua solutii n1=(sqrt(1+8x)-1)/2 si n2=(-sqrt(1+8x)-1)/2, a doua este negativa deci nu este buna. n trebuie sa fie intreg deci scrii n=(int)(sqrt(1+8x)-1)/2.
Rotunjirea se face la n-1 deci mai trebuie sa adaugi 1 la n, adica n=(int)(sqrt(1+8x)-1)/2+1. Mai este o problema cand radicalul poate fi numar intreg deci nu se mai face rotunjirea la n-1, ca sa rezolvi si asta verifici daca (int)sqrt(1+8*n)==sqrt(1+8*n) si daca e adevarata scazi 1 din n. Mai ramane sa afisezi n.

Sper ca ai inteles. Codul il scrii si tu ca nu e mult.
20  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Dintr-o baza in alta : Noiembrie 20, 2013, 22:53:50
daca stii recursivitate poti face asa:
Cod:
#include <iostream>
using namespace std;

void binar(int n)
{
    if(n/2!=0)
        binar(n/2);
      cout<<n%2<<" ";

}
int main()
{
 int n;
 cin>>n;
 binar(n);
}
21  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Structura elev : Noiembrie 08, 2013, 22:27:27
Ca sa memorezi datele de la mai multi elevi, trebuie ca variabila elev sa fie de tablou unidimensoinal.

Asa ar trebui sa mearga:

Cod:
#include <iostream>
using namespace std;
struct {
 char nume[20],prenume[20];
 int clasa,varsta;}elev[20];
int main()
{int i,n;
cin>>n;
for(i=0;i<n;i++){
 cout<<"nume elev";
cin>>elev[i].nume;
cout<<"prenume elev";
cin>>elev[i].prenume;
cout<<"clasa elev";
cin>>elev[i].clasa;
cout<<"varsta";
cin>>elev[i].varsta;}
for(i=0;i<n;i++)
cout<<elev[i].nume<<endl<<elev[i].prenume<<endl<<elev[i].clasa<<endl<<elev[i].varsta<<endl;}
22  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Tablou unidimensional : Noiembrie 08, 2013, 22:20:04
Cod:
#include <iostream>
using namespace std;
int main()
{
 int M[100],N[100],n,i;
  int ok=0;  
cin>>n;
 for(i=0;i<n;i++)
 {cout<<"M["<<i<<"]=";
 cin>>M[i];}
 for(i=0;i<n;i++)
 {cout<<"N["<<i<<"]=";
 cin>>N[i];}
 for(i=0;i<n;i++)
 if(M[i]<=N[i])
    ok++;       //numara daca toate elementele din M sunt mai mari ca elementele din N
  if(ok==n)    
   cout<<"M<N"<<endl;
else
   if(ok==0)
   cout<<"M>N"<<endl;
}
23  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Cat mai multe zecimale ;) : Noiembrie 07, 2013, 21:59:13
Ai putea folosi functia setprecision(nr), nr fiind numarul de cifre(inainte si dupa virgula) cu cate vrei sa fie afisat numarul.

Ex:
 cout<<setprecision(10)<<(sqrt(5)+1)/2;

Ca sa o poti folosi, trebuie sa introduci libraria <iomanip>


24  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Citire din fisier( siruri) : Noiembrie 05, 2013, 20:47:28
char sir[100];

f.get(sir,100);
25  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: cum public ? : Octombrie 29, 2013, 14:31:28
http://www.infoarena.ro/documentatie/tutorial
Pagini: [1] 2
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines