ďťż

Ł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
  •