program - iostream

0

witam, mam nastepujace zadanie:
Napisz edytorem tekstu jakiś 10 linijkowy fragment wiersza/piosenki/... Załóżmy, że ma on N znaków.
napisz także program, który:
a) Otworzy ten plik i wypisze na ekranie wszystkie znaki tak, że pojawiają się w kolejności znaki o numerach 0, N, 1, N-1, N-2, ...

użyłem pozycjonowania wskaźników wypisania, ale program nie działa tak ja należy :/

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

int main(int argc, char *argv[])
{
char *buffer;
#define size 1024

buffer = new char[size];

cout << "\n\n------------------------------"
        "\n\t\tWYSWIETLAM\n\n" << endl;
   fstream poka("text.txt", ios::in);
   while(!poka.eof())      
   {
    cout << "Najpierw wyswietlam caly tekst: " << endl;                       
    poka.read(buffer, size);
    cout.write(buffer, size);
    
    cout << "Teraz dzialamy... " << endl;
    for(int a = 0; a < size/2; a++)
    {
            poka.seekg(a);
            poka.read(buffer, 1);
            cout.write(buffer, 1);
            for(int b = 0; b < size/2; b++)
    {
            poka.seekg(b, ios::end);
            poka.read(buffer, 1);
            cout.write(buffer, 1);
    } 
    }
   }
    
delete buffer;
    system("PAUSE");
    return EXIT_SUCCESS;
}

po skompilowaniu wyskakuje mi nieprzerwanie ten sam znak (pierwszy znak)
pisze w Dev C++, prosze o pomoc :-/

0

Załóżmy, że ma on N znaków
...
znaki o numerach 0, N, 1, N-1, N-2, ...

1.W N elementowym zbiorze, jeśli numerujemy od zero, to nie ma znaku o numerze N, ostatni to N-1
W ogóle popieprzyłeś coś z tą kolejnością, może to miało być raz z początku, raz z końca: 0, N-1, 1, N-2, 2, N-3 ...

  1. ten fragment:

for(int a = 0; a < size/2; a++)
{
poka.seekg(a);
poka.read(buffer, 1);
cout.write(buffer, 1);
for(int b = 0; b < size/2; b++)
{
poka.seekg(b, ios::end);
poka.read(buffer, 1);
cout.write(buffer, 1);

jest zupełnie bezsensowny. Dwie pętle, jedna zagnieżdżona w drugiej i to jeszcze od 0 do size/2 !?!?
poza tym niepotrzebnie czytasz plik jeszcze raz, przecież wszystkie znaki masz w buforze.

  1. Zamiast
poka.read(buffer, size);

napiszint n = poka.readsome(buffer, size);

wtedy w zmiennej n będziesz miał ilość znaków wczytanych z pliku.

4. Jeśli dobrze odgadłem kolejność, wystarczy taka pętelka:
```cpp
int i =0, j = n - 1;
for(; i < j; i++, j--)
{
   cout << buffer[i];
   cout << buffer[j];
}
if(i == j) cout << buffer[i]; //w przypadku nieparzystej liczby znaków trzeba wypisać jeszcze ten środkowy
0

Ad.1. Jesli zalozymy ze nasz tekst ma N znakow, to znak N istnieje :-)

przerobilem kod ja pisales, czyli....

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

int main(int argc, char *argv[])
{
char *buffer;
#define size 1024
buffer = new char[size];

   fstream poka("text.txt", ios::in);
   while(!poka.eof())      
   {
    int n = poka.readsome(buffer, size);
    int i = 0, j = n - 1;
    for(; i < j; i++, j--)
    {
          cout << buffer[i]
               << buffer[j];
    }
    if(i == j) { cout << buffer[i]; }
    
   }
    cout << "koniec";  // <-- tego nawet nie wykona... :/
delete buffer;
    system("PAUSE");
    return EXIT_SUCCESS;
}

i jest okey - wyswietla to co chcialem, ale program nie dochodzi do konca... koniec sie juz nie wyswietla... zreszta 2 ostatnie linijki tez... dlaczego? :-/

1 użytkowników online, w tym zalogowanych: 0, gości: 1