Pereiti prie turinio

c++ uzduotis


Rekomenduojami pranešimai

Pataisiau šiek tiek tavo kodą ir perrašiau naujai išlyginimo funkciją. Jei kils neaiškumų kas kaip veikia klausk :)

#include <iostream>
#include <fstream>

using namespace std;

const char duomenys[] = "duomenys.txt";
const char rezultatai[] = "rezultatai.txt";
const int Cmax = 53;

void skaityti(int A[][Cmax], int & e, int & s);
void spausdinti(int A[][Cmax], int e, int s);
void islyginta(int A[][Cmax], int B[][Cmax], int e, int s);

int main() {
   int K[Cmax][Cmax], islygintas[Cmax][Cmax], e, s;
   int isl;
   skaityti(K, e, s);
   islyginta(K, islygintas, e, s);
   spausdinti(islygintas, e ,s);

   return 0;
}

void skaityti(int A[][Cmax], int & e, int & s) {
   //Nusinulinam masyva
   for(int i = 0; i < Cmax; ++i)
       for(int j = 0; j < Cmax; ++j)
           A[i][j] = 0;

   ifstream duom(duomenys);
   duom >> e >> s;
   for(int x = 0; x < e; x++) {
       for(int y = 1; y <= s; y++) {
           duom >> A[x][y];

       }
   }
   duom.close();
}

void spausdinti(int A[][Cmax], int e, int s) {
   ofstream rez(rezultatai);
   for(int i = 0; i < e; ++i) {
       for(int j = 1; j <= s; ++j)
           rez << A[i][j] << " ";
       rez << endl;
   }

   rez.close();
}

void islyginta(int A[][Cmax], int B[][Cmax], int e, int s) {
   for(int i = 0; i < e; ++i)
       for(int j = 1; j <= s; ++j) {
           int div = 3;

           if(j == 1 || j == s)//Jei krastinis elementas dalinsim is 2 ne is 3
               div = 2;

           B[i][j] = (A[i][j-1] + A[i][j] + A[i][j + 1])/div;
       }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pataisiau šiek tiek tavo kodą ir perrašiau naujai išlyginimo funkciją. Jei kils neaiškumų kas kaip veikia klausk :)

#include <iostream>
#include <fstream>

using namespace std;

const char duomenys[] = "duomenys.txt";
const char rezultatai[] = "rezultatai.txt";
const int Cmax = 53;

void skaityti(int A[][Cmax], int & e, int & s);
void spausdinti(int A[][Cmax], int e, int s);
void islyginta(int A[][Cmax], int B[][Cmax], int e, int s);

int main() {
   int K[Cmax][Cmax], islygintas[Cmax][Cmax], e, s;
   int isl;
   skaityti(K, e, s);
   islyginta(K, islygintas, e, s);
   spausdinti(islygintas, e ,s);

   return 0;
}

void skaityti(int A[][Cmax], int & e, int & s) {
   //Nusinulinam masyva
   for(int i = 0; i < Cmax; ++i)
       for(int j = 0; j < Cmax; ++j)
           A[i][j] = 0;

   ifstream duom(duomenys);
   duom >> e >> s;
   for(int x = 0; x < e; x++) {
       for(int y = 1; y <= s; y++) {
           duom >> A[x][y];

       }
   }
   duom.close();
}

void spausdinti(int A[][Cmax], int e, int s) {
   ofstream rez(rezultatai);
   for(int i = 0; i < e; ++i) {
       for(int j = 1; j <= s; ++j)
           rez << A[i][j] << " ";
       rez << endl;
   }

   rez.close();
}

void islyginta(int A[][Cmax], int B[][Cmax], int e, int s) {
   for(int i = 0; i < e; ++i)
       for(int j = 1; j <= s; ++j) {
           int div = 3;

           if(j == 1 || j == s)//Jei krastinis elementas dalinsim is 2 ne is 3
               div = 2;

           B[i][j] = (A[i][j-1] + A[i][j] + A[i][j + 1])/div;
       }
}

 

 

