Ĺadny brzuch
Witam wszystkich forumowiczy. Mój problem prezentuje się następująco:
1. Mam plik o rozszerzeniu *.in w którym zapisane są liczby/cyfry.
2. Cyfry te wczytywane są do naszego programu poprzez przekierowanie standardowego wejścia (w konsoli: *.exe < *.in) oraz przypisywane są poszczególnym zmiennym.
3. Panuje tu jednak następująca zasada: pierwsza cyfra przypisywana jest do zmiennej a, druga cyfra do zmiennej b, lecz kolejne cyfry mają być elementami tablicy o rozmiarze równym zmiennej a. Dalsze cyfry nie są brane pod uwagę.
4. Na otrzymanych w ten sposób zmiennych oraz elementach tablicy wykonywane są dalsze operacje.
Dla przykładu: zawartość naszego pliku *.in prezentuje się w taki sposób:
4 2 9 5 8 6 1 0
Zmienna a wynosi 4, zmienna b wynosi 2 a w skład tablicy wchodzą cyfry 9, 5, 8, 6. Jedynkę oraz zero opuszczamy.
Kompletnie brak mi pomysłu w jaki sposób te liczby można umieścić w tablicy jako jej elementy.
Oczywiście należy dodać, że zawartość pliku *.in czyli wartości jak i ilość cyfr nie są mi znane. Może się zdażyć że będzie ich nawet 80 więc nie możemy tu operować na konkretnych danych.
Proszę o pomoc i pozdrawiam,
foloors
Jeśli chcesz utworzyć dynamiczną tablicę:int x = 5; int* tablica = new int[x];Odwołujesz się do niej jak do zwykłej tablicy.
Użytkownik Konrad_st edytował ten post 08 listopad 2005, 22:58
Może być problem w sposobie jaki chcesz to zrobić. Nie jestem pewien :unsure: , ale liczba argumentów w wywołaniu programu jest ograniczona (czyli chyba jest ograniczona). Proponowałbym podanie jako parametru wywołania nazwy pliku do odczytu, a dalej, to j.w., czyli dynamiczna tablica na podstawie pierwszego parametru.
Jeżeli dobrze zrozumiałem to nie widzę żadnego problemu... przecież jeżeli mamy podaną ilość liczb do odczytu to nieważne ile jest ich w całym pliku.
#include<iostream> #include<fstream> int main() { //stworzenie strumienia i otwarcie go do odczytu std::fstream fDane("dane.in", std::ios::in); int a,b; //odczyt ze strumienia 2 pierwszych liczb fDane >> a >> b; //stworzenie odpowiedniej tablicy int *nTab = new int[a]; //petla odczytująca kolejne a elementów ze strumienia i zapisująca je do tablicy for(int i=0; i<a; i++) fDane >> nTab[i]; //prezentacja zebranych zmiennych std::cout << "W zmiennej a=" << a <<", a w zmiennej b=" << b << std::endl; std::cout << "A tablica wyglada tak:"; for(int i=0; i<a; i++) std::cout << " " << nTab[i]; //usunięcie z pamięci tablicy dynamicznej delete [] nTab; //zamknięcie strumienia fDane.close(); std::cin.get(); return 0; }
//edit: poprawiłem nagłówki
Użytkownik reVis edytował ten post 09 listopad 2005, 12:41
No tak, to by było oki, ale zauważ: "w konsoli: *.exe < *.in". A więc liczby mają być parametrami programu. Wydaje mi się, że liczba parametrów jest ograniczona do 10, prazynajmnie tak było w skryptach bashowych. Jeżeli tak samo jest dla plików .exe, to nie będzie można wprowadzić tablicy o rozmiarze 80.
No tak, to by było oki, ale zauważ: "w konsoli: *.exe < *.in". A więc liczby mają być parametrami programu. Wydaje mi się, że liczba parametrów jest ograniczona do 10, prazynajmnie tak było w skryptach bashowych. Jeżeli tak samo jest dla plików .exe, to nie będzie można wprowadzić tablicy o rozmiarze 80. Nie zajarzyłeś :P "*.exe < plik.txt" powoduje przesłanie do standardowego wejście programu danych zawartych w plik.txt, czyli jeśli masz "int i=0; cin >> i;" zamiast podawać to z klawiatury, program pobierze to z pliku :)
Dziękuje Wam za wszystkie rady. Rozwiązałem to w taki sposób. Proste, sami przyznajcie... Jakoś słabo myślałem jak zakładałem ten temat:P
int a, b; cin >> a >> b; int* tablica1 = new int[a]; for(int i=0; i < a; i++) { cin >> tablica1[i]; } ... delete [] tablica1;
---
Pozdrawiam,
foloors
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
1. Mam plik o rozszerzeniu *.in w którym zapisane są liczby/cyfry.
2. Cyfry te wczytywane są do naszego programu poprzez przekierowanie standardowego wejścia (w konsoli: *.exe < *.in) oraz przypisywane są poszczególnym zmiennym.
3. Panuje tu jednak następująca zasada: pierwsza cyfra przypisywana jest do zmiennej a, druga cyfra do zmiennej b, lecz kolejne cyfry mają być elementami tablicy o rozmiarze równym zmiennej a. Dalsze cyfry nie są brane pod uwagę.
4. Na otrzymanych w ten sposób zmiennych oraz elementach tablicy wykonywane są dalsze operacje.
Dla przykładu: zawartość naszego pliku *.in prezentuje się w taki sposób:
4 2 9 5 8 6 1 0
Zmienna a wynosi 4, zmienna b wynosi 2 a w skład tablicy wchodzą cyfry 9, 5, 8, 6. Jedynkę oraz zero opuszczamy.
Kompletnie brak mi pomysłu w jaki sposób te liczby można umieścić w tablicy jako jej elementy.
Oczywiście należy dodać, że zawartość pliku *.in czyli wartości jak i ilość cyfr nie są mi znane. Może się zdażyć że będzie ich nawet 80 więc nie możemy tu operować na konkretnych danych.
Proszę o pomoc i pozdrawiam,
foloors
Jeśli chcesz utworzyć dynamiczną tablicę:int x = 5; int* tablica = new int[x];Odwołujesz się do niej jak do zwykłej tablicy.
Użytkownik Konrad_st edytował ten post 08 listopad 2005, 22:58
Może być problem w sposobie jaki chcesz to zrobić. Nie jestem pewien :unsure: , ale liczba argumentów w wywołaniu programu jest ograniczona (czyli chyba jest ograniczona). Proponowałbym podanie jako parametru wywołania nazwy pliku do odczytu, a dalej, to j.w., czyli dynamiczna tablica na podstawie pierwszego parametru.
Jeżeli dobrze zrozumiałem to nie widzę żadnego problemu... przecież jeżeli mamy podaną ilość liczb do odczytu to nieważne ile jest ich w całym pliku.
#include<iostream> #include<fstream> int main() { //stworzenie strumienia i otwarcie go do odczytu std::fstream fDane("dane.in", std::ios::in); int a,b; //odczyt ze strumienia 2 pierwszych liczb fDane >> a >> b; //stworzenie odpowiedniej tablicy int *nTab = new int[a]; //petla odczytująca kolejne a elementów ze strumienia i zapisująca je do tablicy for(int i=0; i<a; i++) fDane >> nTab[i]; //prezentacja zebranych zmiennych std::cout << "W zmiennej a=" << a <<", a w zmiennej b=" << b << std::endl; std::cout << "A tablica wyglada tak:"; for(int i=0; i<a; i++) std::cout << " " << nTab[i]; //usunięcie z pamięci tablicy dynamicznej delete [] nTab; //zamknięcie strumienia fDane.close(); std::cin.get(); return 0; }
//edit: poprawiłem nagłówki
Użytkownik reVis edytował ten post 09 listopad 2005, 12:41
No tak, to by było oki, ale zauważ: "w konsoli: *.exe < *.in". A więc liczby mają być parametrami programu. Wydaje mi się, że liczba parametrów jest ograniczona do 10, prazynajmnie tak było w skryptach bashowych. Jeżeli tak samo jest dla plików .exe, to nie będzie można wprowadzić tablicy o rozmiarze 80.
No tak, to by było oki, ale zauważ: "w konsoli: *.exe < *.in". A więc liczby mają być parametrami programu. Wydaje mi się, że liczba parametrów jest ograniczona do 10, prazynajmnie tak było w skryptach bashowych. Jeżeli tak samo jest dla plików .exe, to nie będzie można wprowadzić tablicy o rozmiarze 80. Nie zajarzyłeś :P "*.exe < plik.txt" powoduje przesłanie do standardowego wejście programu danych zawartych w plik.txt, czyli jeśli masz "int i=0; cin >> i;" zamiast podawać to z klawiatury, program pobierze to z pliku :)
Dziękuje Wam za wszystkie rady. Rozwiązałem to w taki sposób. Proste, sami przyznajcie... Jakoś słabo myślałem jak zakładałem ten temat:P
int a, b; cin >> a >> b; int* tablica1 = new int[a]; for(int i=0; i < a; i++) { cin >> tablica1[i]; } ... delete [] tablica1;
---
Pozdrawiam,
foloors