Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 03. 06. 2010 13:58

Docctor
Zelenáč
Příspěvky: 15
Reputace:   
 

Čtení z bin souboru v C++

Opět ahoj všem a vás prosím o radu.
V C++ čtu matici ze souboru BIN, sotva však napíšu název souboru, který chci číst a odentruju, tak mi program zhavaruje.
Nevíte proč ???

void Matice::Cti_bin()  {
     char nazev_souboru[40];
     int velikost;
     char znak;
     int i=0,j=0;
     velikost=(pocet_sloupcu-1);
     cout << "Zadej nazev BIN souboru" << endl;
     cin >> nazev_souboru;
     cout << endl;
     ifstream vstup(nazev_souboru, ios::in|ios::binary);
     if (vstup) {
                while (vstup.get(znak)) {
                      Nastav_matici(j,i,(int)znak);
                      i++;
                      if (i==velikost) {
                                       j++;
                                       i=0;
                                       }               
                      }
                      vstup.close();
                }
      else   cout << "Soubor nelze otevrit" << endl;
      }

Offline

  • (téma jako vyřešené označil(a) gladiator01)

#2 04. 06. 2010 18:24

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Čtení z bin souboru v C++

Možná by bylo lepší kdyby jsi sem dal celý kód i tu třídu Matice a funkci  Nastav_matici.


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#3 09. 06. 2010 14:23

Docctor
Zelenáč
Příspěvky: 15
Reputace:   
 

Re: Čtení z bin souboru v C++