dekui, kad padedi. as ir panasei masciau, bet nemokejau dvigubo masyvo.

nesupratau kodel Cmax 53 ir kam jis isvis reikalingas, taipat kam reikalingas nusinulinimas?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

dekui, kad padedi. as ir panasei masciau, bet nemokejau dvigubo masyvo.

nesupratau kodel Cmax 53 ir kam jis isvis reikalingas, taipat kam reikalingas nusinulinimas?

 

Jei atkreipei dėmesį į masyvą metu nuo 1 elemento, o ne nuo nulinio. Šitaip šiek tiek paprasčiau kraštinius atvejus išnagrinėti (nors aišku gali du ifus pasirašyt). Nusinulinimas tuomet reikalingas, nes skaičiuojant vidurkį imu 0 ir n + 1 elementą, o jų reikšmės turi būti nuliai.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

uzduotis

 

manau ten turi buti while finkcija, bet neiseina issprest.gal padesit?

 

#include <iostream>
#include <fstream>
using namespace std;

const char duomenys[] = "duomenys.txt";
const char rezultatai[] = "rezultatai.txt";
const int Cmax = 10;

void skaityti(int A[], int & n);
void spausdinti(int A[], int n);
void perdavimas(int A[], int B[], int n);

int main()
{
   int Ak[Cmax]; int Bk[Cmax]; int i;

   skaityti(Ak, i);
   spausdinti(Ak, i);
   perdavimas(Ak, Bk, i);

   return 0;
}

void skaityti(int A[], int & n){
   ifstream duom(duomenys);
   duom >> n;
   for(int x = 0; x < n; x++)
       duom >> A[x];

   duom.close();
}

void spausdinti(int A[], int n){
   ofstream rez(rezultatai);
       for(int y = 0; y < n; y++)

   rez.close();
}

void perdavimas(int A[], int B[], int n){
   int a = 0;
   int b;
   for(int y= 0; y < n; y++){
       while(A[] == 0 || )


       }



}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

nepades niekas?

 

Turėjau padaręs šią užduotį, tai pasidalinsiu.

 

//Akmenukai

#include <fstream>
#include <iomanip>

using namespace std;

const char D[] = "Duomenys.txt";
const char R[] = "Rezultatas.txt";
const int MMax = 10;

void Skaitymas(int A[], int & n);
void Dalijimas(int A[], int n);
void Spausdinimas(int A[], int n);

int main()
{
   int A[MMax], n; //A[] - Vaiko turimų akmenukų masyvas, n - vaikų skaičius

   Skaitymas(A, n);
   Dalijimas(A, n);
   Spausdinimas(A, n);

   return 0;
}

//Perskaito duomenis į masyvą
void Skaitymas(int A[], int & n)
{
    ifstream Df(D);
    Df >> n;

    for (int i = 0; i < n; i++) {
        Df >> A[i];
    }
    Df.close();
}

//Padalija vaikams akmenukus
void Dalijimas(int A[], int n)
{
    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) { //Dalindamas akmenukus vaikas eina į dešinę
            if (A[i] != 0) {            //jei turi akmenukų
                     A[j] += 1;
                     A[i] -= 1;
            }
        }
        for (int k = n-1; k > i; k--) { //Dalindamas akmenukus vaikas grįžta į savo vietą
            if (A[i] != 0) {            //jei turi akmenukų
                     A[k] += 1;
                     A[i] -= 1;
            }
        }
    }
}

