GRY-Online.pl --> Archiwum Forum

[C++] Odczyt liczby z gUpiego pliku

20.11.2008
16:49
[1]

swee [ Gunslinger ]

[C++] Odczyt liczby z gUpiego pliku

Problem polega na tym, żeby z pliku .txt przeczytać liczba po liczbie i zapisać je do tablicy dwuwymiarowej. Wszystko ok, ale plik wygląda na przykład tak:

8 8 8 8 8
10 10 10 10 10
11 11 11 11 11

I jak tutaj ustawić pętlę żeby czytała liczbami a nie wersami? Można założyć, że wiemy ile jest wierszy i kolumn w pliku tekstowym.

20.11.2008
16:50
[2]

na zaś [ Konsul ]

oddzielaj liczby od znaku " ".

odpowiednik explode w php?:)

20.11.2008
16:50
[3]

Regis [ ]

Przeciez zwykly cin wczyta Ci to w ten sposob, jesli tylko przekierujesz standardowe wejscie na niego.

20.11.2008
16:56
[4]

swee [ Gunslinger ]

Jakieś sugestie zapisu? Wersami sobie lecę tak:


ifstream plik("obraz.txt");
int licznik=0;
string wers[100];
while(getline(plik, wers[licznik]))

cout<<wers[licznik]<<endl;
licznik++;


Standardowo › to wąsiaste nawiasy

20.11.2008
17:03
[5]

QrKo_ [ ]

Skoro mozna zalozyc ile jest wierszy i kolumn to zakladam ze mozna rowniez zalozyc ile jest konkretnie liczb, wtedy:

#include <iostream>
#include <fstream>

using namespace std;

int main()

int *tab;
int ilosc_liczb;
ifstream plik ("plik.txt");
plik >> ilosc_liczb;
tab = new int[ilosc_liczb];
for(int i=0; i<ilosc_liczb ; i++)

plik >> tab[I];
cout << tab[I];

system("PAUSE");


A plik.txt wyglada tak:
15
8 8 8 8 8
10 10 10 10 10
11 11 11 11 11

Dynamiczna tablica utworzona na tyle liczb ile potrzeba + petelka wstawiajaca po kolei liczby i przy okazji wypisujaca je.

20.11.2008
17:10
[6]

swee [ Gunslinger ]

A wiesz, że działa? ;) Dzięki wielkie.
To niestety nie jest koniec programu, idę bić się dalej.

23.11.2008
11:46
[7]

swee [ Gunslinger ]

Dobra, jestem już na końcu mojego programu. Problem pojawił się znowu w banalnej rzeczy, tym razem dziad nie chce progować tej tablicy. Ma to wyglądać, że znajduje maksymalną wartość z pliku tekstowego, dzieli go na 2 i potem sprawdza każdą wartość z tablicy: jeśli jest większa od połówki to zamienia ją na 1, jeśli mniejsza to na 0. No i co? No i nie działa. Doszedłem do takiego czegoś:


#include<iostream>
#include<fstream>
#include<stdio.h>
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include<sstream>
#include <string.h>
#include <stdlib.h>


using namespace std;

int main()

int *tab;
int ilosc_liczb;
double m=0;
int z1;
float s;
int j;
double ss;
int zero=0;
int jeden=1;


ifstream plik ("test2.txt");
plik >> ilosc_liczb;
tab = new int[10];
for(int i=0; i<10 ; i++)

plik >> tab;
z1=(tab);
cout << z1 << endl;
if(m<tab)

m = tab;


printf("\n");
printf("Najwieksza wartost %g", m);
printf("\n");
s = m/2;
ss = static_cast<int>(s);
printf("Srodek zakresu %g",ss);
printf("\n");
for(j=0; j<10 ; j++)

if (tab[j]<s)

tab[j]=0;
printf("%g",tab[j]);


printf("%g",tab[j]);
printf("\n");

system("PAUSE");




Wyświetla, połówki zamiast każdej liczby, podwójne wartości pokazuje przy liczbach mniejszych od połówki.
Plik .txt na jakim pracuje to

255 255 255 255 255 255 100 100 200 100 100
(istotne jest, żeby miał 11 liczb)


23.11.2008
12:33
[8]

swee [ Gunslinger ]

Drobne poprawki wprowadzone, ale dalej nie chce działać poprawnie


#include<iostream>
#include<fstream>
#include<stdio.h>
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include<sstream>
#include <string.h>
#include <stdlib.h>


using namespace std;

int main()

int *tab;
int ilosc_liczb;
double m=0;
int z1;
float s;
int j;
double ss;
int zero=0;
int jeden=1;
int tab2[10];
int k=1;


ifstream plik ("test2.txt");
plik >> ilosc_liczb;
tab = new int[10];
for(int i=0; i<10 ; i++)

plik >> tab;
z1=(tab);
cout << z1 << endl;
if(m<tab)

m = tab;


printf("\n");
printf("Najwieksza wartosc %g", m);
printf("\n");
s = m/2;
ss = static_cast<int>(s);
printf("Srodek zakresu %g",ss);
printf("\n");
printf("\n");
for(j=0; j<10 ; j++)

if (tab[j]<ss)


printf("0");
tab2[j]=0;




if (tab[j]>ss)


printf("1");
tab2[j]=1;



//printf("%g",tab[j]);
printf("\n");


printf("\n");
for (k=1; k<10; k++)

printf("%g", tab2[k]);
printf("\n");

system("PAUSE");





Zobaczcie co robi: najpierw faktycznie znajduje liczby większe i mniejsze ale już ich nie zapisuje do tab2, bo gdy na końcu ją wyświetlam to wypisuje 127 czyli środek zakresu.
Pomocy!

23.11.2008
12:58
smile
[9]

na zaś [ Konsul ]

zdecydowanie to polecam Ci wkleic kod na dpaste.com i zapodać link, bo gol po prostu kastruje kod. usuwa formatowanie, zamienia nawiasy i zamienia [i ] na pochylenie:)

23.11.2008
13:10
smile
[10]

swee [ Gunslinger ]

już wiem co miałem źle, pisałem %g, zamiast %d... Głupi ten c++ jest ;)
Ale dzięki, pewnie jeszcze kilka razy napiszę co z tym programem jest nie tak.

23.11.2008
13:48
[11]

swee [ Gunslinger ]

Już jest git, został ostatni punkt programu: program ma stworzyć nowy plik .txt już z zamienionymi wartościami

było
255 255 255 100 255
255 176 255 100 255

ma być
1 1 1 0 1
1 0 1 0 1

Potrafię to zrobić jeśli chodzi o jeden wiersz, ale tu będziemy mieli 2 i więcej. Muszę zrobić więc jakiś tegesik który policzy ile jest wartości w jednym wierszu, czyli co ile liczb pojawia się "\n". Znalazłem coś takiego jak data.peek ale nie mam pojęcia jak tego dziada użyć.

kod:

23.11.2008
15:55
[12]

swee [ Gunslinger ]

up dla ludzi dobrej woli

© 2000-2025 GRY-OnLine S.A.