Zaloguj się, aby obserwować  
Bartuc

Język C / C++ / C# / Java - pytania, problemy...

1979 postów w tym temacie

Dnia 21.03.2006 o 21:18, Radziula napisał:

z tego wzgledu ze niektore zagadnienia są napisane w niezrozumialy sposob.Tak wogole to mam
15 lat , nie za wczesnie sie biore za jezyk programowania ?


Rotfl;) Tu mnie chłopie zagiąłeś. Brać się można nawet wtedy, gdy masz 12 (jak ja:P)- ale wtedy oczywiście trudniej może być Ci niektóre rzeczy skumać. I 15 to IMO w sam raz, jeśli nie troszkę za późno, jeśli chcesz poznać wiele technik programistycznych, musisz zacząć jak najwcześniej, bo jest wiele do nauczenia.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

>Brać się można nawet wtedy, gdy masz 12 (jak ja:P)- ale wtedy oczywiście trudniej może być Ci niektóre rzeczy skumać. I 15 >to IMO w sam raz, jeśli nie troszkę

Ja zaczalem jak mialem 14 lat i wszystko czego wtedy nie skumalem nadrobilem w najblizszym czasie-szczegolnie podczas ostatniego roku kiedy zajalem sie tym na powaznie

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam pytanie.. zakładamy, że mamy:

char napis[1024];
cout << "Podaj napis\n";
cin >> napis;
cout << napis;

Jak odczytać numer konkretnego znaku z tablicy napis (w asci)? i zapisać go do jakiejś zmiennej np. int..?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ponawiam pytanie bo czegoś nie kumam.
Mam plik tekst1.txt z jakąś treścią.
Chcę, żeby program odczytał z niego całą treść (wszystkie znaki) i zapisał ją w programie do zmiennej char teks1[1234]
// 1234 - tu sobie mogę chyba wpisać co chcę, nie? To jakby górny limit znaków - dobrze rozumiem?
potem chcę, żeby wszystkie znaki ze zmiennej tekst1 zapisać do innej zmiennej char tekst2[1234] i potem z tej zmiennej zapisać je do pliku tekst2.txt

Chciałbym żeby ktoś mi pomógł to zrobić, to chyba nie jest trudne. Ważne jest, żeby zrobić to dokłądnie jak opisałem. Dzięki z góry za pomoc..

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.05.2006 o 19:50, Don Lizak napisał:

Ponawiam pytanie bo czegoś nie kumam.

a co konkretnie nie kumasz?

Dnia 20.05.2006 o 19:50, Don Lizak napisał:

Mam plik tekst1.txt z jakąś treścią.
Chcę, żeby program odczytał z niego całą treść (wszystkie znaki) i zapisał ją w programie do
zmiennej char teks1[1234]

nie traktuj tego jak pojedynczej zmiennej - teks1 to wskaznik do tablicy znakow

Dnia 20.05.2006 o 19:50, Don Lizak napisał:

// 1234 - tu sobie mogę chyba wpisać co chcę, nie? To jakby górny limit znaków - dobrze rozumiem?

niby tak, ale pamietaj ze numeracja jest od 0 i ze ostatni element w przypadku tekstu jest casami uzywany przez znak konca

Dnia 20.05.2006 o 19:50, Don Lizak napisał:

potem chcę, żeby wszystkie znaki ze zmiennej tekst1 zapisać do innej zmiennej char tekst2[1234]
i potem z tej zmiennej zapisać je do pliku tekst2.txt

dowolna petla
text2=text1

Dnia 20.05.2006 o 19:50, Don Lizak napisał:

Chciałbym żeby ktoś mi pomógł to zrobić, to chyba nie jest trudne. Ważne jest, żeby zrobić
to dokłądnie jak opisałem. Dzięki z góry za pomoc..