//Spausdina rezultatą     
void Spausdinimas(int A[], int n)
{
    ofstream Rf(R);
    for (int i = 0; i < n; i++){
        Rf << A[i] << " ";
    }
    Rf.close();
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kaip padaryti, kad is failo nuskaitytu skaicius, pavyzdziui, 1 2 3 4 5 6 ir juos perrasytu i rezultatu faila atvirskcia eigai, tai yra, 6 5 4 3 2 1. Cia man reikia tai padaryti su funkcijos prototiu int Atvk(int n)

isikelk skaicius i masyva su for ciklu, tada parasyk masyva taip pat su for(int x=0; x > (kiekskaiciu); x--)

 

(kaip matai vietoj x++ yra x-- tai yra mazejimo tvarka, bei pakeistas zenklas < i zenkla >)

Redagavo arvyda5
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Turėjau padaręs šią užduotį, tai pasidalinsiu.

 

//Akmenukai

#include <fstream>
#include <iomanip>

using namespace std;

const char D[] = "Duomenys.txt";
const char R[] = "Rezultatas.txt";
const int MMax = 10;

void Skaitymas(int A[], int & n);
void Dalijimas(int A[], int n);
void Spausdinimas(int A[], int n);

int main()
{
   int A[MMax], n; //A[] - Vaiko turimų akmenukų masyvas, n - vaikų skaičius

   Skaitymas(A, n);
   Dalijimas(A, n);
   Spausdinimas(A, n);

   return 0;
}

//Perskaito duomenis į masyvą
void Skaitymas(int A[], int & n)
{
    ifstream Df(D);
    Df >> n;

    for (int i = 0; i < n; i++) {
        Df >> A[i];
    }
    Df.close();
}

//Padalija vaikams akmenukus
void Dalijimas(int A[], int n)
{
    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) { //Dalindamas akmenukus vaikas eina į dešinę
            if (A[i] != 0) {            //jei turi akmenukų
                     A[j] += 1;
                     A[i] -= 1;
            }
        }
        for (int k = n-1; k > i; k--) { //Dalindamas akmenukus vaikas grįžta į savo vietą
            if (A[i] != 0) {            //jei turi akmenukų
                     A[k] += 1;
                     A[i] -= 1;
            }
        }
    }
}

//Spausdina rezultatą     
void Spausdinimas(int A[], int n)
{
    ofstream Rf(R);
    for (int i = 0; i < n; i++){
        Rf << A[i] << " ";
    }
    Rf.close();
}

 

labai aciu. sukta uzduotis.. :)

Redagavo arvyda5
Nuoroda į pranešimą
Dalintis kituose puslapiuose

void ssss(string T[], int r){

 

for(int x = 0; x < r; x++){

mm = T[x].substr(0, 1);

if(mm == 3){

 

}

else if(mm == 4){

 

}

else if(mm == 5){

 

}

else if(mm == 6){

 

}

 

}

 

}

 

ismeta klaida: cannot convert 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'int' in initialization|

 

noriu is tos nuskaitytos eilutes paimti pirma skaiciu ir priskirti kintamajam. kaip?

Redagavo arvyda5
Nuoroda į pranešimą
Dalintis kituose puslapiuose

void ssss(string T[], int r){

 

for(int x = 0; x < r; x++){

mm = T[x].substr(0, 1);

if(mm == 3){

 

}

else if(mm == 4){

 

}

else if(mm == 5){

 

}

else if(mm == 6){

 

}

 

}

 

}

 

ismeta klaida: cannot convert 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'int' in initialization|

 

noriu is tos nuskaitytos eilutes paimti pirma skaiciu ir priskirti kintamajam. kaip?

kintamaji "mm" apsirasyk char tipo, nes istrauki is eilutes chara, ne int. Tada tikrinime tikrink taip: if (mm == '4')

Nuoroda į pranešimą
Dalintis kituose puslapiuose

kintamaji "mm" apsirasyk char tipo, nes istrauki is eilutes chara, ne int. Tada tikrinime tikrink taip: if (mm == '4')

error: cannot convert 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'char' in assignment|

 

ar negalima ne su string istraukti is to skaiciaus pvz antra ir trecia skaicius? (skaicius is 11 simboliu).

Redagavo arvyda5
Nuoroda į pranešimą
Dalintis kituose puslapiuose

isikelk skaicius i masyva su for ciklu, tada parasyk masyva taip pat su for(int x=0; x > (kiekskaiciu); x--)

 

(kaip matai vietoj x++ yra x-- tai yra mazejimo tvarka, bei pakeistas zenklas < i zenkla >)

