Forum » Programiranje » c++ naloga ne deluje pravilno
c++ naloga ne deluje pravilno
whatever ::
Tule je ena naloga ki se prevede prav in zazene ok vendar ne deluje pravilno pa mi ni jasno kaj je narobe ce kak programerski majster ve kje je napaka naj prosim pove cimprej!
Namen te kolobocije je taksenle:
Vhodno datoteko "vhod.txt" preoblikujte v izhodno datoteko "izhod.txt" tako, da v vsaki vrstici, ki ima več kot 7 besed, besedah na sodih mestih zamenjate samoglasnike z znakom '*', besede na lihih mestih pa izpišete obrnjeno. Besede so ločene z enim ali več presledki. Primer:
Kratka vrstica.
To je vrstica, ki vsebuje vec kot sedem besed.
Izhod:
Kratka vrstica.
oT j* ,acitsrv k* ejubesv v*c tok s*d*m .deseb
In tole je source:
#include
int main() {
fstream vhod("vhod.txt", ios::in); //vhodna datoteka
fstream izhod("izhod.txt", ios::out); //izhodna datoteka
while(!vhod.eof()) { //gre do konca vhodne dat
char niz[1000]="";
vhod.getline(niz, 1000, '\n'); //z getline v niz vpisujemo vrstico za vrstico
int i=0;
int k=0;
int i1=0;
int z=0;
int h=0;
int w=0;
int w1=0;
while (niz[w]!='\0') { //beremo znake v nizu do konca vrstice
if (niz[w]==' ' && w1!=w-1) {
h++; //h se poveca za 1, ce je niz[w] presledek in ce ne gre za dva zaporedna presledka, h je torej st besed
w1=w;
}
w++;
}
if(h>7) { //ce je st besed vecje od 7
while (niz[i]!='\0') { //znak za znakom gremo po vrstici
if (niz[i]==' ') { //ko naletimo na presledek
if (i1!=i) k++; //povecamo k za 1, ce ne gre za dva zap. presledka, torej dobimo sodo za sode in liho za lihe besede
cout << k;
int l=0;
char niz2[1000]="";
if (i1!=i) {
for(; i1 i1=i+1;
for(; z<=l; z++) { //gremo skozi besedo crko za crko
if (k%2==0) {if ((niz2[z]=='a') || (niz2[z]=='e') || (niz2[z]=='i') || (niz2[z]=='o') || (niz2[z]=='u') || (niz2[z]=='A') || (niz2[z]=='E') || (niz2[z]=='I') || (niz2[z]=='O') || (niz2[z]=='U')) niz2[z]='*'; else niz2[z]=niz2[z];} //ce je soda beseda, nadomestimo samoglasnike z zvezdico
else if (k%2!=0 && z<=((z+l)/2)) { //ce je liha znake v besedi obrnemo
char niz3[1000]="";
niz3[z]=niz2[l];
niz2[l]=niz2[z];
niz2[z]=niz3[z];
l--;
}
else break;
}
z=0;
izhod << niz2; //v izhodno dat izpise besedo
izhod << ' '; //in presledek
}
else if(i1==i) {izhod << ' '; i1=i+1;} //ce gre za 2 zap presledka izpise samo presledek
}
i++;
}
}
else izhod << niz; //ce je v vrstici manj kot 7 besed, se vrstica skopira v izhodno dat
izhod << '\n'; //skok v novo vrstico
}
return 0;
}
Ce komu rata svaka cast jst nimam vec ideje.
Ko sn dobil nazaj popravljeno sem dobil komentar da se prikradejo dodatni konci vrstic... Fora je pa, da ce v 33. vrstici kjer je { l++; niz2=niz} vrstni red znotraj oklepaja zamenjam, program izpise ali samo sode vrstice ali samo lihe vrstice.
Namen te kolobocije je taksenle:
Vhodno datoteko "vhod.txt" preoblikujte v izhodno datoteko "izhod.txt" tako, da v vsaki vrstici, ki ima več kot 7 besed, besedah na sodih mestih zamenjate samoglasnike z znakom '*', besede na lihih mestih pa izpišete obrnjeno. Besede so ločene z enim ali več presledki. Primer:
Kratka vrstica.
To je vrstica, ki vsebuje vec kot sedem besed.
Izhod:
Kratka vrstica.
oT j* ,acitsrv k* ejubesv v*c tok s*d*m .deseb
In tole je source:
#include
int main() {
fstream vhod("vhod.txt", ios::in); //vhodna datoteka
fstream izhod("izhod.txt", ios::out); //izhodna datoteka
while(!vhod.eof()) { //gre do konca vhodne dat
char niz[1000]="";
vhod.getline(niz, 1000, '\n'); //z getline v niz vpisujemo vrstico za vrstico
int i=0;
int k=0;
int i1=0;
int z=0;
int h=0;
int w=0;
int w1=0;
while (niz[w]!='\0') { //beremo znake v nizu do konca vrstice
if (niz[w]==' ' && w1!=w-1) {
h++; //h se poveca za 1, ce je niz[w] presledek in ce ne gre za dva zaporedna presledka, h je torej st besed
w1=w;
}
w++;
}
if(h>7) { //ce je st besed vecje od 7
while (niz[i]!='\0') { //znak za znakom gremo po vrstici
if (niz[i]==' ') { //ko naletimo na presledek
if (i1!=i) k++; //povecamo k za 1, ce ne gre za dva zap. presledka, torej dobimo sodo za sode in liho za lihe besede
cout << k;
int l=0;
char niz2[1000]="";
if (i1!=i) {
for(; i1 i1=i+1;
for(; z<=l; z++) { //gremo skozi besedo crko za crko
if (k%2==0) {if ((niz2[z]=='a') || (niz2[z]=='e') || (niz2[z]=='i') || (niz2[z]=='o') || (niz2[z]=='u') || (niz2[z]=='A') || (niz2[z]=='E') || (niz2[z]=='I') || (niz2[z]=='O') || (niz2[z]=='U')) niz2[z]='*'; else niz2[z]=niz2[z];} //ce je soda beseda, nadomestimo samoglasnike z zvezdico
else if (k%2!=0 && z<=((z+l)/2)) { //ce je liha znake v besedi obrnemo
char niz3[1000]="";
niz3[z]=niz2[l];
niz2[l]=niz2[z];
niz2[z]=niz3[z];
l--;
}
else break;
}
z=0;
izhod << niz2; //v izhodno dat izpise besedo
izhod << ' '; //in presledek
}
else if(i1==i) {izhod << ' '; i1=i+1;} //ce gre za 2 zap presledka izpise samo presledek
}
i++;
}
}
else izhod << niz; //ce je v vrstici manj kot 7 besed, se vrstica skopira v izhodno dat
izhod << '\n'; //skok v novo vrstico
}
return 0;
}
Ce komu rata svaka cast jst nimam vec ideje.
Ko sn dobil nazaj popravljeno sem dobil komentar da se prikradejo dodatni konci vrstic... Fora je pa, da ce v 33. vrstici kjer je { l++; niz2=niz} vrstni red znotraj oklepaja zamenjam, program izpise ali samo sode vrstice ali samo lihe vrstice.
- spremenilo: whatever ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c++ DODAJANJE elementov iz datoteke v vektorOddelek: Programiranje | 932 (807) | Tutankhamun |
» | Java ObjektiOddelek: Programiranje | 2236 (1930) | Mavrik |
» | C++ datotekeOddelek: Programiranje | 918 (745) | technolog |
» | [NALOGA][NASM] problem pri povezovanju s C-jevskimi funkcijamiOddelek: Programiranje | 1378 (1236) | c00L3r |
» | štetje vpisanih znakovOddelek: Programiranje | 1351 (1264) | bostek |