Dwa programy związane z FUNKCJĄ - pomóżcie :((

0

Witam. Założyłem ten temat gdyż nie dawno rozpocząłem swoją przygodę z programowaniem i przyszło mi zrobic dwa programy w języku C związane z FUNKCJĄ i mam z nimi problem :(

Oto ich treśc:

"
a) Napisz funkcję która wyświetli na ekranie
przyprostokątnej przyjętym znakiem:

void trojkat(int a, char znak);
trojkat(4, ’#’);

b) Napisz funkcję potęgującą x^n:

float potega(float x,int n)
"

Oto ile udało mi się zrobic. Ale naprawdę nie wiem co jest źle. Proszę też o wyrozumiałośc bo na pewno są tam jakieś głupie błędy z mojej strony, no ale to forum jest po to żebym już ich więcej nie popełniał... ;(

Ad.1

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void trojkat (int a, char znak)
{
int i,j;
int x;
x=4;

char y;
y='#';

for(i=0;i<x;i++)
  {
        for (j=0;j<i+1;j++)
        printf("%c", y);
        printf("\n");
  }

}
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
void a;
int x;
x=4;

char y;
y='#';

a=trojkat(x, y);
printf("\n\n\n");
system("PAUSE");
} 

Ad.2

 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
int potega(int x, int n)
{
int i;
float c;
for(i=0;i<n;i++)
{
c*=x;
}
}
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int a,b;
int z;

printf("Podaj liczbe 'a': ");
scanf("%f",&a);
fflush(stdin);
printf("\n\n");

printf("Podaj potege liczby 'a': ");
scanf("%d",&b);
fflush(stdin);
printf("\n\n");

z=potega(a, b);
printf("Wynikiem potegowania jest liczba: ");
printf("%4d", z);

printf("\n\n\n");
system("pause");
}

Pomożecie? :||

0

ad 2. W funkcji 'c' nigdzie nie inicjalizujesz i ma przypadkową wartość, której następnie używasz do mnożenia.

0

yyy, mógłbyś jaśniej :((

0

Jeżeli używasz Code::Blocks, to zrób tak : ctrl+a, prawy klawisz myszy i wybieramy "Format this fila(A style)"
Potęgując musisz w twoim przypadku pomnożyć n razy liczbę x przez siebie samą, a ty mnożysz jakieś śmieci (Bo to dokładnie znajduje się w tej chwili w pamięci) przez x.

#include <stdio.h>
#include <stdlib.h>
int potega(int x, int n)
{
    int i;
    float c = x;
    for(i=1; i<n; i++)
    {
        c *= x;
    }
    return c;
}

int main(int argc, char* argv[])
{
    int a,b;
    int z;

    printf("Podaj liczbe 'a': ");
    scanf("%d",&a);
    fflush(stdin);
    printf("\n\n");

    printf("Podaj potege liczby 'a': ");
    scanf("%d",&b);
    fflush(stdin);
    printf("\n\n");

    z = potega(a, b);
    printf("Wynikiem potegowania jest liczba: ");
    printf("%d", z);

    printf("\n\n\n");
    system("pause");
}
0

Może rzeczywiście masz rację Kopernik jak teraz patrzę.. Poprawiłem ten błąd ale dalej źle liczy :(

Wyświetla różnie - każda potęga dla niego to liczba 1 lub 0.

0

aha..

 float c = x;

dlaczego miałeś tam float ??

drugie

dlaczego nie jesteś konsekwentny w swoich działaniach, raz wczytujesz int %d(tak jak powinieneś) a za chwilę %f. Nie wiem czym to grozi bo ni w ząb nie znam c, ale wiem, że int wczytuje się %d lub %i.

trzecie

jeżeli napisałeś:

int potega(int x, int n)
{
int i;
float c;
for(i=0;i<n;i++)
{
c*=x;
}
}

To sam zadeklarowałeś funkcje która zwraca liczbę całkowitą, a nie widzę tam nigdzie słowa "return".

FORMATUJ KOD!

0

o kurde sorki! Zapomniałem o poleceniu return.

Teraz program chodzi jak należy. Dzięki Kopernik!

P.S odnośnie tego trójkąta, jeżeli ktoś byłby w stanie pomóc to może podam jak on ma wyglądac:

W ten sposób..

0

To zadanie jest również bardzo proste, mam nadzieję, że dojdziesz do niego sam. Celowo nie pisałem pierwszego kodu..

0

kurde źle się te znaczki wyświetlają, forum nie chce wczytac. Zrobie screena:

Ten trójkąt ma wyglądac tak (ze znaczków '#'):

user image

Ma byc z góry założone że przyprostokątne są długości '4'. No ale to jest jeszcze trudniejsze niż program z potęgowaniem :/

0
#include <stdio.h>
#include <stdlib.h>
void trojkat (int a, char znak)
{
    int i,j;
    for(i=0; i<a; i++)
    {
        for (j=0; j<i+1; j++)
            printf("%c", znak);
        printf("\n");
    }
}
int main(int argc, char* argv[])
{
    int x = 10;
    char y = '#';
    trojkat(x, y);
    printf("\n\n\n");
    system("PAUSE");
}

Twoja funkcja była prawie ok, zmieniłem tylko trochę main, wywaliłem dużo niepotrzebnych zmiennych i działa. Mam wrażenie, że nie pisałeś tego sam, mam rację?:)

0

Szczerze mówiąc, naprawdę pisałem oba te programy sam, a błędy są takie dziwne, bo po prostu próbowałem na każdy sposób je wyeliminowac. No i mi się nie udawało :/

0

Ale jak teraz widzę jakie proste błędy popełniłem... Ej Boże Boże.. :/

Dzięki Kopernik wielkie za poprawienie i wytłumaczenie! Da się tutaj dac jakieś 'pomógł' czy coś w tym stylu?

0

Proszę administatora o usunięcie tematu, gdyż problem został rozwiązany! :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.