funkcja podstawa

Odpowiedz Nowy wątek
2014-12-20 20:56
Panix
0

Program początkowo wygłądał tak:

int main ( ) 
{
 
  int a =5;
  double b = 25.5;  
  int c;
   if ( a > 10 ) 
      {
    a = a +5;   
    b = b - 2;
    c = a +b * b;
      }
    printf("\n Wynik =%d", c );
 
    int a1 = 7;
    int b1 = -5;
 
    if ( a1 > 10 ) 
      {
        a1 = a1 +5;   
        b1 = b1 - 2;
        c = a1 +b1 * b1;
      }
    printf("\n Wynik 2 =%d", c );
 
    int a2 = 7;
    int b2 = -5;
 
    if ( a2 > 10 ) 
      {
        a2 = a2 +5;   
        b2 = b2 - 2;
        c = a2 +b2 * b2;
      }
    printf("\n Wynik 3 =%d", c );
 
} 

A tak po mojej nieudanej przeróbce

#include<stdio.h>
 
void obliczenia (int s1, int s2, int s3)
{
        int wynik, y, z;
 
        if (s1>10)
                {
                z=s1+5;
                y=s2-2;
                wynik=s1+s2*s2;
                }
        printf("Wynik =%d\n", wynik);
}
 
int main()
{
        int a=5;
        double b=25.5;
        int c;
 
        obliczenia(a, b, c);
 
        int a1=7;
        int b1=-5;
 
        obliczenia(a1, b1, c);
 
        int a2=7;
        int b2=-5;
 
        obliczenia(a2, b2, c);
}
 

NIe oczekuje gotowca ale chociaż jakiejś odpowiedzi

Pozostało 580 znaków

2014-12-20 21:16
0

Może powiesz co to ma robić?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-20 21:21
Panix
0

To ma zwracać trzy wyniki. Najpierw gdy podstawimy a, b potem gdy podstawimy a1, b1 i gdy podstawimy a2, b2 :-)

Pozostało 580 znaków

2014-12-20 21:26
0
#include<stdio.h>
 
void obliczenia (int s1, int s2, int s3)
{
        int wynik=0, y, z;  // wynik tez musi byc zainicjaliwane bo nie zwróci ci prawidłowego wyniku
 
        if (s1>10)
                {
                z=s1+5;
                y=s2-2;
                wynik=s1+s2*s2;
                }
        printf("Wynik =%d\n", wynik);
}
 
int main()
{
        int a=5;
        int b=25; // nie mozesz przekazywac do funkcji liczby dobule jest ona oczekuje int'a
        int c= 1;  // musi byc zainicjalizowana wartosc
 
        obliczenia(a, b, c);
 
        int a1=7;
        int b1=-5;
 
        obliczenia(a1, b1, c);
 
        int a2=7;
        int b2=-5;
 
        obliczenia(a2, b2, c);
}

Kod nie spełnia zasad poprawnego pisania/kodowania

edytowany 1x, ostatnio: Westen, 2014-12-20 22:03

Pozostało 580 znaków

2014-12-20 21:32
1

Ponieważ we wszystkich przypadkach warunek (a>10) nie jest prawdą to, można całość skrócić do:

int main() 
  {
   int c;
   printf("\n Wynik =%d", c );
   printf("\n Wynik 2 =%d", c );
   printf("\n Wynik 3 =%d", c );
   return 0;
 }

Więc może zdecyduj się co trzeba wyświetlić wtedy kiedy nie obliczasz tego c.

Postaraj się też nie zwracać uwagi na post od @Westen bo uczy złego podejścia.

Zauważyłem inicjalizacje c=1, więc może tak:

#include <stdio.h>
 
int calc(int a,double b) { return a>10?(int)(b*b-2*b+a+9):1; }
 
