Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Problema structuri Cls a 10 a  (Citit de 4557 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
snkdarian
Strain


Karma: -15
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« : Decembrie 12, 2012, 18:02:36 »

Buna , am nevoie de o idee , cum sa fac urmatorul program :
"Se citeste de la tastatura o data calendaristica exprimata in zi , luna si an . Se mai citeste si un numar n. Sa se afiseze data care va fi peste n zile . ( Indicatie: se va folosi un vector cu 12 elemente in are se va memora in fiecare element numarul de zile din luna corespunzatoare pozitiei din vector , prima luna fiind ianuarie. ) "

Multumesc , astept idei cat mai repede.
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #1 : Decembrie 12, 2012, 21:21:45 »

Pai sa presupunem ca ai vectorul v[ i] = cate zile are a i-a luna (ianuarie, februarie ....). Folosind acest vector, problema e simpla. Stim in ce zi, luna si an suntem. Cel mai usor, fara sa te stresezi (nu e prea optim, dar fiindca n-ul e destul de mic cred, nu se simte), faci asa : faci un for de la 1 la n, reprezentand data dupa i zile. Astfel, la pasul i, prima data incrementezi pe zi, si apoi verifici odata daca zi > v[luna] (daca a i-a zi a lunii in care suntem este mai mare decat limita maxima a acelei zile), atunci pe zi il faci 1 si incrementezi luna (pentru ca tu de fapt esti in ziua v[luna] + 1, care nu exista si este de fapt ziua 1 a urmatoarei luni. Mai departe, verifici daca luna este 13 (acelasi principiu, luna 13 nu exista, si atunci ea de fapt este luna 1 a urmatorului an), faci pe luna = 1 si incrementezi an. Si inca ceva, daca cumva este an bisect, adica este multiplu de 4, atunci v[2] (luna februarie) are 29 zile.
Cod:
int v[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // vectorul v, incepand de la 1
if (an % 4 == 0) // an bisect
    v[2] = 29;
for i = 1, n {
    if (zi == v[luna] + 1) // sau zi > v[luna]
        zi = 1, luna++; // luna urmatoare
    if (luna == 13) {
        luna = 1, an++; // anul urmator
        if (an % 4 == 0) // an bisect
            v[2] = 29;
        else v[2] = 28; // ne-bisect
    }
}
Memorat
snkdarian
Strain


Karma: -15
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #2 : Decembrie 12, 2012, 21:27:20 »

Eu ma gandeam la ceva de genul acesta .

Citat
#include<iostream.h>
void main()
{
struct data
{int zi,an,luna;
};
data n;
int v[12],i,m;
cout<<"ziua:";cin>>n.zi;
cout<<"luna:";cin>>n.luna;
cout<<"anul:";cin>>n.an;
for(i=1;i<=12;i++)
{
cout<<"nr de zile:";cin>>v;
};
cout<<"nr citit:";cin>>m;
if(m+n.zi>v[n.luna])
{n.zi=n.zi+m-v[n.luna];
if(n.luna==12)
{n.luna=1;
n.an++;};
else
n.luna++;
};
else
n.zi=n.zi+m;
cout<<"ziua"<<n.zi<<"luna"<<n.luna<<"anul"<<n.an;}

dar imi da doua erori . daca ma poti ajuta .
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #3 : Decembrie 12, 2012, 21:46:22 »

Ti-am modificat niste ; inainte de else prost puse si cate ceva, am adaugat faza pt. anul bisect, ar trebuie sa mearga DOAR DACA m este < nr. maxim de zile intr-un an, adica 365. (daca e mai mult, atunci intervine faza cu anul bisect, si n-o sa mearga).
Cod:
# include <iostream>
using namespace std;

int main() {
    struct data {
        int zi,an,luna;
    };
    data n;
    int v[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},i,m;
    cout<<"ziua:";
    cin>>n.zi;
    cout<<"luna:";
    cin>>n.luna;
    cout<<"anul:";
    cin>>n.an;
    /*for(i=1; i<=12; i++) {
        cout<<"nr de zile:";
        cin>>v[i];
    };*/

    cout<<"nr citit:";
    cin>>m;
    if (n.an % 4 == 0) // an bisect
        v[2] = 29;
    if(m+n.zi>v[n.luna]) {
        n.zi=n.zi+m-v[n.luna];
        if(n.luna==12) {
            n.luna=1;
            n.an++;
            if (n.an % 4 == 0) // an bisect
                v[2] = 29;
            else v[2] = 28;
        } else
            n.luna++;
    } else
        n.zi=n.zi+m;
    cout<<"ziua "<<n.zi<<" luna "<<n.luna<<" anul "<<n.an;
}
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines