Pereiti prie turinio

C++ užduotis, padėkit!


Rekomenduojami pranešimai

Sveiki, turiu tokią užduotį:

Parenkite programą, kuri sudėtų sveikuosius skaičius, sudarytus iš daug skaitmenų. Pirmoje pradinių duomenų failo eilutėje nurodytas skaičių kiekis. Toliau kiekvienoje eilutėje įrašytas sveikasis skaičius, kurio skaitmenų skaičius ne mažesnis kaip 20 ir ne didesnis kaip 80. Prieš kiekvieną skaičių nurodyta, iš kelių skaitmenų jis yra sudarytas.

 

Pradiniai duomenys

3

22 5126717910121751622546

29 88888888888888888888888888888

40 2525255125133485451578436833138834387837

 

Rezultatai

2525255125222374345594043632149474899271

 

Nusiskaitau tuos ilgus skaičius į char masyvą ir tuomet nesuprantu kaip tuos simbolius sudėti į vieną? Bandžiau versti į int, bet nelabai kas gavosi. Gal galite padėti??

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Idek kiek jau esi parasiusi kodo, bus lengviau matyti kokia kryptimi eini. Negali naudoti "long long int"? Nesu geras programuotojas, tad patarciau kreiptis i stackoverflow tokiais klausimais. Tik nepamirsk gerai suformuluoti savo klausimo ko tau reikia ir kokiu metodu tau reikia parasyti sia programa. Ar butina naudoti masyvus ar galima apsieiti ir be ju?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Susirandi kuris masyvas turi maziau nariu ,cia bus kintamasis n,suki cikla nuo n-ojo nario iki 0(kadangi masyvas nuo 0), sudedi vieno masyvo n-aji nari su kito masyvo n-uoju nariu,jei sudeti skaiciai didesni uz 9 ,tai kitam ciklo etape pridesi 1

Redagavo wales
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Susirandi kuris masyvas turi maziau nariu ,cia bus kintamasis n,suki cikla nuo n-ojo nario iki 0(kadangi masyvas nuo 0), sudedi vieno masyvo n-aji nari su kito masyvo n-uoju nariu,jei sudeti skaiciai didesni uz 9 ,tai kitam ciklo etape pridesi 1

O kaip apsirašyti masyvą, kad į vieną poziciją keltų vieną skaičių? man viskas aišku, tik pati pradžia ne. kokio tipo turi būti kintamieji? su char masyvais sudėti nepavyksta

Redagavo Viktorija12345
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Skaityk kaip char ir konvertuok ji i int ,tiksliai nepamenu bet lygtais int skaicius = (int) kintamasischar

 

P.s masyvas int tipo

tuoj pabandysiu, o kaip padaryti, jog skaitant failą nenuskaitytu tarpo simbolio. aš naudoju failas.get(skaicius); ir patį pirmą simbolį man nuskaito tarpą, kuris man visai nereikalingas

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Skaityk kaip char ir konvertuok ji i int ,tiksliai nepamenu bet lygtais int skaicius = (int) kintamasischar

 

Nu labas rytas :) simboliai juk skaitomi. ASCII lentelėje '0' yra 48, tai ir gausi 48, o ne 0.

 

Tinkamas vertimas yra

(int) ch - '0'

.

 

tuoj pabandysiu, o kaip padaryti, jog skaitant failą nenuskaitytu tarpo simbolio. aš naudoju failas.get(skaicius); ir patį pirmą simbolį man nuskaito tarpą, kuris man visai nereikalingas

Neperkėlei žymeklio į kitą eilutę galbūt. Arba tiesiog praleisk tą tarpą, kame bėda.

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nu labas rytas :) simboliai juk skaitomi. ASCII lentelėje '0' yra 48, tai ir gausi 48, o ne 0.

 

Tinkamas vertimas yra

(int) ch - '0'

.

 

 

