#4 Staon
Super, děkuji!
Příspěvky odeslané z IP adresy 178.255.169.–
Ahoj, začinám s Céčkem a jedu dle učebnice od Pavla Herouta.
Zadání příkladu bylo takové, abych si zkusil funkci závorek v podmínce a uvědomil si jejich rozdíl a důležitost. To jsem pochopil.
Ale v přiloženém vyřešeném příkladě je u prvního if, while, které pokud dobře chápu, čeká na to, až c = '\n' a pokud to nastane, tak cyklus ukončí. Vůbec nechápu proč to tam je a proč to bez toho nefunguje. A co konkrétně znamená "vyprázdnění bufferu klávesnice".
Díky za rady a vysvětlení "polopatě".
/*
* cv05.c v.2.0
*
* Chybna priorita v nacitani a v porovnavani
* ==========================================
*
*/
#include <stdio.h>
int main(void)
{
int c;
/* spravna priorita */
printf("Zadej velke pismeno (A az Z): ");
if ((c = getchar()) >= 'A' && c <= 'Z') {
printf("Spravna priorita operatoru:\n");
printf("Bylo zadano pismeno s ASCII hodnotou: %d\n", c);
}
/* vyprazdneni bufferu klavesnice */
while (getchar() != '\n')
;
/* chybna priorita */
printf("Zadej velke pismeno (A az Z): ");
if (c = getchar() >= 'A' && c <= 'Z') {
printf("Chybna priorita operatoru:\n");
printf("Bylo zadano pismeno s ASCII hodnotou: %d\n", c);
}
return 0;
}
Zdravím, chtěl bych Vás poprosit o radu.
Naprogramoval jsem tento program
program retezce;
uses vyskyt;
var danyText: string; co: char;
begin
writeln('Tento program Vam vypise, kolikrat se dane pismeno, ktere si zvolite,');
writeln('ve Vami zvolenem retezci pismen vyskytuje + na jakem miste stoji ');
writeln('prvni a posledni znak tohoto typu');
writeln;writeln;
writeln('Zadejte znakovy retezec: ');
readln(danytext);
writeln;writeln;
writeln('Zadejte pismeno, ktere chcete vyhledat: ');
readln(co);
writeln('Pismeno je zde: ',PocetVyskytu(danyText,co));
writeln('Toto pismeno: ',co,' je zde na: ',PrvniVyskyt(danyText,co),' miste.');
writeln('Toto pismeno: ',co,' je zde na: ',PosledniVyskyt(danyText,co),' miste od konce.');
end.
a tento modul k němu
unit Vyskyt;
interface
function PocetVyskytu(danytext: string; co: char): integer;
function PrvniVyskyt(danyText: string; co: char): integer;
function PosledniVyskyt(danytext: string; co: char): integer;
implementation
function PocetVyskytu(danytext: string; co: char): integer;
var index, pocetShod: integer;
begin
index:=1;
pocetShod:=0;
while index<= length(danytext) do
begin
if danyText[index]= co then
inc(pocetShod);
inc(index);
end;
PocetVyskytu:=pocetShod;
end;
function PrvniVyskyt(danyText: string; co: char): integer;
var index:integer;
begin
index:=1;
while index<= length(danyText) do
begin
if danyText[index] = co then break;
inc(index);
end;
if index<= length(danyText) then PrvniVyskyt:=index else
PrvniVyskyt:=0;
end;
function PosledniVyskyt(danyText: string; co: char): integer;
var index:integer;
begin
index:=length(danyText);
while index >0 do
begin
if danyText[index] = co then break;
dec(index);
end;
PosledniVyskyt:= index;
end;
end.
Vše funguje jak má, kromě výpis, na kterém místě je poslední zvolený znak, vypisuje mi to první a ne poslední. Děkuji za rady.
#2 KIIV
Děkuji moc. Nyní jsem program poupravil, vše jde, akorát tu mám takový malý detail.
Program mi vypíše mocniny od 1 do 10, ale mocninu čísla 10 mi vypíše 2x, jak mohu tento problém vyřešit? Děkuji
program project1;
var n:integer;
function mocnina: integer;
var vysledek,poc: integer;
begin
poc:=1;
while poc<=10 do
begin
vysledek:=poc*poc;
vysledek:=vysledek*poc;
poc:=poc+1;
writeln(vysledek);
end;
mocnina:=vysledek;
end;
function SoucetCelychCisel(n: integer): integer;
var soucet,i : integer;
begin
soucet:=0;
i:=0;
while i<=n do
begin
soucet:=i+soucet;
i:=i+1;
end;
SoucetCelychCisel:=soucet;
end;
procedure NactiVstupOdUzivatele;
begin
write('Zadej cele cislo n: ') ;
read(n);
end;
begin
write('Tento program vam vypise tabulku tretich mocnin cisel od 1 do 10');
write(' + soucet vsech celych cisel od 1 do zvoleneho cisla n');
writeln('treti mocnina cisel je: ');
NactiVstupOdUzivatele;
writeln('Tabulka mocnin: ');
writeln(mocnina);
writeln;
writeln('Soucet celych cisel je: ',SoucetCelychCisel(n));
end.
Zdravím, mám problém, napsal jsem tento program a ani se mi nezkompiluje.
Kompilátor hlásí chybu: project1.lpr(15,12) Fatal: Syntax error, ";" expected but "identifier SOUCETCELYCHCISEL" found
Nevíte v čem je problém? Děkuji předem
program project1;
var n:integer;
function mocnina: integer;
var vysledek,poc: integer;
begin
poc:=1;
while poc<=10 do
begin
vysledek:=poc*poc;
vysledek:=vysledek*poc;
poc:=poc+1;
write(vysledek);
end;
function SoucetCelychCisel: integer;
var soucet,i : integer;
begin
soucet:=1;
i:=1;
while i<=n do
begin
soucet:=i+soucet;
i:=i+1;
end;
SoucetCelychCisel:=soucet;
end;
procedure NactiVstupOdUzivatele;
begin
write('Zadej cele cislo n: ') ;
read(n);
end;
begin
write('Tento program vam vypise tabulku tretich mocnin cisel od 1 do 10');
write(' + soucet vsech celych cisel od 1 do zvoleneho cisla n');
writeln('treti mocnina cisel je: ');
NactiVstupOdUzivatele;
write(mocnina);
write(SoucetCelychCisel);
end.