nie bardzo moge dokladniej bo jestem na wakacjach i nie mam manuali i kompilatora do c :(

jak znasz angielski
http://www.google.pl/search?hl=pl&q=c%2B%2B+file&btnG=Wyszukaj+w+Google&lr=

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.05.2006 o 20:03, gmx napisał:

a co konkretnie nie kumasz?


Mój post był odpwiedzią na inny, staary..

Dnia 20.05.2006 o 20:03, gmx napisał:

nie traktuj tego jak pojedynczej zmiennej - teks1 to wskaznik do tablicy znakow


Czemu nie? Chcę potem na tym tekscie pracować tj. zmieniać konktente znaki. Myślełem o string ale tam się chyba nie da manipulować pojedyńczymi i konkretnymi znakami..

Dnia 20.05.2006 o 20:03, gmx napisał:

niby tak, ale pamietaj ze numeracja jest od 0 i ze ostatni element w przypadku tekstu jest
casami uzywany przez znak konca

wiem, wiem :)

Dnia 20.05.2006 o 20:03, gmx napisał:


Google! Znam tą stronę :D Myślałem, że tylko ja.. ang też znam ale w c++ jest amator.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dobra umiem już zapisać do pliku..
Jak teraz zawartość pliku (cały tekst) wyświetlić w programie?!

ofstream plik("c:/plik.txt");

cout << plik; // <-- To nie działa...

ofstream plik("c:/plik.txt",ios::app);
cout << plik; // <-- To też nie działa...

plik.close();

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.05.2006 o 21:12, Don Lizak napisał:

ang też znam ale w c++ jest amator.


Trochę widać ;) w C++ nie używałbyś tablicy zmiennych typu char do przechowywania napisów w większości sensownych programów :)

Chodziło o coś takiego (od razu uprzedzam że pisanie takich programów to proszenie się o kłopoty)?

#include <fstream>

using namespace std;

int main()
{
const int rozmiar = 2000;
ifstream tekst1_txt("tekst1.txt", ios::in);
char ch, tekst1[rozmiar], tekst2[rozmiar];
int x;

for(x = 0;x < rozmiar;x++)
tekst1[x] = tekst2[x] = 0;

x = 0;
while(tekst1_txt.read(&ch, 1) && x < rozmiar)
tekst1[x++] = ch;

for(x = 0;x < rozmiar;x++)
tekst2[x] = tekst1[x];

ofstream tekst2_txt("tekst2.txt", ios::out);
for(x = 0;x < rozmiar && tekst2[x] != 0;i++)
tekst2_txt.write(&tekst2[x], 1);

return 0;
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.05.2006 o 21:51, Don Lizak napisał:

Dobra umiem już zapisać do pliku..


ofsteam służy do zapisywania (outstream). Do czytania służy ifstream:

#include <fstream>
#include <iostream>

using namespace std;

int main()
{
ifstream tekst1_txt("tekst1.txt", ios::in);
char ch;
while(tekst1_txt.read(&ch, 1))
cout << ch;

tekst1_txt.close();
return 0;
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.05.2006 o 19:50, Don Lizak napisał:

Chciałbym żeby ktoś mi pomógł to zrobić, to chyba nie jest trudne. Ważne jest, żeby zrobić
to dokłądnie jak opisałem. Dzięki z góry za pomoc..


W czystym ANSI C:
#include < string.h >
#include < stdio.h >
void main()
{
int ile = 0;
char tekst1[1234], tekst2[1234];
FILE*plik = fopen("tekst1.txt", "r");

ile = fread(tekst1, 1, (sizeof tekst1) - 1, plik); /*wczytanie*/
tekst1[ile] = 0; /*poprawne zakończenie łańcucha - zabezpieczenie dla strncpy*/
strncpy(tekst2, tekst1, (sizeof tekst1) - 1); /*kopiuje jako tekst*/
plik = fopen("tekst2.txt", "w");
fwrite(tekst2, strlen(tekst2), 1, plik); /*zapisuje tekst do buforów dyskowych drugiego pliku*/
fclose(plik); /*czyści bufory i zamyka plik czyli zapisuje końcówkę pliku*/
}

W C++:
#include < string >
using namespace std;
void main()
{
string tekst1, tekst2;

ifstream plik("tekst1.txt");
for(string tymcz(); plik >> tymcz; tekst1 += ' ') tekst1 += tymcz; //wczytywanie
tekst2 = tekst1; //kopiowanie
ofstream plik2("tekst2.txt");
plik2 << tekst2; //zapisywanie
} //zamykanie pliku zrealizowane przez system w momencie niszczenia plik2.

Programiki nie zawierają żadnych procedur sprawdzających poprawność operacji plikowych.
W C wczytuje się i kopiuje tylko tyle tekstu ile jest w tekst1.txt (jezeli jest mniej niż 1234, to kopiuje mniej). Zapisuje tyle ile jest tekstu w char tekst2[].
W C++ wczytuje się tyle znaków ile fabryka dała (na pewno 65535 znaków :), ale za to usuwane są białe znaki i końce wierszy (tekst z pliku jest rozwijany do długiego ciągu znaków przedzielonych spacjami).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.05.2006 o 21:12, Don Lizak napisał:

Chcę potem na tym tekscie pracować tj. zmieniać konktente znaki. Myślełem o string
ale tam się chyba nie da manipulować pojedyńczymi i konkretnymi znakami..

Da się. Jak masz np.
string witaj = "witaj";
witaj[0]=''u'';
cout<<witaj;
To na ekranie otrzymasz "uitaj";

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Trzeba przyznać, że Thinking in (...) to są bardzo dobre książki. A w dodatku jak ktoś chce może mieć za darmo, bo są wszystkie dostępne w necie na stronie autora. Tyle że ja wolę wersję papierową, chce mieć dobry wzrok trochę dłużej ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 21.05.2006 o 10:42, Vel Grozny napisał:

> Chcę potem na tym tekscie pracować tj. zmieniać konktente znaki. Myślełem o string
> ale tam się chyba nie da manipulować pojedyńczymi i konkretnymi znakami..
Da się. Jak masz np.
string witaj = "witaj";
witaj[0]=''u'';
cout<<witaj;
To na ekranie otrzymasz "uitaj";


Tak, myślałem, że takie coś tylko na tablicach można robić. string jest lepszy bo właściwie nie musze ustalać górnego limitu znaków.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 21.05.2006 o 10:56, Don Lizak napisał:

Tak, myślałem, że takie coś tylko na tablicach można robić.


Nie tylko - w C++ zaleca się korzystanie z iteratorów - operator indeksu jest podatny na błędy (nie ma kontroli zakresu), chociaż zazwyczaj dość szybki. Oprócz tego są jeszcze metody, jak np. replace, erase, insert itp. służące manipulacji napisami.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 21.05.2006 o 10:44, michal19 napisał:

Trzeba przyznać, że Thinking in (...) to są bardzo dobre książki. A w dodatku jak ktoś chce
może mieć za darmo, bo są wszystkie dostępne w necie na stronie autora. Tyle że ja wolę wersję
papierową, chce mieć dobry wzrok trochę dłużej ;)


Są świetne!
Mam "Thinking in C++" tom1 ~650 stron od Helionu
Resztę książek Eckela mam na twardym.

A z c++ zacząłem od "Programowanie w C++ / Szkołą pisania programów" za 11,80zł od Komputer Świat, taka mała książeczka, gdzie jest wszystko od podstaw i przystępnie napisane :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.05.2006 o 21:12, Don Lizak napisał:

> a co konkretnie nie kumasz?
Mój post był odpwiedzią na inny, staary..

aaaa, to sorrry :) sie rozpedzilem :)

Dnia 20.05.2006 o 21:12, Don Lizak napisał:

> nie traktuj tego jak pojedynczej zmiennej - teks1 to wskaznik do tablicy znakow
Czemu nie?

poniewaz w c++ zmienna tablicy jet tak naprawde tylko wskaznikiem do pierwszego elementu tablicy a to co jest w nawiasie kwadratowym jet tylko o ile ma sie przesunac wzgledem pierwszego. nie wiem jak stoisz z wskaznikami, jak umiesz to sorry, jak nie to polecam- mozna robic cuda :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 27.05.2006 o 18:53, Yamamoto napisał:

Musze się pochwalić : Dziś doszła mi Symfonia c++ standard :D

Tylko się nie śmiać.. co to jest?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować