fizmati.lv forums
c++ programmas ar 'char' - Izdrukas versija

+- fizmati.lv forums (http://fizmati.lv/forums)
+-- Forums: Informācijas tehnoloģiju lietas (/forum-118.html)
+--- Forums: Programmēšana (/forum-125.html)
+--- Pavediens: c++ programmas ar 'char' (/thread-4315.html)



c++ programmas ar 'char' - ilshe - 21.04.2010 20:15

Sveiki!
Man ir veseli 3 uzd. programmēšnā, ar ko netieku galā; it kā būtu jābūt viegli, bet esmu absolūta iesācēja!
Varbūt kāds var pateikt, kas manos mēģinājumos kko uzprogrammēt ir nepareizi? Smile

1. uzd.
Ievadīt no tastatūras teksta rindu. Nošifrēt ievadīto rindu, aizvietojot simbolus ‘a’ ar simboliem ‘b’, simbolus ‘b’ ar simboliem ‘c’ un t.t., simbolus ‘z’ ar simboliem ‘a’.

# include <conio.h>
# include <iostream>
using namespace std;
void main ()
{
char s[40];
char ch;
int i;
cout<<"ievadi rindu: ";
cin>>s;
for (i=0; i<=strlen(s); i++)
for (ch='a'; ch<='z'; ch++)
{{if s[i]==ch
s[i]=ch+1;}
{if s[i]=='z'
s[i]='a';}}
cout<<s[i];
getch();
}



2. uzd.

Ievadīt no tastatūras teksta rindu. Iestarpināt aiz katra komata tukšumzīmi.
(Te man mistiski izdodas panākt, ka komata vietā parādās smailijs. Nezinu, kpc Very Happy )

# include <conio.h>
# include <iostream>
using namespace std;
void main ()
{ char s[40];
int i;
cout<<"ievadi tekstu: ";
cin>>s;
for (i=0; i<strlen(s); i++)
{if (s[i]==',')
s[i]=','&&' ';}
cout<<s;
getch();
}

3. uzd.

Ievadīt no tastatūras teksta rindu. Pārveidot rindu tādā veidā, lai burti, kas seko aiz tukšumzīmēs būtu lielie, bet pārējie simboli būtu mazie. (Pirmajiem 2 vārdiem tos lielos burtus šitā var dabūt, bet ja vārdu ir vairāk, tad pārējie vienalga sākas ar mazo.)


# include <conio.h>
# include <iostream>
using namespace std;
void main ()
{ char s[40];
int i;
cout<<"ievadi tekstu: ";
cin>>ws;
cin.get (s, 40);
for (i=0; i<strlen(s); i++)
if (s[i]>='A' && s[i]<='Z')
s[i]=s[i]-'A'+'a';
s[0]=s[0]-'a'+'A';
{for (i=0; i<=strlen(s); i++)
{if s[i]==' '
s[i+1]=s[i+1]-'a'+'A';}}
cout<<s;
getch();
}


Cepums tam, kurš spēs mani kaut cik apgaismot par šiem uzdevumiem! Smile)


RE: c++ programmas ar 'char' - Ēriks Klotiņš - 21.04.2010 20:43

1. uzdevums
Šeit jaizmanto ipašība, ka burti ASCII kodējumā atrodas pēc kārtas, katram burtam, lai dabūtu nākamo jāpieskaita 1, izņēmums ir z, jo pēc tā neseko a
tātad:
Kods:
for (i=0; i<=strlen(s); i++) if (s[i]  == 'z') { s[i] = 'a'; } else{ s[i] ++; }

2. uzdevums

rindiņa:
Kods:
s[i]=','&&' ';
noteikti nedara to ko tev vajag. && ir loģiskais UN operātors.

Tā vietā, pārstaigā visu ievadīto stringu un uzbūvē jaunu izvadei:
Kods:
char result[];
for (int i=0; i<strlen(s); i++) if (s[i] == ',')  result += ", "; else result +=s[i];

3. uzdevums

Kods:
for (int i=0; i<strlen(s);i++)
{
if ((i>0) && (c[i-1]) == ' ')&&(c[i] >='a')) // ja i-tais simbols nav pirmais un iepriekšējais bija tukšums un i-tais simbols ir mazais burts (97 ='a')
{
c[i] -= ('a' - 'A'); // uztaisam par lielo burtu
}
else if (c[i] < 97)  c[i] += ('a' - 'A'); // uztaisām par mazo burtu


}


Raksīju bez kompilēšanas, šur tur var būt kāda sintakses kļūdiņa


RE: c++ programmas ar 'char' - Zaķītis-Kaķītis - 21.04.2010 20:44

Ātrais. Laughing


RE: c++ programmas ar 'char' - ilshe - 21.04.2010 21:38