Tavo algoritmas neveiks, nes tu priskiri x = 0, todėl sąlyga x > (kiekskaiciu) niekada nebus teisinga. Turi būti (int x = (kiekskaiciu); x > 0; x--);

Nuoroda į pranešimą
Dalintis kituose puslapiuose

error: cannot convert 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'char' in assignment|

 

ar negalima ne su string istraukti is to skaiciaus pvz antra ir trecia skaicius? (skaicius is 11 simboliu).

 

man reiktu kad veiktu si funkcija

if(T[x].substr(1,4) == 3){

}

gal zinot kas blogai? meta klaida

error: no match for 'operator==' in 'std::basic_string<_CharT, _Traits, _Alloc>::substr(typename _Alloc::rebind<_CharT>::other::size_type, typename _Alloc::rebind<_CharT>::other::size_type) const [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](1u, 4u) == 3'|

Nuoroda į pranešimą
Dalintis kituose puslapiuose

man reiktu kad veiktu si funkcija

if(T[x].substr(1,4) == 3){

}

gal zinot kas blogai? meta klaida

error: no match for 'operator==' in 'std::basic_string<_CharT, _Traits, _Alloc>::substr(typename _Alloc::rebind<_CharT>::other::size_type, typename _Alloc::rebind<_CharT>::other::size_type) const [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](1u, 4u) == 3'|

Lygini stringa su int'u, 3 imesk i dvigubas kabutes, taip va: "3"

Ir siaip, string tipo kintamasis yra kaip char masyvas, todel paimt pirmaji simboli galima kaip is masyvo, nereik substr f-jos t.y. pvz string a = "abc", cout << a[0]; ekrane pamatysim "a"

Redagavo hafnis1324
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Lygini stringa su int'u, 3 imesk i dvigubas kabutes, taip va: "3"

Ir siaip, string tipo kintamasis yra kaip char masyvas, todel paimt pirmaji simboli galima kaip is masyvo, nereik substr f-jos t.y. pvz string a = "abc", cout << a[0]; ekrane pamatysim "a"

 

o kaip jei reiktu paimt daugiau skaiciu?

taip pat kaip priskirti kintamajam stringa pvz: ard = T[x].substr(1,2);

raso jog negalima konvertuoti

Redagavo arvyda5
Nuoroda į pranešimą
Dalintis kituose puslapiuose

O jei eiga butu tokia 5, 9, 10, 21. Tai kaip tada reiketu daryt?

taip nepadarysi

 

suiduriau su nauja problema, del kurios negaliu "keliauti" toliau.

UZDUOTIS

kodas:

 

#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>
using namespace std;

const char CDfv[] = "duomenys.txt";
const char CRfv[] = "rezultatai.txt";
const int Cmax = 100;
void skaityti(int T[], int & e, int & s);
int svieteKitaNakti(int T[], int Y[], int  e, int  s);


int main()
{
   int E[Cmax];
   int R[Cmax];
   int w, x;
   skaityti(E, w, x);
   svieteKitaNakti(E, R, w, x);
   ofstream rez;
   rez.open(CRfv, ios::app);

   rez.close();

   return 0;
}

void skaityti(int T[], int & e, int & s){
   ifstream duom(CDfv);
   duom >> e >> s;
   for(int x = 0; x < e; x++){
       duom >> T[x];
   }
   duom.close();
}

void svieteKitaNakti(int T[], int Y[], int  e, int  s){
   for(int x = 0; x < e; x++){
   if((T[x -1] == 1) && (T[x+1] == 1)){
           Y[x] = 0;
              }
        else if((T[x -1] == 0) && (T[x+1] == 1) ||(T[x -1] == 1) && (T[x+1] == 0)){
            Y[x] = 1;
       }
       else if(x % 2 == 0){
           Y[x] =1;
       }
       else if(x % 2 != 0){
           Y[x] =0;

       }
   }
}

 

as randu tik antros naktiies svieciancias lempas, kaip padaryt kad rasciau visu kitu naktu?