Neperkėlei žymeklio į kitą eilutę galbūt. Arba tiesiog praleisk tą tarpą, kame bėda.

 

Taip sunku normaliai perskaityti posta ar reikia pasirodyti koks tu kietas? Juk aiskiai parasiau ,kad tiksliai nepamenu ,kaip konvertuoti tik ideja daviau.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

dabar su nuskaitymu viskas gerai, tačiau meta klaidą:

error: declaration of 'skaicius' as multidimensional array must have bounds for all dimensions except the first|

error: expected ')' before ',' token|

error: expected unqualified-id before 'int'|

(line 6)

Redagavo Viktorija12345
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip sunku normaliai perskaityti posta ar reikia pasirodyti koks tu kietas? Juk aiskiai parasiau ,kad tiksliai nepamenu ,kaip konvertuoti tik ideja daviau.

Ramiai :) Toks castinimas iš esmės visai nereikalingas - dėl char priskyrimo int'ui komipliatorius nepyksta net su -Wall. Ėmiau ir pataisiau, tai tiek. '6' ir 6 tikrai nėra tas pats.

 

--

 

Užtenka funkcijoje vos dviejų vienmačių masyvų - nuskaitai pirmą skaičių, antrą pridedi prie pirmo, tada vėl skaitai į antrą sk., pridedi, ir t.t., kol baigiasi. Tau kompiliatorius aiškina, kad nežino, kiek per vieną matmenį yra elementų. Tai iš esmės sakau, netgi neperdavinėk to dvimačio masyvo, turėk du skaičiavimui, grąžink vieną iš jų ir bus ok.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ramiai :) Toks castinimas iš esmės visai nereikalingas - dėl char priskyrimo int'ui komipliatorius nepyksta net su -Wall. Ėmiau ir pataisiau, tai tiek. '6' ir 6 tikrai nėra tas pats.

 

--

 

Užtenka funkcijoje vos dviejų vienmačių masyvų - nuskaitai pirmą skaičių, antrą pridedi prie pirmo, tada vėl skaitai į antrą sk., pridedi, ir t.t., kol baigiasi. Tau kompiliatorius aiškina, kad nežino, kiek per vieną matmenį yra elementų. Tai iš esmės sakau, netgi neperdavinėk to dvimačio masyvo, turėk du skaičiavimui, grąžink vieną iš jų ir bus ok.

o kaip padaryti, kad c++ normaliai išmestų tokius simbolius "·-" nes man parodo tik brūkšnį, o tašką nuslepia

Redagavo Viktorija12345
Nuoroda į pranešimą
Dalintis kituose puslapiuose

o kaip padaryti, kad c++ normaliai išmestų tokius simbolius "·-" nes man parodo tik brūkšnį, o tašką nuslepia

O kam tokio taško? Nes jis kažkoks čiudnas, už ASCII ribų. O C++ su unikodu ir pan. pati nesitvarko, tas "char" yra tiesiog baitas, o ne simbolis iš tikrųjų.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O kam tokio taško? Nes jis kažkoks čiudnas, už ASCII ribų. O C++ su unikodu ir pan. pati nesitvarko, tas "char" yra tiesiog baitas, o ne simbolis iš tikrųjų.

man reikia raides sukeisti su Morzės abėcėlės simboliais ir ten tarkim A atitinka tą taškiuką ir brūkšniuką

Beje, labai ačiū, ana programėlė veikia kuo puikiausiai!

Redagavo Viktorija12345
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tada Windows-1257 koduotę reikia naudoti, jei būtinas toks taškas. Nors kai mes darėm (jei darėm), tai su paprastu tašku. O kodėl simbolis po to pradingsta - nežinau.

c++ koduotė tokia nustatyta, o failas pas mane txt tipo. pabandžiau pakeisti į normalų tašką '.', tačiau jį vistiek ignoruoja. Duotas tekstas RYTO RASA rezultatas RYTO R-S-

#include <iostream>

#include <fstream>

#include <string>

#include <cstdlib>

#include <iomanip>

#include <sstream>

using namespace std;

 

void skaitymas(string &tekstas)

{

ifstream failas;

failas.open("Duomenys.txt");

string eilute;

while(!failas.eof())

{

getline(failas,eilute);

tekstas+=eilute;

}

failas.close();

}

 

void rasymas(string tekstas)

{

ofstream failasR;

failasR.open("Rezultatai.txt");

for(int i=0;i<tekstas.length();i++)

{

if(tekstas=='A' || tekstas=='a'){tekstas='.-';}

}

failasR<<tekstas;

failasR.close();

}

 

int main()

{

string tekstas;

skaitymas(tekstas);

rasymas(tekstas);

return 0;

}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

c++ koduotė tokia nustatyta, o failas pas mane txt tipo. pabandžiau pakeisti į normalų tašką '.', tačiau jį vistiek ignoruoja. Duotas tekstas RYTO RASA rezultatas RYTO R-S-

#include <iostream>

#include <fstream>

#include <string>

#include <cstdlib>

#include <iomanip>

#include <sstream>

using namespace std;

 

void skaitymas(string &tekstas)

{

ifstream failas;

failas.open("Duomenys.txt");

string eilute;

while(!failas.eof())

{

getline(failas,eilute);

tekstas+=eilute;

}

failas.close();

}

 

void rasymas(string tekstas)

{

ofstream failasR;

failasR.open("Rezultatai.txt");

for(int i=0;i<tekstas.length();i++)

{

if(tekstas=='A' || tekstas=='a'){tekstas='.-';}

}

failasR<<tekstas;

failasR.close();

}

 

int main()

{

string tekstas;

skaitymas(tekstas);

rasymas(tekstas);

return 0;

}

 

 

 

Ar čia man vaidenasi, ar tu į vieną charą nori sukišti du? Ko gero, todėl ir dingsta vienas simbolis, nes į vieno simbolio vietą tu nori įdėti du simbolius.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ar čia man vaidenasi, ar tu į vieną charą nori sukišti du? Ko gero, todėl ir dingsta vienas simbolis, nes į vieno simbolio vietą tu nori įdėti du simbolius.

aš dar tik plaukioju paviršium su tais string ir char. o tai kaip tada sukeisti, kad imtų 2 simbolius ar daugiau vietoj vienos raidės ?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

aš dar tik plaukioju paviršium su tais string ir char. o tai kaip tada sukeisti, kad imtų 2 simbolius ar daugiau vietoj vienos raidės ?

 

 

Naudok std::string (tiesiog string, jeigu turi „using namespace std;“). Jis turėtų turėti append ar panašų metodą, kur gali appendinti kiek nori simbolių (t.y., appendinti stringą). Šitoje užduotyje aš naudočiau papildomą stringą (pavadinkime jį result), į kurį vis appendinčiau atitinkamą (pagal Morzės alfabetą) stringą.

 

 

Maždaug šitaip:

std::string text = std::string("ABCD"); // Šitą versim į Morzę
std::string result;

for(int i = 0; i < text.length(); ++i)
{
 string code = code_for(text[i]) // code_for yra tavo parašyta funkcija, kuri grąžina stringą su simbolio atvaizdavimu Morzės alfabete. Vietoje funkcijos gali naudoti map'ą (http://www.cplusplus.com/reference/map/)
 result.append(code);
}

std::cout << result << std::endl;

 

Atkreipk dėmesį, kad newline'as, tabas, tarpas irgi yra simboliai, pagalvok kaip juos koduosi: paliksi tą patį simbolį ar ignoruosi – spręsti tau.

 

 

Mano rule of thumb, programuojant cpp: jeigu įmanoma, nenaudoti C stringų (t.y., char masyvų), o vietoje jų naudoti std::string.

 

Red: tik dabar pamačiau, kad jau naudoji appendą, tik kita forma: +=. :-)

 

P.S., kodą dėk tarp [ code ] kodas [/ code ] tagų (be tarpų prieš/po [ ar ]).

Redagavo kashiukas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Naudok std::string (tiesiog string, jeigu turi „using namespace std;“). Jis turėtų turėti append ar panašų metodą, kur gali appendinti kiek nori simbolių (t.y., appendinti stringą). Šitoje užduotyje aš naudočiau papildomą stringą (pavadinkime jį result), į kurį vis appendinčiau atitinkamą (pagal Morzės alfabetą) stringą.

 

 

Maždaug šitaip:

std::string text = std::string("ABCD"); // Šitą versim į Morzę
std::string result;

for(int i = 0; i < text.length(); ++i)
{
 string code = code_for(text[i]) // code_for yra tavo parašyta funkcija, kuri grąžina stringą su simbolio atvaizdavimu Morzės alfabete. Vietoje funkcijos gali naudoti map'ą (http://www.cplusplus.com/reference/map/)
 result.append(code);
}

std::cout << result << std::endl;

 

Atkreipk dėmesį, kad newline'as, tabas, tarpas irgi yra simboliai, pagalvok kaip juos koduosi: paliksi tą patį simbolį ar ignoruosi – spręsti tau.

 

 

Mano rule of thumb, programuojant cpp: jeigu įmanoma, nenaudoti C stringų (t.y., char masyvų), o vietoje jų naudoti std::string.

 

Red: tik dabar pamačiau, kad jau naudoji appendą, tik kita forma: +=. :-)

 

P.S., kodą dėk tarp [ code ] kodas [/ code ] tagų (be tarpų prieš/po [ ar ]).

labai ačiū

Redagavo Viktorija12345
Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 1 metų...

Va ir sudėtis ir atimtis. Jei kas neaišku klausk.

 

#include <iostream>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std;

   #define MAXSIZE 101
   char X[MAXSIZE], Y[MAXSIZE], K[MAXSIZE];

   void sumChars(){
       int i, tmp;
       for(i = 0; i < MAXSIZE; i++){
           tmp = X[i] + Y[i] + K[i];
           K[i] = tmp % 10;
           K[i + 1] = tmp / 10;
       }
   }

   //4321
   //1234

   int switchFix(bool &b){
       int i;
       for(i = MAXSIZE - 1; i >= 0; i--){
           if((int)X[i] == 0 && (int)Y[i] != 0) { swap(X, Y); b = true; return 1; }
           if((int)X[i] < (int)Y[i]){ swap(X, Y); b = true; return 0; }
       }
   }

   void subtractChars(bool &b){
       int i, diff, remainder = 0; switchFix(b);
       for(i = 0; i < MAXSIZE; i++) { // Pradinių klasių atimtis
           K[i] = X[i] - Y[i] - K[i];
           if(K[i] < 0){ K[i] += 10; K[i + 1]++; }
       }
   }

int main(){

   string tmp; int i;
   cout << "Iveskite X: "; cin >> tmp;
   for(i = tmp.length() - 1; i >= 0; i--) X[tmp.length() - i - 1] = tmp[i] % 48;
   cout << "Iveskite Y: "; cin >> tmp;
   for(i = tmp.length() - 1; i >= 0; i--) Y[tmp.length() - i - 1] = tmp[i] % 48;

   sumChars();

   // Jei nori atimties, atkomentuok šitą ir užkomentuok sumChars();
   //bool swaping = false;
   //subtractChars(swaping);

   //if(swaping) cout << "-";
   bool ignore = true;
   for(i = MAXSIZE - 1; i >= 0; i--){
       if(ignore && (int)K[i] != 0) ignore = false;
       if(!ignore) cout << (int)K[i] << "";
   }
   return 0;
}

Redagavo TheSausis
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.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

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