(21.04.2010 20:43 )Ēriks Klotiņš rakstīja:  1. uzdevums
Šeit jaizmanto ipašība, ka burti ASCII kodējumā atrodas pēc kārtas, katram burtam, lai dabūtu nākamo jāpieskaita 1, izņēmums ir z, jo pēc tā neseko a
tātad:
Kods:
for (i=0; i<=strlen(s); i++) if (s[i]  == 'z') { s[i] = 'a'; } else{ s[i] ++; }

Šo izlaboju tā, kā iesaki, bet man galu galā izvada tikai kkādu mistisku bultiņu Very Happy

Līdz pārējiem vēl īsti netiku, bet anyway liels paldies! Ceru, ka man izdosies piedabūt tos darboties Very Happy


RE: c++ programmas ar 'char' - Zaķītis-Kaķītis - 21.04.2010 22:40

Kods:
for (i=0; i<=strlen(s); i++) if (s[i]  == 'z') { s[i] = 'a'; } else{ s[i] ++; }

tā mistiskā bultiņa ir liekais elements, kurš tiek apstrādāts.

i <= strlen(s)
vajag
i < strlen(s)

nu tas ja tev beigās izvada bultiņu. man tur parādījās smailijs.


RE: c++ programmas ar 'char' - ilshe - 22.04.2010 08:35

Hehē, lieliski, paldies, 1. uzd. man darbojas! Smile


Bet ir problēma ar otro... Very Happy
Izlaboju uz kko šitādu, bet man izmet, ka ir kkādi error saistībā ar result un +=. Mēs šādas darbības nodarbībās neesam izmantojuši, tāpēc nezinu, kas tur ir ne tā, kā vajag.
Kods:
# include <conio.h>
# include <iostream>
using namespace std;
void main ()
{  char s[40];
int i;
cout<<"ievadi tekstu:  ";
cin>>s;
char result[];
for (int i=0; i<strlen(s); i++)
if (s[i] == ',')  
result += ', ';
else result +=s[i];
cout<<s;
getch();
}

Un 3. izlaboju uz kko tādu, vadoties pēc vakar ieteiktā, un arī nedarbojas:

Kods:
# include <conio.h>
# include <iostream>
using namespace std;
void main ()
{  char s[40];
int i, c;
cout<<"ievadi tekstu:  ";
cin>>ws;
cin.get (s, 40);
for (int i=0; i<strlen(s);i++)
{
if ((i>0) && (c[i-1]) == ' ') && (c[i] >='a'))
{
c[i] -= ('a' - 'A');
}
else if (c[i] < 97)  c[i] += ('a' - 'A');
cout<<s;
getch();
}



RE: c++ programmas ar 'char' - AR - 22.04.2010 13:37

(22.04.2010 08:35 )ilshe rakstīja:  Bet ir problēma ar otro... Very Happy
Izlaboju uz kko šitādu, bet man izmet, ka ir kkādi error saistībā ar result un +=. Mēs šādas darbības nodarbībās neesam izmantojuši, tāpēc nezinu, kas tur ir ne tā, kā vajag.
Kods:
# include <conio.h>
# include <iostream>
using namespace std;
void main ()
{  char s[40];
int i;
cout<<"ievadi tekstu:  ";
cin>>s;
char result[];
for (int i=0; i<strlen(s); i++)
if (s[i] == ',')  
result += ', ';
else result +=s[i];
cout<<s;
getch();
}

Ja aiz if seko viena darbība, tad protams var nelikt {}, bet ja ir vairākas darbības vai arī else daļa, tad gan iesaku likt{} - neesmu atradusi iespēju, ka iet bez {}. Resp. gan if, gan else gadījumus saliec iekavās!!!
Darbība:
a+=3 nozīmē to pašu, ko a=a+3 vari lietot jebkuru pierakstu, tas tiek izmantots tikai, lai saīsinātu pierakstu, kad pieskaiti esošajam mainīgajam kaut ko klāt, tāpat ir darbības -= *= /=


RE: c++ programmas ar 'char' - Zaķītis-Kaķītis - 22.04.2010 15:16

(22.04.2010 08:35 )ilshe rakstīja:  
Kods:
# include <conio.h>
# include <iostream>
using namespace std;
void main ()
{
char s[40];
int i;
cout<<"ievadi tekstu:  ";
cin>>s;
char result[];
for (int i=0; i<strlen(s); i++)
if (s[i] == ',')  
result += ', ';
else result +=s[i];
cout<<s;
getch();
}
mans DevCPP nemaz negrib atļaut nodefinēt tādu mainīgo result Very Happy
bet pieņemu, ka man ir līkas rokas. [pārbaudot vnk nomainīju uz string tipu]

result += ', ';
šī rindiņa arī nav īsti pareiza. Starp ' ' raksta char t.i. 1 simbolu. " " raksta stringu t.i. vairākus char simbolus
result += ", ";

programma man ar string strādā Laughing
Kods:
#include <iostream>
using namespace std;
int main ()
{
char s[40];
string result;
int i;
cout<<"Ievadi rindu: ";
cin>>s;
for (i=0; i<strlen(s); i++)
  if (s[i]  == ',') {
    result += ", ";
  } else {
    result += s[i];
  }
cout << result << endl;
system("pause");
return 0;
}



