• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed (C++) Program obliczający kwadraty liczb

Fiszki IT
Fiszki IT
0 głosów
97 wizyt
pytanie zadane 15 kwietnia w C i C++ przez Monika02 Nowicjusz (230 p.)
zamknięte 15 kwietnia przez Monika02

Treść zadania: Program który pobierze dane z pliku wejsciowego, obliczy kwadraty liczb i wyniki zapisze w pliku wyjsciowym. 

Co ja robię tu źle???

#include <iostream>
#include <cmath>
#include <iomanip>
#include <fstream>

using namespace std;

int x,a;

int main ()
{
	std::fstream file;
    file.open("dane.txt", std::ios::in);
  
    if (!file.is_open()) {
        return -1;
    }
    
    int x = 0;
    int input;
    
    while (file >> input) {
        x=pow(a,2);
    }
	
	file.close();
	
	std::cout << "Wynik: " << x << "\n";
  
    file.open("potega.txt", std::ios::out);
  
    if (!file.is_open()) 
	
	return 0;
}

 

komentarz zamknięcia: Rozwiązałam zadanie sama do końca

1 odpowiedź

0 głosów
odpowiedź 15 kwietnia przez tangarr VIP (136,480 p.)
Napiszę ci co robi twój program.
1. Otwiera plik
2. Tak długo jak można z niego odczytać liczbę całkowitą:
    - odczytuje liczbę i zapisz w zmiennej input
    - oblicza zmienną zmiennoprzecinkową przy użyciu funkcji pow(a,2) gdzie zmienna a jest niezdefiniowana (prawdopodobnie zero)
    - przypisuje obliczoną zmienną zmiennoprzecinkową do zmiennej całkowitoliczbowej x
3. Zamyka plik
4. Wyświetla zmienną x
5. Otwiera plik do zapisu
6. Jeżeli plik nie jest otwarty zakończ program zwracając 0
7. Program kończy działanie zwracając wartość domyślną dla funkcji main (tzn 0)
komentarz 15 kwietnia przez Monika02 Nowicjusz (230 p.)

Tyle zrozumiałam co zrobiłam 

#include <iostream>
#include <cmath>
#include <iomanip>
#include <fstream>

using namespace std;

int x,a;

int main ()
{
	std::fstream file;
    file.open("dane.txt", std::ios::in);
  
    if (!file.is_open()) {
        return -1;
    }
    
    
    while (file >> a) {
        x=pow(a,2);
    }
	
	file.close();
	
	std::cout << "Wynik: " << x << "\n";
  
    file.open("potega.txt", std::ios::out);{
    return -1;
	}
    file << x;
  
    file.close(); 
}

 

komentarz 15 kwietnia przez tangarr VIP (136,480 p.)
Teraz wczytujesz wszystkie liczby całkowite z pliku.
Dla każdej obliczasz kwadrat (jako zmienna float) i przypisujesz do zmiennej całkowitej x.
Po zamknięciu pliku wyświetlasz wartość x, która zawiera wynik działania dla ostatniej liczby wczytanej z pliku.

Dodatkowo przypominam, że przypisanie zmiennej float do int powoduje utratę części po przecinku.
komentarz 15 kwietnia przez Monika02 Nowicjusz (230 p.)

Jeśli nie tak. To proszę o pomoc barrrdzo nie wiem o co chodzi. Jestem goła jeśli chodzi o programowanie. To jest jedyne co znalazłam na internecie

#include <iostream>
#include <cmath>
#include <iomanip>
#include <fstream>

using namespace std;

int x,a;

int main ()
{
	fstream file;
    file.open("dane.txt", std::ios::in);
  
    if (!file.is_open()) {
        return -1;
    }
    
    
    while (file >> a) {
        x=pow(a,2);
        cout<<setprecision(20);
        cout<<x<<end1
    }
	
	file.close();
	
	cout << "Wynik: " << x << "\n";
  
    file.open("potega.txt", std::ios::out);{
    return -1;
	}
    file << x;
  
    file.close(); 
}

 

komentarz 15 kwietnia przez tangarr VIP (136,480 p.)

Na starcie programu otwórz dwa pliki. Jeden do odczytu, drugi do zapisu.

Program powinien mieć następującą strukturę

1. otwarcie pliku do odczytu
2. otwarcie pliku do zapisu
3. pętla
    - odczytanie liczby
    - policzenie kwadratu liczby
    - zapisanie wyniku do pliku (oraz spacji lub znaku nowej linii)
4. zamknięcie pliku do odczytu
5. zamknięcie pliku do zapisu

Szczerze odradzam używanie funkcji pow, w tym przypadku może doprowadzić do błędów. Kwadrat liczby x to po prostu wynik operacji x*x. Nie trzeba nic komplikować.

komentarz 15 kwietnia przez Monika02 Nowicjusz (230 p.)

nie wiem jak zrobić 3

#include <iostream>
#include <cmath>
#include <iomanip>
#include <fstream>

using namespace std;

int x,a;

int main ()
{
	fstream file;
    file.open("dane.txt", std::ios::in);
  
    if (!file.is_open()) {
        return -1;
    }
    file.open("potega.txt", std::ios::out);{
    return -1;
	}
    
    file >> a;
        x=a*a;
    
	cout << "Wynik: " << x << "\n";    
    
    file << x;	
    cout << "Wynik: " << x << "\n";   
	file.close(); 
    file.close(); 
}

 

komentarz 15 kwietnia przez tangarr VIP (136,480 p.)

Potrzebujesz dwa osobne pliki

fstream plik1;
fstream plik2;

warunek pętli miałaś prawidłowy

while (plik1 >> liczba) {
    // policz kwadrat
    // zapisz wynik do pliku wyjściowego
}

 

 

komentarz 15 kwietnia przez Monika02 Nowicjusz (230 p.)

O tak?

#include <iostream>
#include <cmath>
#include <iomanip>
#include <fstream>

using namespace std;

int x,a;

int main ()
{
	fstream file1;
    file1.open("dane.txt", std::ios::in);
  
    if (!file1.is_open()) {
        return -1;
    }
    file2.open("potega.txt", std::ios::out);{
    return -1;
	}
    
    while (file1 >> liczba) {
    	cout << "liczby:" << liczba << "\n";
        potega=liczba*liczba;
        file2 << potega;
	}
	cout << "Wynik: " << potega << "\n";    
  
	file1.close(); 
    file2.close(); 
}

 

komentarz 15 kwietnia przez tangarr VIP (136,480 p.)

Jest jeszcze kilka błędów:
1. W linii 18 rozpoczynasz blok kodu kończący program z błędem (zobacz jak to wyglądało 3 linijki wyżej.
2. Zmienne liczba i potega są niezdefiniowane.
3. Linia 27 to jakieś nieporozumienie
4. Przed zamknięciem pliku wyjściowego powinnaś opróżnić jego bufor zapisu (to znaczy wymusić jego zapisanie na dysku)

file2.flush();


Dodatkowe uwagi:
1. Zmienne x i a są nieużywane, ponadto: nie używaj zmiennych globalnych, to bardzo zła praktyka.
2. Linia 23 jest zbędna. Może zostać, abyś wiedziała, która liczba jest przetwarzana.

komentarz 15 kwietnia przez Monika02 Nowicjusz (230 p.)

w lini 17 pokazuje mi błąd

#include <iostream>
#include <cmath>
#include <iomanip>
#include <fstream>

using namespace std;


int main ()
{
	fstream file1;
    file1.open("dane.txt", std::ios::in);
  
    if (!file1.is_open()) {
        return -1;
    }
    file2.open("potega.txt", std::ios::out);
	if (!file2.is_open()){
    return -1;
	}
    
    int liczba,potega;

    while (file1 >> liczba) {
    	cout << "liczby:" << liczba << "\n";
        potega=liczba*liczba;
        file2 << potega;
	}
	cout << "Wynik: " << potega << "\n";    
  
	file1.close(); 
	file2.flush();
    file2.close(); 
}

 

komentarz 15 kwietnia przez Oscar Pasjonat (19,010 p.)
Proponuje używanie ifstream i ofstream odpowiednio. Wtedy od razu kompilator wykryje próby wykonywania operacji "nie w tą stronę".

Flush jest zbędny, close robi wszystko co potrzebne.

Przydałoby się jakoś rozdzielać liczby w pliku wynikowym, bo wyjdzie jeden wielki ciąg cyfr.

@Monika02 - brak deklaracji file2.

Podobne pytania

0 głosów
3 odpowiedzi 14,984 wizyt
0 głosów
1 odpowiedź 576 wizyt
pytanie zadane 27 października 2018 w C# przez aXen Początkujący (390 p.)
0 głosów
0 odpowiedzi 153 wizyt
pytanie zadane 26 grudnia 2019 w C i C++ przez hanry4265 Nowicjusz (120 p.)
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

84,721 zapytań

133,527 odpowiedzi

295,923 komentarzy

55,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...