Nie działa. Program do liczenia pól w zależności od podanych wartości i przy określonej l. boków.

0

Program ma prosić o wybranie jednego lub dwóch boków. W zależności od tego co wybierzemy, prosi o podanie długości tych/tego boku. Później wylicza pole kwadratu i koła, lub prostokąta i dwóch kół. Biorąc podane długości jako boki lub promienie.
Uczę się dopiero programowania, więc naprawdę nie widzę błędu. Chciałbym to zrozumieć, więc proszę o jak najobszerniejsze tłumaczenie.

#include <stdio.h>

#define pi 3.14159

//float jedna(int dlugosc);
//float dwie(int dl1, int dl2);

void main(void)
{
	char c, d, e;
	float kw, ko, pr, ko2, ko3;
	
	c=d=e='0';
	
	printf("Wybierz, czy chcesz podac jedna, czy dwie dlugosci prostych:\n");
	 while(c=getchar()!=EOF)
	 {
	 if(c==1){
	 
	 printf("Podaj liczbe:");
	 d=getchar();
	 printf("Jesli podana dlugosc( %d ) jest bokiem kwadratu, to jego pole wynosi: %f \n", d, kw );
 	 printf("Natomiast, jesli jest promieniem kola, jego pole wynosi: %f\n", ko);
 	 	kw=d*d;
	ko=pi*d*d;
 	 
	 }
	 
	 
	 else if(c==2){
	 printf("Podaj dwie liczby, zatwierdzajac kazda enterem:\n");
	 d=getchar();
	 e=getchar();	 
     printf("Jesli podane dlugosci( %d, %d ) sa bokami prostokatu, to jego pole wynosi: %f \n", d, e, pr );
 	 printf("Natomiast, jesli sa to promienie kol, ich pola wynosza: %f i %f \n", ko2, ko3);
 	 	pr=d*e;
	ko2=pi*d*d;	 
	ko3=pi*e*e;
	 }
	 
	 
	 else
	 printf("Podaj cyfre 1 lub 2\n");
	 }
	 
	kw=d*d;
	ko=pi*d*d;
	
	pr=d*e;
	ko2=pi*d*d;	 
	ko3=pi*e*e;


return 0;	
}
 

P.S.Czy można zrobić tak, żeby funkcja zwracała wartości dwóch zmiennych?

0

Zacząłbym od wyrzucenia tego kodu i napisania do od nowa, tym razem pamiętając o podzieleniu kodu na logiczne funkcje (bo programowanie zorientowane faraonowo jest ZŁE) oraz o odpowiednim formatowaniu kodu.

Czy można zrobić tak, żeby funkcja zwracała wartości dwóch zmiennych?

Możliwe jest to poprzez przekazywanie przez referencję lub zwracanie struktury.

0

No plan był, żeby zrobić to najpierw tak a później na funkcjach(stad te deklaracje zamknięte w komentarzu). Żebym najpierw zrobił program, który działa. A później wiedząc co i jak bawił się z funkcjami.

Może i warto by napisać na nowo. Jednak ja nie wiem co nie działa:D

0

Jednak ja nie wiem co nie działa

Dlatego musisz napisać go od nowa: to jest napisane tak źle i nieczytelnie, że prędzej napiszesz ten program od zera, aniżeli odnajdziesz jakiś błąd.
Btw, po co to jest to getchar i dlaczego nie zrobisz po ludzku scanf?

0

Podstawowy błąd:
W matematyce możesz zapisać P=πr2, gdzie r=3
Zaś w programowaniu musisz zapisać r=3, P=π
r2

0

Patryk: Bo uczę się z książki ANSI C i tam bylo getchar póki co;) Wiem, że później jest scanf. Czym one się różnią?

Dragon: Chodzi o to, że program musi najpierw mieć przypisanie wartości do zmiennej, a później operacje na niej? No logiczne.

1

Czym one się różnią?

getchar wczytuje jeden znak ze standardowego wejścia i nie czeka na żaden enter, ani nic innego.
Przykładowo int x = getchar(); wczyta do zmiennej x kod ASCII wpisanego znaku.

scanf czyta i konwertuje dane zgodnie z przekazanym formatem, a potem zapisuje do zmiennej.
Na przykład scanf("%i ", &x); wczyta do zmiennej x liczbę całkowitą ze standardowego wejścia.

0

Czyli zazwyczaj się korzysta ze scanf?

0

Właściwie, to chyba zawsze :P

0
thigrand napisał(a):

Czyli zazwyczaj się korzysta ze scanf?
Nie. Zazwyczaj się korzysta z tego co jest potrzebne dla realizacji programu. W przypadku wprowadzania danych liczbowych - przeważnie scanf.

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