fizmati.lv forums

Pilnā versija: maza problēma c++
Jūs pašlaik aplūkojat satura saīsināto versiju. Skatīt pilno versiju ar atbilstošu noformējumu.
Labrīt! Smile

tātad problēmas radošais uzd šoreiz ir šāds:
Doti divi faili f1 un f2, kas satur veselus skaitļus, sakārtotus augošā secībā (šos failus var izveidot ar Notepad palīdzību). Izstrādāt programmu, kas nolasa skaitļus no failiem f1 un f2 un ieraksta tos failā f3 tādā veidā, lai skaitli failā f3 arī būtu sakārtoti augošā secībā.

vienīgā problēma ir pie izvadīšanas, bet skaidrības labad ierakstīšu visu kodu
Kods:
#include <fstream>
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
#include <string.h>
void main ()
{int i,j;
char sk1 [10]; char sk2 [10];

ifstream f1;
f1.open ("C:\\Documents and Settings\\Ilshe\\Desktop\\f1.txt");
if (!f1)
{cout << "File open error!"; getch(); return;}

ifstream f2;
f2.open ("C:\\Documents and Settings\\Ilshe\\Desktop\\f2.txt");
if (!f2)
{cout << "File open error!"; getch(); return;}

ofstream f3;
f3.open ("C:\\Documents and Settings\\Ilshe\\Desktop\\f3.txt");
if (!f3)
{cout << "File open error!"; getch(); return;}

while ( (!f1.eof()) && (!f2.eof()) )

{f1>>sk1>>ws;
f2>>sk2>>ws;

for (i=0; i<strlen(sk1); i++)
for (j=0; j<strlen(sk2); j++)

{
    if (sk1[i]<sk2[j])
f3<<"\n"<<sk1[i]<<"\n"<<sk2[j];
else f3<<"\n"<<sk2[j]<<"\n"<<sk1[i];
}

cout<<"\n informacija ierakstita faila";
f1.close();
f2.close();
f3.close();
getch();
}

tātad diezgan loģiski, ka šitais darbojas tā, ka salīdzina f1 pirmo skaitli un f2 pirmo sk. un tad ieraksta iekš f3 attiecīgi mazāko no tiem un tad lielāko. un tad attiecīgi salīdzina f1 otro sk. ar f2 otro sk. utt., bet tas nekam neder, ja, piem., f2 otrais sk. ir mazāks par f1 pirmo sk. utml.

tātad jautājums - kā panākt, lai viņš salīdzina visus ar visiem un tad ieraksta f3?

mēģināju vēl kkā šitā, bet te atkal izvada tikai mazāko no tiem sk., ko salīdzina. šķita, ka kkur varbūt trūkst {}, bet saliku visās iespējamās vietās un kombinācijās, un tāpat nepanācu to, ko vajag.
Kods:
for (i=0; i<strlen(sk1); i++)
for (j=0; j<strlen(sk2); j++)
{if (sk1[i]<sk2[j])
f3<<"\n"<<sk1[i];
else f3<<"\n"<<sk2[j];}

un vēl mēģināju piešķirt to mazāko vērtību vēl kkādam citam mainīgajam, bet šajā gadījumā arī ir tas pats, ka izvada tikai pusi no skaitļiem
Kods:
for (i=0; i<strlen(sk1); i++)
for (j=0; j<strlen(sk2); j++)
{    if (sk1[i]<sk2[j])
        min=sk1[i];
    else min=sk2[j];
f3<<"\n"<<min;}
}

būšu ļoti pateicīga, ja kāds varētu palīdzēt, pašai jau šķiet, ka šim nevajadzētu būt grūti, bet ir kkas , ko te nespēju atkost Very Happy
Kods:
i1 = 0
i2 = 0
g1 = garums[m1]
g2 = garums[m2]
kamēr i1 < g1 un i2 < g2 dari
  ja m1[i1]<m2[i2] tad
    raksti m1[i1]
    i1++
  citādi
    raksti m2[i2]
    i2++
ja i1 <> g1 tad
  raksti visus m1[i1+]
ja i2 <> g2 tad
  raksti visus m2[i2+]
Sanāk, ja vienam masīva ir tikts līdz galam, tad visus pārējos otra masīva skaitļus varam rakstīt, jo tie noteikti ir lielāki par tiem, kas jau izdrukāti.
(06.05.2010 08:25 )ilshe rakstīja: [ -> ]Doti divi faili f1 un f2, kas satur veselus skaitļus, sakārtotus augošā secībā (šos failus var izveidot ar Notepad palīdzību). Izstrādāt programmu, kas nolasa skaitļus no failiem f1 un f2 un ieraksta tos failā f3 tādā veidā, lai skaitli failā f3 arī būtu sakārtoti augošā secībā.

Es nesaprotu, kāpēc tik vienkāršā piemērā būtu jāiesaista masīvs vai kaut kāds fiksēts garums??
Ir kaut kas dzirdēts par SALIEŠANAS algoritmu?:
1) no katra faila ielasi vienu skaitli vienā mainīgajā; (resp. ir divi mainīgie nevis masīvi)
2) salīdzini tos:
a) pirmais mazāks, tad to ieraksti izejas failā un vietā ielasi no pirmā faila nākošo;
b) citādi (pirmais>=otro), raksti izejā otro mainīgo un vietā ielasi no otrā faila nākošo;
3) atkārto visu šo, kamēr izbeigsies viens no failiem;
4) atlikušo failu 1:1 pārraksti izejā (jo nav vairs jāsalīdzina).
Šinī gadījumā ir vienalga, cik pēc kārtas nāk no pirmā faila, cik pēc kārtas no otrā un cik miljoni elementu ir katrā failā.

http://webcache.googleusercontent.com/se...=firefox-a
Atsauces saites