no fakt nemuzu na to prijit :((

#include<iostream>
#include<iomanip>
#include<fstream>
#include "matice.h"
#include<string>


using namespace std;

Matice::Matice(int x, int y) {
                   pocet_radku=x;
                   pocet_sloupcu=y;
                   pole=new int *[pocet_radku];
                   for (radky=0;radky<pocet_radku;radky++) pole[radky]=new int[pocet_sloupcu];
                   }

Matice::~Matice() {
                  for (radky=0;radky<pocet_radku;radky++) delete[] pole[radky];
                  delete[] pole;
                  }
// vypsani matice na obrazovku
void Matice::Vypis_matice() {
     for (radky=0;radky<pocet_radku;radky++)
      {
       for (sloupce=0;sloupce<pocet_sloupcu;sloupce++) cout << setw(5) << pole[radky][sloupce];
            cout << endl;
            }
            cout << endl;
       }

// Nastaveni matice
void Matice::Nastav_matici(int x, int y, int z)  {
     radky=x;
     sloupce=y;
     int a=z;
     pole[radky][sloupce]=a;
     }

// cteni matice z textoveho souboru     
void Matice::Cti_txt()  {
     char nazev_souboru[40];
     int velikost;
     int z;
     int i=0,j=0;
     velikost=(pocet_sloupcu-1);
     cout << "Zadej nazev TXT souboru" << endl;
     cin >> nazev_souboru;
     cout << endl;
     ifstream vstup;
     vstup.open(nazev_souboru,ios::in);
     if (vstup) {
                while (vstup>>z,vstup) {
                      Nastav_matici(j,i,z);
                      if (i==velikost) {
                                       j++;
                                       i=-1;
                                       }
                      i++;
                      }                 
                      vstup.close();
                }
     else cout << "Soubor nelze otevrit" << endl;
     }
     
//cteni matice z binarniho souboru
void Matice::Cti_bin()  {
     std::string nazev_souboru;
     int velikost;
     char znak;
     int i=0,j=0;
     const char* c_str();
     velikost=pocet_sloupcu;
     cout << "Zadej nazev BIN souboru" << endl;
     cin >> nazev_souboru;
     cout << endl;
     ifstream vstup(nazev_souboru.c_str(), ios::in|ios::binary);
     if (vstup) {
                while (vstup.get(znak)) {
                     // cout << i << endl;
                     // cout << j << endl;
                      cout << (int)znak << endl; 
                      system("PAUSE");
                      Nastav_matici(j,i,(int)znak);
                      if(i==velikost){
                                    j++;
                                    i=-1;
                                    }
                      i++;
                      }
                      vstup.close();
                }
      else   cout << "Soubor nelze otevrit" << endl;
      }

//zapis matice do textoveho souboru     
void Matice::Zapis_txt() {
     char nazev_souboru[40];
     int velikost;
     int z;
     velikost=(pocet_sloupcu-1);
     cout << "Zadej nazev souboru TXT pro zapis" << endl;
     cin >> nazev_souboru;
     ofstream vystup;
     vystup.open(nazev_souboru,ios::out);
     if (vystup) {
                 for (int i=0;i<=(pocet_sloupcu-1);i++) {
                     for (int j=0;j<=(pocet_sloupcu-1);j++) {
                         vystup << pole[i][j] << endl;
                         }
                     }
                 vystup.close();
                 cout << "Data jsou ulozena" << endl;
                 }
     else cout << "Soubor nelze otevrit" << endl;
     }   
     
// zapis matice do binarniho souboru
void Matice::Zapis_bin() {
     char nazev_souboru[40];
     int velikost;
     velikost=(pocet_sloupcu-1);
     cout << "Zadej nazev souboru BIN pro zapis" << endl;
     cin >> nazev_souboru;
     cout << endl;
     ofstream vystup(nazev_souboru);
     if (vystup) {
                 for (int i=0;i<=(pocet_sloupcu-1);i++) {
                     for (int j=0;j<=(pocet_sloupcu-1);j++) {
                         vystup.put (pole[i][j]) << endl;
                         }
                     }
                 vystup.close();                     
                 cout << "Data jsou ulozena" << endl;
                 }
     else cout << "Soubor nelze otevrit" << endl;
     }
     
//nacteni matice z klavesnice
void Matice::Cti_klavesnice(){
     int z;
     cout << "Zadej pole" << endl;
     for (int i=0;i<=(pocet_sloupcu-1);i++) {
                     for (int j=0;j<=(pocet_sloupcu-1);j++) { 
                         cin >> z;
                         Nastav_matici(i,j,z);
                         }
          }
     cout << endl;
     }
     
//transponovana matice
void Matice::Transpozice() {
     int pom[pocet_radku][pocet_sloupcu];
     for (int i=0;i<=(pocet_sloupcu-1);i++) {
                     for (int j=0;j<=(pocet_sloupcu-1);j++) {
                         pom[i][j]=pole[i][j];
                         }
          }
     for (int i=0;i<=(pocet_sloupcu-1);i++) {
                     for (int j=0;j<=(pocet_sloupcu-1);j++) {
                         pole[j][i]=pom[i][j];
                         }
          }
     }
     
//soucet prvku nad hlavni diagonalou
void Matice::Vypis_souctu_nad() {
     int soucet=0;
     for (int i=0;i<=(pocet_sloupcu-1);i++) {
         for (int j=0;j<=(pocet_sloupcu-1);j++) {
            if (i<j) soucet=soucet+pole[i][j];
        }
     }
     cout << "Soucet prvku nad hl. diagonalou je : " << soucet << endl << endl;
     }
     
//soucet prvku pod hlavni diagonalou
void Matice::Vypis_souctu_pod() {                                                                                                       
     int soucet=0;
     for (int i=0;i<=(pocet_sloupcu-1);i++) {
         for (int j=0;j<=(pocet_sloupcu-1);j++) {
            if (i>j) soucet=soucet+pole[i][j];
        }
     }
     cout << "Soucet prvku pod hl. diagonalou je : " << soucet << endl << endl;
     }
     
// preskupeni radku matice podle souctu
void Matice::Preskup_radky() {
     int pole_soucet[pocet_sloupcu][2];
     int nove_pole[pocet_sloupcu][5];
     int soucet=0;
     int k=0,l=0;
     int pom;
     int pocetradku=0;
     
     for (int i=0;i<=(pocet_sloupcu-1);i++){
         for (int j=0;j<=(pocet_sloupcu-1);j++) soucet=soucet+pole[i][j];
            pole_soucet[i][0]=i;
            pole_soucet[i][1]=soucet;
            soucet=0;         
            }     
     
      // serazeni pole se soucty             
      while (pocetradku !=pocet_sloupcu ) {
      for (int i=0;i<(pocet_sloupcu-1);i++) {
        if (pole_soucet[i][1]>pole_soucet[i+1][1]) { pom=pole_soucet[i+1][0];
                                                     pole_soucet[i+1][0]=pole_soucet[i][0];
                                                     pole_soucet[i][0]=pom;
                                                     pom=pole_soucet[i+1][1];
                                                     pole_soucet[i+1][1]=pole_soucet[i][1];
                                                     pole_soucet[i][1]=pom;
                                                     }
        }
        pocetradku++;
        }
       
    cout << endl;
    for (int o=0;o<pocet_sloupcu;o++){
        for (int p=0;p<pocet_sloupcu;p++) {
            nove_pole[o][p]=pole[pole_soucet[o][0]][p];
            }
        }

       for (int x=0;x<pocet_sloupcu;x++) {
            for (int z=0;z<pocet_sloupcu;z++) {
                pole[x][z]=nove_pole[x][z];
                }
            cout << endl;
            }                           
}

Offline

 

#4 09. 06. 2010 14:25

Docctor
Zelenáč
Příspěvky: 15
Reputace:   
 

Re: Čtení z bin souboru v C++

#include<iostream>

using namespace std;

class Matice {                                              // třída matice
                 
              public :
                     int radky, sloupce;
                     int pocet_radku,pocet_sloupcu;        // promena pocty radku a sloupcu
                     int **pole;                           // ukazatel na pole ukazatelu
                     Matice(int,int);                      // konstruktor
                     ~Matice();                            // destruktor 
                     void Vypis_matice();                  // metoda vypise matici na obrazovku
                     void Nastav_matici(int,int,int);      // metoda nastavi přectenou matici
                     void Cti_txt();                       // metoda cteni matice z txt souboru
                     void Cti_bin();                       // metoda cteni matice z bin souboru
                     void Zapis_txt();                     // metoda zapisu matice do txt souboru
                     void Zapis_bin();                     // metoda zapisu matice do txt souboru
                     void Cti_klavesnice();                // metoda cteni matice z klavesnice
                     void Transpozice();                   // metoda pro transpozici matice
                     void Vypis_souctu_nad();              // metoda pro soucet prvku nad hl. diagonalou
                     void Vypis_souctu_pod();              // metoda pro soucet prvku pod hl. diagonalou
                     void Preskup_radky();                 // metoda přeskupení řádků v matici
                     };

Offline

 

#5 09. 06. 2010 14:58

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Čtení z bin souboru v C++

A v metodě main voláš co?


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#6 09. 06. 2010 23:58

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: Čtení z bin souboru v C++

Je zajimave, ze Doctor pise, ze po vyzvani na zadani filename jej zada a program spadne az pak, i presto, ze nema kdo zavolat konstruktor tridy. Myslim, ze bez main to nejde ani zkompilovat. Moje teorie je, ze funkci main ma, vola z ni konstruktory objektu a pracuje uvnitr ni klasicky interakcne, tedy if-else metody co uzivatel chce s tou matici delat, apod, ovsem chyba bude nekde pri cteni souborů, tedy na volani funcke vstup(...)... Moc to sem asi nepatri, ale co je to ifstream?? neni snad ten datovy typ istream?


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#7 10. 06. 2010 00:43

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Čtení z bin souboru v C++

↑ frank_horrigan:
Kdyby tam měl překlep tak by mu to hlásilo chybu a né spadlo až po přeložení. (Opravdu je to ifstream)


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#8 10. 06. 2010 17:36 — Editoval RePRO (10. 06. 2010 17:38)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Čtení z bin souboru v C++

Docctor:
Zkus dát do komentů ten destruktor. Jo a ukážeš nám main? :-)


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#9 14. 06. 2010 13:30

Docctor
Zelenáč
Příspěvky: 15
Reputace:   
 

Re: Čtení z bin souboru v C++

jj..sry hosi neakou dobu jsem tu nebyl
tady je main

#include <cstdlib>
#include <iostream>
#include "matice.h"


using namespace std;


int menu() {
    int cislo;
    cout << "Zadejte cislo operace :" << endl;
     do {
        cout << "0 = Konec programu" << endl;
        cout << "1 = Zadej matici z klavesnice" << endl;
        cout << "2 = Nacti matici z textoveho souboru" << endl;
        cout << "3 = Nacti matici z binarniho souboru" << endl;
        cout << "4 = Vypis matici na obrazovku" << endl;
        cout << "5 = Zapis matici do textoveho souboru" << endl;
        cout << "6 = Zapis matici do binarniho souboru" << endl;
        cout << "7 = Transponuj matici" << endl;
        cout << "8 = Secti prvky nad hlavni diagonalou" << endl;
        cout << "9 = Secti prvky pod hlavni diagonalou" << endl;
        cout << "10 = Serad sestupne radky matice podle hodnot souctu radku" << endl;
        cin >> cislo;
        cout << endl;
       
        if (cislo < 0 || cislo > 10 ){
                  cout << "Zvolili jste spatne" << endl;
                  cislo='n';
                  }
        }
        while (cislo=='n');
        return cislo - 0;
}
       
       
       
                 


int main(){
    int cislo;
    int rozmer_matice;
    cout << "Zadejte rozmer ctvercove matice : " << endl;
    cin >> rozmer_matice;
    Matice mat(rozmer_matice,rozmer_matice);
    do {
        cislo=menu();
        switch (cislo) {
               case 1: mat.Cti_klavesnice(); break;
               case 2: mat.Cti_txt(); break;
               case 3: mat.Cti_bin(); break;
               case 4: mat.Vypis_matice(); break;
               case 5: mat.Zapis_txt(); break;
               case 6: mat.Zapis_bin(); break;
               case 7: mat.Transpozice(); break;
               case 8: mat.Vypis_souctu_nad(); break;
               case 9: mat.Vypis_souctu_pod(); break;
               case 10: mat.Preskup_radky(); break;
               }
        }       
        while (cislo > 0);
     // mat.~Matice(); 
    return 0;
}

Offline

 

#10 16. 06. 2010 13:30

Docctor
Zelenáč
Příspěvky: 15
Reputace:   
 

Re: Čtení z bin souboru v C++

tak a opět nakonec vyřešeno :) :).....

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson