• 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

VPS Starter Arubacloud
0 głosów
1,342 wizyt
pytanie zadane 15 kwietnia 2021 w C i C++ przez Monika02 Początkujący (270 p.)
zamknięte 15 kwietnia 2021 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 2021 przez tangarr Mędrzec (154,780 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 2021 przez Monika02 Początkujący (270 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 2021 przez tangarr Mędrzec (154,780 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 2021 przez Monika02 Początkujący (270 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 2021 przez tangarr Mędrzec (154,780 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 2021 przez Monika02 Początkujący (270 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 2021 przez tangarr Mędrzec (154,780 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 2021 przez Monika02 Początkujący (270 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 2021 przez tangarr Mędrzec (154,780 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 2021 przez Monika02 Początkujący (270 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 2021 przez Oscar Nałogowiec (29,290 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 30,964 wizyt
0 głosów
1 odpowiedź 1,265 wizyt
pytanie zadane 27 października 2018 w C# przez aXen Początkujący (390 p.)
0 głosów
0 odpowiedzi 615 wizyt
pytanie zadane 26 grudnia 2019 w C i C++ przez hanry4265 Nowicjusz (120 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...