RE: c++ programmas ar 'char' - ilshe - 29.04.2010 19:11

Labs vakars!

Kāds varētu pastāstīt, kāpēc mana programma reizēm izvada pareizu rezultātu un reizēm ne?
Uzd. ir šāds: Ievadīt teksta rindu, kas satur matemātisku izteiksmi. Pārbaudīt, vai iekavas izteiksmē ir novietotas pareizi. Izteiksmē tika lietotas tikai apaļas iekavas. Visus simbolus, kas atšķiras no iekavām, programma var ignorēt.
Piemēram, rindā: (( ))(( )( )) iekavas ir novietotas pareizi.
Bet rindā: ( ))(( ) iekavas ir novietotas nepareizi.

Kods:
# include <conio.h>
# include <iostream>
using namespace std;
void main ()
{  
char str[21];
static int A[21];
int i, a=0;
cin>>str;
for (i=0; i<strlen(str); i++)
{if(str[i]=='(')
  
{A[a]=str[i];
  a++;}

if (str[i]==')')
   {if(str[i]==')'){if (A[a-1]=='(') a--; else break;}}

}
if(a==0)cout<<"kljuudas nav";
else cout<<"ir kljuda";
getch ();
}



RE: c++ programmas ar 'char' - PeterB - 29.04.2010 21:53

(29.04.2010 19:11 )ilshe rakstīja:  
Kods:
if (str[i]==')')
   {if(str[i]==')'){...}}
WTF??


Nesaprotu, kam ir vajadzīgs A masīvs. Ciklā jāiet cauri visai simbolu virknei, ja sastop (, tad a++, ja sastop ), tad a--. Ja beigās a>0 vai jebkurā brīdī(!) a<0, tad ir kļūda. Viss.


RE: c++ programmas ar 'char' - ilshe - 05.05.2010 14:18

Hei!
Man ir kārtējā problēma Very Happy
Uzd. ir ievadīt rindu, kas satur matemātisku izteiksmi, kurā ir reāli skaitļi un zīmes “+” un “-“. Vajag aprēķināt izteiksmes vērtību.
Lai man vismaz kkas sanāktu, es te bik vienkāršoti mēģināju rakstīt programmu -pieņemot, ka ir tikai 1cipara skaitļi un ka pirms katra skaitļa ir "+" vai "-" (arī pirms pirmā skaitļa, ko ievada jābūt attiec. +vai - zīmei). Bēēēt - programma it kā aiziet, bet tas cipariņš, ko beigās izvada, galīgi nav tā summa, kas vajadzīga. Kāds maybe var pateikt, kas nav pareizi un kā būtu jābūt?

Kods:
#include <iostream>
using namespace std;
#include <conio.h>
#include <string.h>
void main ()
{char rinda[20];
int i, s;
s=0;
cout << "ievadi izteiksmi:   ";
cin>>rinda;
for (i=0; i<strlen(rinda); i=i+2)
if (rinda[i]=='+') s=s+(rinda[i+1]);
if (rinda[i]=='-') s=s-(rinda[i+1]);
cout<<"izteiksmes vertiba ir: "<<s;
getch();
}



RE: c++ programmas ar 'char' - ulzha - 05.05.2010 15:13

Par { un } mācīja? Kā kompilators var zināt, ka tu abus ifus gribi ciklā, ja tu {} nelieto?

Rinda satur ciparus kā simbolus! Tu šobrīd skaiti attiecīgā simbola kodu, nevis pašu ciparu. Kā iegūt ciparu, izdomā http://www.asciitable.com/

Tā vietā skaitļus, arī daudzciparu, labāk būs ielasīt ar http://www.cplusplus.com/reference/iostream/istringstream/


RE: c++ programmas ar 'char' - ilshe - 05.05.2010 15:51

Hej, nevajag jau uzreiz tik skarbi! Wink
Tiešām, nepamanīju, ka man trūkst {}. Un sapratu par to simbola kodu, un tgd šī programma man darbojas tā, kā biju gribējusi. Liels paldies Tev par palīdzību! Smile

(05.05.2010 15:13 )ulzha rakstīja:  Tā vietā skaitļus, arī daudzciparu, labāk būs ielasīt ar http://www.cplusplus.com/reference/iostream/istringstream/
Bet šito gan nesapratu, neesmu tik advancēta Very Happy


RE: c++ programmas ar 'char' - ulzha - 05.05.2010 16:30

Es jau gribu, lai tu iemācies izmantot dokumentāciju
Piem., klikšķinot uz funkcijām, ir precīzi apraksti un ar piemēriem
Piem., iemetot Googlē istringstream, var uzzināt vēl sīkāk un 100x paskaidrotāk, nav jau vienmēr laika to visu vēl un vēlreiz rakstīt
Kods:
#include <sstream>
...
istringstream sin(rinda);
sin >> pirmais skaitlis;
while (sin >> operators >> skaitlis) ...