Powrót   Forum CDRinfo.pl > Różne > Off topic

Off topic Forum poświęcone wszelkim innym tematom.



Witaj Nieznajomy! Zaloguj się lub Zarejestruj

Zarejestrowani użytkownicy mają dostęp do dodatkowych opcji, lepszej wyszukiwarki oraz mniejszej ilości reklam. Rejestracja jest całkowicie darmowa!

Odpowiedz na post
 
Opcje związane z dyskusją Tryby wyświetlania
Stary 21.12.2003, 20:18   #1
Banana Coctail
Banned
 
Avatar użytkownika Banana Coctail
 
Data rejestracji: 27.08.2003
Lokalizacja: Nigdzie
Posty: 2,094
Banana Coctail jak się przyłoży ma szansę zostać specem <150 - 249 pkt>Banana Coctail jak się przyłoży ma szansę zostać specem <150 - 249 pkt>
Turbo Pascal

Właśnie się ucze programowania w tym języku. Napisałem "coś", tylko nie wiem czy dobrze. W tym programie chodzi o obliczenie sumy dwóch liczb i ewentualnie o ich podzieleniu przez dwa. Oto źródło tego programu (obeznanych proszę o pomoc):

program Liczenie;

uses crt;

var a,b,s: real;

begin


clrsrc;

write('Program wykonuje dodawanie i dzielenie ');

writeln('Wprowadz 1 liczbe: ');

read(a);

writeln('Wprowadź 2 liczbe: '):
read(b);

writeln(Czy chcesz podzielić sume tych liczb wpisz TAK lub NIE: ')

if read('TAK') THEN s:=a+b/2 ELSE read('NIE') s:=a=b

end;
write (s);
end;
begin
delay(5000)
end.

Odpowiedź potrzebuje przed godziną 12.00 dnia 22.12.2003
Banana Coctail jest offline   Odpowiedz cytując ten post

  #ads
CDRinfo.pl
Reklamowiec
 
 
 
Data rejestracji: 29.12.2008
Lokalizacja: Sieć globalna
Wiek: 31
Posty: 1227
 

CDRinfo.pl is online  
Stary 21.12.2003, 22:23   #2
andrzejj9
the one
CDRinfo VIP
 
Avatar użytkownika andrzejj9
 
Data rejestracji: 08.12.2002
Lokalizacja: Wrocław
Posty: 17,900
andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>
Ja tam pascala ledwie liznalem jakis czas temu, ale cos w tej linijce mi sie nie podoba:

if read('TAK') THEN s:=a+b/2 ELSE read('NIE') s:=a=b

Poczatek w porzadku, ale zastanawia mnie to po else. Czy nie mozna darowac sobie tego else i napisac po prostu dwa warunki. Bo z tego, co tu jest, jak dla mnie wynika, ze: jezeli wprowadzone zostanie tak, to ma cos tam zrobic, a jezeli nie, to ma zostac wprowadzone nie i wtedy zrobi cos innego. Nie wiem, moze to jest dobrze, bo z drugiej strony, jezeli nie zostanie wprowadzone tak, to bedzie czekal, az zostanie wprowadzone nie, a inne mozliwosci nie bede w ogole brane pod uwage, czyli dobrze.

W kazdym razie nigdzie poza tym nie widze zadnego bledu, ale tak, jak napisalem, pascala zaledwie liznalem, wiec wcale nie musi to znaczyc, ze takiego nie ma
__________________


neverending path to perfection..
andrzejj9 jest offline   Odpowiedz cytując ten post
Stary 21.12.2003, 22:27   #3
andrzejj9
the one
CDRinfo VIP
 
Avatar użytkownika andrzejj9
 
Data rejestracji: 08.12.2002
Lokalizacja: Wrocław
Posty: 17,900
andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>andrzejj9 jest świetnie znany wszystkim <550 - 649 pkt>
a czekaj, jeszcze to mi sie teraz rzucilo w oczy: s:=a=b . Co to ma wlasciwie robic? Chodzilo Ci po prostu o sume? (to po prostu pewnie male przeoczenie).

I jeszcze to poprzednie: s:=a+b/2 . Jezeli to ma byc podzielenie sumy, to chyba trzeba jeszcze jakis nawias dodac (jakkolwiek to sie w Pascalu robilo). Nie pamietam, jak Pascal traktowal kolejnosc dzialan, ale chyba jednak miala ona w nim jakies znaczenie.
__________________


neverending path to perfection..
andrzejj9 jest offline   Odpowiedz cytując ten post
Stary 22.12.2003, 00:15   #4
pawelblu
Recydywista - Wielokrotny
Zlotowicz
CDRinfo VIP
 
Avatar użytkownika pawelblu
 
Data rejestracji: 17.01.2003
Lokalizacja: Wawa
Posty: 5,265
pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>
if read('TAK') THEN s:=a+b/2 ELSE read('NIE') s:=a=b
tej linijki bym tak nie zapisal:
1) s:=a=b s przyjmie wart logiczna: czy a=b
2) s:=a+b/2 s bedzie wynosilo a + polowa b
Poza tym ja bym jednak zrobil oddzielnie read(c) c jako string (i chyba lepiej dla swietego spokoju uzywac readln) czyli
=====
readl(c);
IF c=tak THEN s:=(a+b)/2 ELSE
IF c=nie THEN s:=a+b ELSE
begin
writeln('BLEDNY WPIS');
s:=0
end;
=====
begin
...
end;
write (s);
end;
begin
delay(5000)
end.