Redagavo arvyda5
Nuoroda į pranešimą
Dalintis kituose puslapiuose

taip nepadarysi

 

suiduriau su nauja problema, del kurios negaliu "keliauti" toliau.

UZDUOTIS

kodas:

 

#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>
using namespace std;

const char CDfv[] = "duomenys.txt";
const char CRfv[] = "rezultatai.txt";
const int Cmax = 100;
void skaityti(int T[], int & e, int & s);
int svieteKitaNakti(int T[], int Y[], int  e, int  s);


int main()
{
   int E[Cmax];
   int R[Cmax];
   int w, x;
   skaityti(E, w, x);
   svieteKitaNakti(E, R, w, x);
   ofstream rez;
   rez.open(CRfv, ios::app);

   rez.close();

   return 0;
}

void skaityti(int T[], int & e, int & s){
   ifstream duom(CDfv);
   duom >> e >> s;
   for(int x = 0; x < e; x++){
       duom >> T[x];
   }
   duom.close();
}

void svieteKitaNakti(int T[], int Y[], int  e, int  s){
   for(int x = 0; x < e; x++){
   if((T[x -1] == 1) && (T[x+1] == 1)){
           Y[x] = 0;
              }
        else if((T[x -1] == 0) && (T[x+1] == 1) ||(T[x -1] == 1) && (T[x+1] == 0)){
            Y[x] = 1;
       }
       else if(x % 2 == 0){
           Y[x] =1;
       }
       else if(x % 2 != 0){
           Y[x] =0;

       }
   }
}

 

as randu tik antros naktiies svieciancias lempas, kaip padaryt kad rasciau visu kitu naktu?

Prasisukus tam cikluj, kuris keicia sviesas, isvesk Y masyva i rezultatu faila, tada Y masyva perrasyk ant T masyvo, ir sito ciklo isoreje parasyk dar viena cikla, kuris veiks kiek yra dienu.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prasisukus tam cikluj, kuris keicia sviesas, isvesk Y masyva i rezultatu faila, tada Y masyva perrasyk ant T masyvo, ir sito ciklo isoreje parasyk dar viena cikla, kuris veiks kiek yra dienu.

 

kaska panasaus kalbejai? jei taip tai netinka.

 

void svieteKitaNakti(int T[], int Y[], int  e, int  s){
    for(int u = 0; u < s; u++){
   for(int x = 0; x < e; x++){

    if((T[x -1] == 1) && (T[x+1] == 1)){
           Y[x] = 0;


               }
        else if((T[x -1] == 0) && (T[x+1] == 1) ||(T[x -1] == 1) && (T[x+1] == 0)){
            Y[x] = 1;

       }
       else if(x % 2 == 0){
           Y[x] =1;

       }

       else if(x % 2 != 0){
           Y[x] =0;

       }



       T[x] = Y[x];
       }
    }


}

Redagavo arvyda5
Nuoroda į pranešimą
Dalintis kituose puslapiuose

kaska panasaus kalbejai? jei taip tai netinka.

 

void svieteKitaNakti(int T[], int Y[], int  e, int  s){
    for(int u = 0; u < s; u++){
   for(int x = 0; x < e; x++){

    if((T[x -1] == 1) && (T[x+1] == 1)){
           Y[x] = 0;


               }
        else if((T[x -1] == 0) && (T[x+1] == 1) ||(T[x -1] == 1) && (T[x+1] == 0)){
            Y[x] = 1;

       }
       else if(x % 2 == 0){
           Y[x] =1;

       }

       else if(x % 2 != 0){
           Y[x] =0;

       }


       T[x] = Y[x]; // Sita trink visai.
       }
       for (int i = 0; i < e; e++) 
             T[i] = Y[i];
    }


}

Ne taip, kai vidinis ciklas prasisuka visus kartus, t.y. pakeicia vienos dienos visas lempas, tada visa Y masyva perrasyk vietoj T masyvo. Parasiau kaip atrodo pavyzdyje

Redagavo hafnis1324
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...