int main()
  {
   printf("Wynik1 = %d\n",calc(5,25));
   printf("Wynik2 = %d\n",calc(7,-5));
   printf("Wynik3 = %d\n",calc(7,-5));
   return 0;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2014-12-20 21:45
@_13th_Dragon Mój post miał mu wytknąć błędy jakie popełnił( w pierwszym poście wyraźnie zaznaczył, ze oczkuje podpowiedzi, nie gotowca) , a nie nauczyć zasad dobrego pisania kodu. Starałem się pisać jego stylem , gdyż będzie mu łatwiej zrobić diff'a , a jeśli on ma taki styl to nie znaczy , że zawsze będzie taki miał. Ale widzę , że masz podejście do nauki w stylu "stachanowca". - Westen 2014-12-20 21:58
No to dodaj przy okazji przynajmniej komentarz - że tak się nie robi. - _13th_Dragon 2014-12-20 22:00
Tak , myślę , że to był by dobry kompromis - Westen 2014-12-20 22:02

Pozostało 580 znaków

2014-12-20 21:48
Panix
0

NIe mogę ingerować w ten kod u góry, tylko zapisać go za pomocą funkcji. Najchętniej bym tak zrobił ale nie mogę 13th_Dragon. Dzięki wam za pomoc :)

Pozostało 580 znaków

2014-12-20 22:58
Panix
0

Mam kolejny problem. Mam wydzielić powtarzające się fragmenty kodu w postaci funkcji. O to program:

 
#include <stdio.h>
 
int main ( ) 
{
 
  int x =-50;
  double b = 25.5;  
  int c;
 
     while( x < 0 ) 
      {
        x = x +b/2;   
        b = 2 * b + 0.5;
        c += x + b * b;
      }
    printf("\n Wynik =%d", c );
 
     while( x < 25 ) 
      {
        x = x +b/2;   
        b = 2 * b + 0.5;
        c += x + b * b;
      }
    printf("\n Wynik =%d", c );
 
}

Chciałem go najpierw przeanalizować bo niewiem czy na pewno go rozumiem.

Pierwsza pętla wykonuje się dopóki x< 0 czyli według mnie napis "Wynik =" zostanie wyświetlony w pierwszej pętli dwa razy ponieważ najpierw x będzie wynosić -50, potem -37 a potem będzie większe od zera. Wynik przybierze losowe wartości bo zmiennej c nie została przypisana wartość.

Druga pętla wykonuje się x<25 czyli pętla wykona się tyle samo razy, więc napis wyświetli się dwa razy.

A to program który udało mi się napisać

#include<stdio.h>
 
int obliczenia (int s1, double s2, int s3)
{
 
        s1=s1+s2/2;
        s2=2*s2+0.5;
        s3+=s1+s2*s2;
 
        printf("Wynik %d\n", s3);
 
}
 
int main()
{
        int x=-50;
        double b=25.5;
        int c;
 
                while(x<0)
                        {
                        obliczenia(x, b, c);
                        }
                while(x<25)
                        {
                        obliczenia(x, b, c);
                        }
}
 

Pozostało 580 znaków

2014-12-20 23:02
Panix
0

Mój błąd, nie zauważyłem że printf jest poza klamrami.
Lecz nadal mam pytania co do mojego poprawionego programu bo powstaje mi nieskonczona pętla

Pozostało 580 znaków

2014-12-20 23:15
0

Jako że przekazujesz x przez wartość, to jego wartość ciągle wynosi -50, więc pętla nigdy się nie kończy.
Prostsze rozwiązanie, żeby się nie babrać wskaźnikami:

int obliczenia(int s1, double s2, int s3)
{
    ...
    return s1;
}
 
int main()
{
    ...
    while (x < 0) 
    {
        x = obliczenia(x, b, c);
    }
    ...
}

Przy czym Twój program nie jest równoważny pierwotnemu. Pierwszy miał printf poza pętlą, a Twój ma wewnątrz.

Pozostało 580 znaków

2014-12-20 23:15
0

Czy widzisz gdzieś zmianę tego X? Bo ja - nie.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-20 23:35
Panix
0

to

 x = x +b/2;   

i to s1=s1+s2/2;


 to nie jest to samo?
Tu następuje zmiana wartości x i przypisania nowej czy nie?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0