Za duzo endow, poza tym lepiej chyba zrobic:
=====
writeln(s);
readkey;
end.
=====
wogole to bym zrobil troche inaczej:

program Liczenie;
uses crt;
var a,b,s: real;
var c: string[3]; (nie pamietam juz dobrze czy tak nalezy)

begin
clrsrc;
writeln('Program wykonuje dodawanie i dzielenie ');
writeln('Wprowadz 1 liczbe: ');
read(a);
writeln('Wprowadź 2 liczbe: ');
read(b);
writeln('Czy chcesz podzielić sume tych liczb wpisz TAK lub NIE:');
readl(c);
IF c='TAK' THEN begin s:=(a+b)/2; writeln(c) end ELSE
IF c='NIE' THEN begin s:=a+b; writeln(c) end ELSE writeln('BLEDNY WPIS');
readkey
end.

Chyba tak

PS. - PASCAL SUX
pawelblu jest offline   Odpowiedz cytując ten post
Stary 22.12.2003, 01:16   #5
pawelblu
Recydywista - Wielokrotny
Zlotowicz
CDRinfo VIP
 
Avatar użytkownika pawelblu
 
Data rejestracji: 17.01.2003
Lokalizacja: Wawa
Posty: 5,265
pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>
Przemyslalem to jeszcze. Rozsadniej bedzie zrobic:
var c: char;
potem
writeln('Jezeli chcesz otrzymac srednia arytmetyczna tych liczb to nacisnij t, a jezeli chcesz otrzymac ich sume to nacisnij n:');
c:=readkey;
IF (c='T') or (c='t') THEN begin s:=(a+b)/2; writeln(c) end ELSE
IF (c='N') or (c='n') THEN begin s:=a+b; writeln(c) end ELSE writeln('BLEDNY WPIS');
writeln('Nacisnij dowolny klawisz zeby zakonczyc');
readkey
end.
pawelblu jest offline   Odpowiedz cytując ten post
Stary 22.12.2003, 03:51   #6
cinma
Samiec - twój wróg!
 
Data rejestracji: 21.06.2003
Lokalizacja: Lublin
Posty: 330
cinma zaczyna zdobywać reputację <1 - 49 pkt>
blagam, uzywajcie komentarzy w swoich kodach koledzy programisci
...a i wciecia sie na pewno przydadza
Kod:
program Liczenie;

uses
  crt;

var
  a, b, suma : Real;
  odp : String;
