Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Błąd w funkcji.


Rekomendowane odpowiedzi

Opublikowano

Witajcie. Otóż mam do czynienia z tym kodem: 

#include <iostream>
using namespace std;

long funkcja(int stopien, long liczba);
//*******************************************************//
int main()
{

    int poczatek;
    int koniec;
    cout << "Wpisz pierwsza liczbe danego zbioru liczbowego: ";
    cin >> poczatek;
    cout << "Wpisz liczbe zamykajaca zbior liczbowy: ";
    cin >> koniec;

    for (int i = poczatek; i <= koniec; i++)
    {
        cout << "Wpisales liczbe: " << i << endl;
        cout << "Liczba podniesiona do kwadratu: " << funkcja(2, i) << endl;
        cout << "Liczba podniesiona do szescianu: " << funkcja(3, i) << endl;
    }
    //************************************************//
    long funkcja(int stopien, long liczba);
    {
        long wynik = liczba;
        for (int i = 1; i<stopien; i++);
        {
            wynik = wynik * liczba; //potegowanie
        }
        return wynik;
        //************************************************//
    }
}
 

Program nie może zostać skompilowany przez rzekomy błąd o treści: 

error: 'liczba' was not declared in this scope|
error: 'stopien' was not declared in this scope|
Analogiczne uchybienie widzę po skompilowaniu dokładnie odwzorowanego kodu, którego autorem jest Jerzy Grębosz w książce "Symfonia C++". W jaki sposób mogę rozwikłać ten problem? 
 
Opublikowano

Wyrzuć samą funkcję po za funkcję main.

Po nawiasach podczas tworzenia funkcji nie dajemy średnika.

 

Powinno działać.

#include <iostream>
using namespace std;

long funkcja(int stopien, long liczba)
{
    long wynik = liczba;
    for (int i = 1; i<stopien; i++)
    {
        wynik = wynik * liczba; //potegowanie
    }
    return wynik;
}

int main()
{

    int poczatek;
    int koniec;
    cout << "Wpisz pierwsza liczbe danego zbioru liczbowego: ";
    cin >> poczatek;
    cout << "Wpisz liczbe zamykajaca zbior liczbowy: ";
    cin >> koniec;

    for (int i = poczatek; i <= koniec; i++)
    {
        cout << "Wpisales liczbe: " << i << endl;
        cout << "Liczba podniesiona do kwadratu: " << funkcja(2, i) << endl;
        cout << "Liczba podniesiona do szescianu: " << funkcja(3, i) << endl;
    }
}

TuByłaSygnatura.png

Opublikowano

 

Wyrzuć samą funkcję po za funkcję main.

Po nawiasach podczas tworzenia funkcji nie dajemy średnika.

 

Powinno działać.

#include <iostream>
using namespace std;

long funkcja(int stopien, long liczba)
{
    long wynik = liczba;
    for (int i = 1; i<stopien; i++);
    {
        wynik = wynik * liczba; //potegowanie
    }
    return wynik;
}

int main()
{

    int poczatek;
    int koniec;
    cout << "Wpisz pierwsza liczbe danego zbioru liczbowego: ";
    cin >> poczatek;
    cout << "Wpisz liczbe zamykajaca zbior liczbowy: ";
    cin >> koniec;

    for (int i = poczatek; i <= koniec; i++)
    {
        cout << "Wpisales liczbe: " << i << endl;
        cout << "Liczba podniesiona do kwadratu: " << funkcja(2, i) << endl;
        cout << "Liczba podniesiona do szescianu: " << funkcja(3, i) << endl;
    }
}

Pomogło, dziękuję. Aczkolwiek po uruchomieniu aplikacji nastąpił kolejny defekt. Otóż wartość liczby podniesionej do kwadratu jest równa liczbie podniesionej do szescianu. Wiesz, czym to jest  spowodowane?

Opublikowano

 

long funkcja(int stopien, long liczba)
{
    long wynik = 1;
    for (int i = 0; i<stopien; i++)
    {
        wynik = wynik * liczba; //potegowanie
    }
    return wynik;
}

Ogólnie kod jest brzydko napisany, no ale się uczysz.

Po rozpoczęciu pętli nie dajemy ';'

TuByłaSygnatura.png

Opublikowano
long funkcja(int stopien, long liczba)
{
    long wynik = 1;
    for (int i = 0; i<stopien; i++)
    {
        wynik = wynik * liczba; //potegowanie
    }
    return wynik;
}

Ogólnie kod jest brzydko napisany, no ale się uczysz.

Po rozpoczęciu pętli nie dajemy ';'

 

Jeszcze raz dziękuję Ci za pomoc. Posiadasz może jakieś wskazówki dotyczące przejrzystości kodu, zaprojektowania jego układu? 

Opublikowano

Kod można skrócić w ten sposób:

#include <iostream>
using namespace std;
long funkcja(int stopien, long liczba) { 
long wynik = 1; 
for (int i = 0; i<stopien; i++) { 
wynik *= liczba; //krócej, a oznacza to samo 
} 
return wynik; } 
int main() { 
int poczatek, koniec; //dwie zmienne typu int, zatem mozna napisac je w jednej linii, oddzielone przecinkiem 
cout << "Wpisz pierwsza liczbe danego zbioru liczbowego: "; 
cin >> poczatek; 
cout << "Wpisz liczbe zamykajaca zbior liczbowy: "; 
cin >> koniec; 
for (int i = poczatek; i <= koniec; i++) { 
cout << "Wpisales liczbe: " << i <<"/nLiczba podniesiona do kwadratu: " << funkcja(2, i) << "/nLiczba podniesiona do szescianu: " << funkcja(3, i) << endl; // '/n' oznacza przejscie do nowej linii 
} 
}

Opublikowano

 

Kod można skrócić w ten sposób:

#include <iostream>
using namespace std;
#include <iostream>
using namespace std;
long funkcja(int stopien, long liczba) { 
long wynik = 1; 
for (int i = 0; i<stopien; i++) { 
wynik *= liczba; //krócej, a oznacza to samo } 
return wynik; } 
int main() { 
int poczatek, koniec; //dwie zmienne typu int, zatem mozna napisac je w jednej linii, oddzielone przecinkiem 
cout << "Wpisz pierwsza liczbe danego zbioru liczbowego: "; 
cin >> poczatek; 
cout << "Wpisz liczbe zamykajaca zbior liczbowy: "; 
cin >> koniec; 
for (int i = poczatek; i <= koniec; i++) { 
cout << "Wpisales liczbe: " << i <<"/nLiczba podniesiona do kwadratu: " << funkcja(2, i) << "/nLiczba podniesiona do szescianu: " << funkcja(3, i) << endl; // '/n' oznacza przejscie do nowej linii 
} 
}

 

Jeszcze można byłoby skrócić, a taki cout długi jest nieczytelny.

TuByłaSygnatura.png

Opublikowano

Na prawdę dużo czytelniejszy! Miodzio żeś to poprawił!

 

 

Jeśli już mówimy o nieczytelności to jedyna rzecz jaka jest nieczytelna w tym kodzie to podanie najpierw stopnia a potem liczby

 

Opublikowano

1. Kod dajesz w code - tak to wygląda jak jakaś papka.

2. ; przy { dajemy przy klasach, ale tutaj nie widać programowania obiektowego.

 

Jeszcze raz dziękuję Ci za pomoc. Posiadasz może jakieś wskazówki dotyczące przejrzystości kodu, zaprojektowania jego układu? 

 

Na początku funkcji/int main() zrób wszystkie funkcje, które możesz zrobić.

Funkcje pisz na początku.

Oddzielaj funkcje i int main() enterem, nie komentarzem.

pyhvh7E.png


 


Opublikowano

Jeszcze raz dziękuję Ci za pomoc. Posiadasz może jakieś wskazówki dotyczące przejrzystości kodu, zaprojektowania jego układu? 

Jest wiele sposobów na przejrzystość kodu.

Jeśli chodzi o wcięcia to możesz w code:blocks prawym przyciskiem na edytor "Format use Astyle"

Dobrym pomysłem jest również używanie kolejnych cout, gdy robimy kilka linijek tekstu.

Ogólnie kod jaki napiszesz jest przejrzysty, gdy po 2-3 tygodniach wrócisz do niego i będziesz rozumiał co, gdzie jest.

 

Jeśli chcesz dowiedzieć się więcej o przejrzystości kodu poszukaj za pomocą google.

Jest wiele dodatkowych technik na utrzymanie porządku w kodzie.

Istnieją również takie niepisane zasady, że zmienne zaczynamy małą literą.

 

Porównaj twój kod z tym kodem.

#include <iostream>
using namespace std;

long potega(long podstawaPotegi, int stopien)
{
    long wynik = 1;

    for (int i = 0; i < stopien; i++)
        wynik *= podstawaPotegi; //potegowanie

    return wynik;
}


int main()
{

    int iloscLiczb;
    long liczbaDoPotegi;

    cout << "Ile liczb chcesz wpisac?: ";
    cin >> iloscLiczb;

    for (int i = iloscLiczb; i > 0; i--)
    {
        cout << "\nWpisz liczbe: ";
        cin >> liczbaDoPotegi;

        cout << "Wpisales liczbe: " << liczbaDoPotegi << endl;
        cout << "Liczba podniesiona do kwadratu: " << potega(liczbaDoPotegi, 2) << endl;
        cout << "Liczba podniesiona do szescianu: " << potega(liczbaDoPotegi, 3) << endl;
    }

}

Co do funkcji, my piszemy od lewej strony do prawej. Więc czujemy dyskomfort jeśli mamy napisać wpierw wykładnik potęgi, który jest po prawej podstawy potęgi w indeksie górnym.

Na matematyce pewnie też nie zapisywałeś na początku wykładnika po prawej, a potem po lewej podstawy.

TuByłaSygnatura.png

Opublikowano

Istnieją również takie niepisane zasady, że zmienne zaczynamy małą literą.

 

Funkcje też mają taką zasadę np. obliczSumę - jeżeli nazwa funkcji to zlepek kilku wyrazów to pierwszy piszemy z małej, a pozostałe z dużej litery, albo wskaźniki gdzie * daje się tuż przy int, albo nazwie wskaźnika - chociaż do tego to mu trochę daleko.

pyhvh7E.png


 


Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...