begin
  clrsrc;  //  czyszczenie ekranu

  WriteLn('Program wykonuje dodawanie i dzielenie.');  //  info

  // wczytanie 1. liczby
  write('Wprowadz 1 liczbe: ');
  ReadLn(a);

  // wczytanie 2. liczby
  write('Wprowadź 2 liczbe: '):
  ReadLn(b);

  // spytanie o dzielenie
  Write(Czy chcesz podzielić sume tych liczb (wpisz TAK lub NIE): ');
  ReadLn(odp);

  suma := a+b;  //  obliczenie sumy
  if (odp = 'TAK') then
    WriteLn('wynik: ', suma/2)  //  wyswietlenie wyniku
  else  //  odp = 'NIE'
    WriteLn('wynik: ', suma);  //  wyswietlenie wyniku

  // nie wiem po co, ale czekamy 5 sek.
  Delay(5000)
end.
cinma jest offline   Odpowiedz cytując ten post
Stary 22.12.2003, 08:35   #7
Banana Coctail
Banned
 
Avatar użytkownika Banana Coctail
 
Data rejestracji: 27.08.2003
Lokalizacja: Nigdzie
Posty: 2,094
Banana Coctail jak się przyłoży ma szansę zostać specem <150 - 249 pkt>Banana Coctail jak się przyłoży ma szansę zostać specem <150 - 249 pkt>
Dzięki ale rąbnołeś się w jednym miejscu brakuje apostrofa ale i tak jest dobrze. Dzięki Ci bardzo cinma. A znasz funkcje która spytałaby by użytkownika "Jeśli chcesz wyjść naciśnij W a jeśli chcesz wykonać jakieś działanie naciśnij T"
Banana Coctail jest offline   Odpowiedz cytując ten post
Stary 22.12.2003, 08:57   #8
pawelblu
Recydywista - Wielokrotny
Zlotowicz
CDRinfo VIP
 
Avatar użytkownika pawelblu
 
Data rejestracji: 17.01.2003
Lokalizacja: Wawa
Posty: 5,265
pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>
masz mnostwo mozliwosci - albo nasz program zrobisz jako funkcje ktorej wykonanie uzaleznisz od instr warunkowej, albo napiszesz po prostu to wszystko w jednej z opcji ifa a druga spowoduje tylko np. writeln(dowidzenia) albo uzyjesz bardzo niemile widzianej instrukcji goto za ktora przynajmniej powinienes zostac upomniany.
Oba programy przesledzilem i jakos braku apostrofa nie zauwazylem.
pawelblu jest offline   Odpowiedz cytując ten post
Stary 22.12.2003, 14:21   #9
cinma
Samiec - twój wróg!
 
Data rejestracji: 21.06.2003
Lokalizacja: Lublin
Posty: 330
cinma zaczyna zdobywać reputację <1 - 49 pkt>
Cytat:
Napisany przez Banana Coctail
A znasz funkcje która spytałaby by użytkownika "Jeśli chcesz wyjść naciśnij W a jeśli chcesz wykonać jakieś działanie naciśnij T"
jak napisal pawelblu - jest wiele mozliwosci, zalezy od tego, co chcesz zrobic
ale ogolnie to mozna zapisac tak:
Kod:
program

// deklaracja typow
// deklaracja zmiennych

var
  odp : Char;
begin
  // tu moze byc jakis kod

  // pytamy o akcje
  Write('Co chcesz zrobic? ');
  ReadLn(odp);

  while (UpCase(odp) <> 'W') do begin  // dopoki uzytkownik nie wpisal 'w' lub 'W'
    case UpCase(odp) of
      // tutaj lista mozliwosci
      'A' : ProceduraA;  // wywolanie procedury A
      'B' : ProceduraB;  // wywolanie procedury B
      'C' : ProceduraC;  // wywolanie procedury C
    else  // podano inna wartosc
      WriteLn('Podales ', odp, ', nie ma takiej mozliwosci.');
    end;  // case

    // pytamy o akcje
    Write('Co chcesz zrobic? ');
    ReadLn(odp)
  end;  // while

  WriteLn('No to konczymy.');

  // tu moze byc jakis kod, ktory wykona sie przed zakonczeniem programu
end.
a ladniej to mozna by tu zrobic funkcje, ktora pyta o akcje i zwraca odpowiednia wartosc, zalezna od odpowiedzi
Kod:
function CoRobimy : Integer;
// funkcja, ktora wyswietla 'menu', pyta uzytkownika
// o akcje i zwraca wartosc odpowiedzi
var
  odp : Integer;
begin
  // pytamy o akcje
  WriteLn('1. procedura pierwsza');
  WriteLn('2. procedura druga');
  WriteLn('3. procedura trzecia');
  WriteLn('0. koniec');
  Write('Co chcesz zrobic? (wpisz 1, 2, 3 lob 0) ');

  // wczytujemy odpowiedz
  ReadLn(odp);

  // zwracamy odpowiedz
  Result := odp
end;  //  CoRobimy

a potem w programie:

// potrzebne doklaracje
  var
    akcja : Integer;
begin
  // jakis kod

  akcja := CoRobimy;  // wczytujemy odpowiedz
  while ( akcja <> 0 ) do begin
    case akcja of
      1 : Procedura1;
      2 : Procedura2;
      3 : Procedura3;
    else
      WriteLn('Nie ma takiej akcji.')
    end;

    akcja := CoRobimy;  // wczytujemy odpowiedz
  end;  // while

  // jakis kod na koniec
end.
__________________
"Chciałam powiedzieć tak, że 90% oprogramowania w Europie rzeczywiście pisanych jest w Microsoft Office, natomiast ok. 5% w Linuksie."
Podsekretarz Stanu w Ministerstwie Edukacji Narodowej i Sportu Hanna Kuzińska

Ostatnio zmieniany przez cinma : 22.12.2003 o godz. 14:39
cinma jest offline   Odpowiedz cytując ten post
Odpowiedz na post


Twoje uprawnienia:
Nie możesz rozpoczynać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz umieszczać załączników
Nie możesz edytować swoich postów

BB codeWłączone
EmotikonkiWłączone
Kody [IMG]Włączone
Kody HTML są Wyłączone

Teleport


Wszystkie czasy w strefie CET. Aktualna godzina: 23:47.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.