Anonymní profil Keyzio – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Keyzio – Programujte.comAnonymní profil Keyzio – Programujte.com

 

Příspěvky odeslané z IP adresy 78.80.54.–

C / C++ › kontrola přetečení
25. 11. 2012   #167576

   

int prom = 1000; //limits.h mam
unsigned int b;


while(1)
{
        prom += prom;
        b = (UINT_MAX - prom)
	if (b < prom)
	{
	printf("přetečení");
	return 0;
	}
}
C / C++ › kontrola přetečení
25. 11. 2012   #167575

už jsem na to přišel

C / C++ › kontrola přetečení
25. 11. 2012   #167573

#2 cibule
j to byl překlep prom je deklarována jako unsigned.

Teď jsem tam dal místo znak > porovnání == a stejný výsledek;

Já myslel, že když mám UINT_MAX hodnotu např. 2 200;

a prom 1000, tak když já v druhém cyklu příčtu  2 000 + 1 000 (prom += prom), tak těch zbylých 800 přeteče a budu porovnávat zase 800 == UINT_MAX

C / C++ › kontrola přetečení
25. 11. 2012   #167568

Ahoj, mohu jako podmínku pro přetečení zapsat:

int prom = 1000; //limits.h mam

while(1)
{
	if ((prom += prom) > UINT_MAX)
	{
	printf("přetečení");
	return 0;
	}
}

pořád mi to někde leze do nekonečné smyčky

C / C++ › n rozmerne pole
25. 11. 2012   #167552

Využil jsem porovnání přímo v cyklu, díky za trknutí

C / C++ › n rozmerne pole
25. 11. 2012   #167551

J tak, kouknu na to diky

C / C++ › n rozmerne pole
25. 11. 2012   #167549

#2 reciproke
jinak umim najit nejvetsi cislo....ale nechci porovnavat 30 polozek z pole kdyz jsem jich zadal treba jen 5..to 20ti rozmerne pole je tam kvuli maximu...podminky mam v main programu

C / C++ › n rozmerne pole
25. 11. 2012   #167548

#2 reciproke
ten priklad jsem osekal pro pochopení o hromadu podmínek.

C / C++ › n rozmerne pole
25. 11. 2012   #167546

Ahoj, prosím Vás mám následujíchí pole:

int n;
int i = 0;
int pole[30];

scanf(%d, &n);

while ( i != n)
{
 scanf("%d, &hodnota);
 pole[i] = hodnota;
 ++i;
}

jak mám najít největší číslo z pole pole, když počet porovnávaných čísel závisí na proměnné ?

C / C++ › string
23. 11. 2012   #167428

evidentne by jsi chtel bez jakychkoli znalosti pochopit napr 10.kapitulu. To nepujde

C / C++ › string
23. 11. 2012   #167427

kdyz nemas zaklady, tak asi ne....cykly ti bez zakladu tezko vysvetlim a navic v tom odkazu je mas dost podrobne

C / C++ › string
23. 11. 2012   #167424
C / C++ › string
23. 11. 2012   #167422

neco takoveho ?

int x;
while ( getchar() != 'p')
{
	scanf("%d", &x);
	printf("%ď", x);	
}
// pos stisku klavesy p se cteni ukonci
C / C++ › string
23. 11. 2012   #167421

Pokud to dobre chapu staci ti obycejny scanf() v cyklu a podminku ukonceni das stisk klavesy ?

C / C++ › změna proměnné v cyklu
23. 11. 2012   #167420

#2 Tom
dekuji za trknuti...prisel jsem na to

C / C++ › změna proměnné v cyklu
20. 11. 2012   #167230

#2 Tom
Děkuji jdu se na to vrhnout, dam vědět 

C / C++ › změna proměnné v cyklu
20. 11. 2012   #167225

Ahoj, prosím Vás v prvním cyklu se mi zadaná hodnota uloží do promměnné hodnota.

Je možné, aby se každým dalším cyklem ukládala hodnota do jiné proměnné?

např. z uvedeného příkladu

1 cyklus do prom hodnota

2 cyklus do prom hodnota_2

2 cyklus do prom hodnota_3

int cislo;
int hodnota, hodnota_2, hodnota_3;
n = 5;
i = 0;

while ( i!= 3)
{
	scanf("%d", &cislo);
	hodnota = cislo;
	++i;
}
C / C++ › přetypování
18. 11. 2012   #167088

Ahoj, chtěl bych pochopit kus kódu, tady je úryvek:

  int c1, c2, i;

  printf("Zadejte hexadecimalni cislo (00 az FF) : ");
  c1 = getchar();
  c2 = getchar();

  if (c1 >= '0'  &&  c1 <= '9')
    i = 16 * (c1 - '0');   // Tuto část potřebuji pochopit

a) já tedy napíši znak, např číslo 4 jako znak '4'

b) tomuto znaku je přidělen ASCII kód 52 a znak '0' má kód 48

c) 52 - 48 = 4 což podle ASCII znamená že nyní je v proměnné c1 znak s ASCII kódem 4

d) když tuto proměnnou následovně násobím číslem 16, tak násobím proměnou typu int, protože 16* (ASCII 4) = 64 a to je znak '@'

Jak to, že se mi v průběhu výrazu změnil znak na dekadickou hodnotu typu int ?

C / C++ › kombinatorika
18. 11. 2012   #167010

ahoj, dostal jsem domácí úkol a nevím co je jím myšleno, zadal jsem zatím jen podmínky

 tady je zadání: http://pastebin.com/0i8P6cfP

int ratioSla ( int tot, int err, int cli, int cliMax, double * r )
 {  
  if (tot <= 0 || err <= 0 || cli <= 0 || cliMax <= 0 || tot < err)
   {
    return 0;
   }
 }
C / C++ › 2 podminky naraz
12. 11. 2012   #166544

tak ja umím v Ubuntu v terminalu akorat prelozit program ale debuger spustit neumim.

Ale jinak jsem ocekaval ze po vyhodnoceni prvni podminky jako TRUE to po me bude chtit dalsi znak

C / C++ › 2 podminky naraz
12. 11. 2012   #166541

Ahoj, prosím vás, proč se mi spouští při splnění podmínky zároveň kód pro nesplnění podmínky ?

Zadal jsem znak "P" a program mi vypsal:

Zadali jste znak: P

zadaný znak není v rozsahu čísel nebo velkých  písmen

#include <stdio.h>

int main()
{
	char a, b;
	a = getchar();
	if ( (a>'A' && a<'Z') || (a>'0' && a<'9'))
	{
		printf("Zadali jste znak: %c\n", a);
	}
	else
	{
		printf("zadaný znak není v rozsahu čísel nebo velkých  písmen\n");
		return 0;
	}

	b = getchar();
	if ( (b>'A' && b<'Z') || (b>'0' && b<'9'))
	{
		printf("Zadali jste znak: %c\n", b);
	}
	else
	{
		printf("zadaný znak není v rozsahu čísel nebo velkých  písmen\n");
		return 0;
	}
}
C / C++ › presný formát
11. 11. 2012   #166490

na zaokrouhleni jsem chtel pouzit floor ale takle mi to prislo nejrychlejsi

C / C++ › presný formát
11. 11. 2012   #166483

#15 KIIV

Já nevím jak to vysvetlit, zkusim sem dat zadani prikladu a snad pochopis co mam udelat

Úkolem je realizovat program, který bude počítat zůstatek na bankovním účtu. Program bude zpracovávat transakce (vklad, výběr) a bude zohledňovat úročení.

Předpokládáme, že banka vede účty v korunách. Svým klientům umožňuje vkládat a vybírat peníze, ale připouští vždy nejvýše jednu operaci za jeden den. Dále, banka je benevolentní a umožňuje neomezený debet. Kreditní zůstatek je úročen kreditní úrokovou mírou, debet je úročen debetní sazbou (která může být odlišná). Úročení probíhá vždy po jednotlivých dnech. Výše zůstatku i výše připsaného/strženého úroku musí být vždy vyjádřena a počítána v korunách a celých haléřích. Všechny částky se zaokrouhlují dolů (tedy připsaný/stržený úrok ve výši 1.3499 bude zpracován jako částka 1.34). V daný den se úročí částka, která byla na účtu v půlnoci, vklad/výběr se v úročení tedy projeví až následující den.

Vstupem programu jsou hodnoty kreditní a debetní úrokové sazby v podobě dvou desetinných čísel. Hodnoty vyjadřují denní úrok v procentech. Následuje seznam transakcí. Každá transakce je tvořena dvěma čísly: dnem provedení transakce a částkou. Transakce jsou na vstupu zadávané seřazené, tedy čísla dne se zvyšují. Kladná částka představuje vklad, záporná částka představuje výběr. Nulová částka znamená zrušení účtu, program na to zareaguje výpisem celkového zůstatku a ukončením.

Výstupem programu je hodnota zůstatku při rušení účtu. Formát výstupu je zřejmý z ukázek níže. Nezapomeňte na odřádkování za výpisem.

Pokud vstup není platný (na vstupu jsou nečíselné nebo nesmyslné hodnoty), program tuto situaci detekuje a vypíše chybové hlášení. Formát chybového hlášení je opět uveden v ukázkách níže. Za chybu je považováno, pokud je na vstupu:

nečíselná hodnota,
pořadí transakcí není správné (čísla dne v transakci netvoří rostoucí posloupnost) nebo
chybějící oddělovač (částka) v zadání transakce.
Pokud program detekuje chybu, přestane se dotazovat na další vstupní hodnoty, vypíše chybové hlášení a ukončí se. Chybu je tedy potřeba detekovat okamžitě po načtení hodnoty (neodkládejte kontrolu vstupních údajů až za načtení celého vstupu). Chybové hlášení vypisujte na standardní výstup (nevypisujte jej na standardní chybový výstup).

Dodržte přesně formát všech výpisů. Výpis Vašeho programu musí přesně odpovídat ukázkám. Testování provádí stroj, který kontroluje výpis na přesnou shodu. Pokud se výpis Vašeho programu liší od referenčního výstupu, je Vaše odpověď považovaná za nesprávnou. Záleží i na mezerách, i na odřádkování. Nezapomeňte na odřádkování za posledním řádkem výstupu (a za případným chybovým hlášením). Využijte přiložený archiv s testovacími vstupy a výstupy a přečtěte si sekci FAQ, jak využít přesměrování vstupů/výstupů k testování Vašeho programu.

Váš program bude spouštěn v omezeném testovacím prostředí. Je omezen dobou běhu (limit je vidět v logu referenčního řešení) a dále je omezena i velikost dostupné paměti (ale tato úloha by ani s jedním omezením neměla mít problém). Testovací prostředí dále zakazuje používat některé "nebezpečné funkce" -- funkce pro spouštění programu, pro práci se sítí, ... Pokud jsou tyto funkce použité, program se nespustí. Možná ve svém programu používáte volání:
int main ( int argc, char * argv [] )
{

  ...
 
  system ( "pause" ); /* aby se nezavrelo okno programu */
  return 0;
}
Toto nebude v testovacím prostředí fungovat - je zakázáno spouštění jiného programu. (I pokud by se program spustil, byl by odmítnut. Nebyl by totiž nikdo, kdo by pauzu "odmáčkl", program by čekal věčně a překročil by tak maximální dobu běhu.) Pokud tedy chcete zachovat pauzu pro testování na Vašem počítači a zároveň chcete mít jistotu, že program poběží správně, použijte následující trik:

int main ( int argc, char * argv [] )
{

  ...

#ifndef __PROGTEST__
  system ( "pause" ); /* toto progtest "nevidi" */
#endif /* __PROGTEST__ */
  return 0;
}
Ukázka práce programu:
Zadejte kreditni urok [%]:
0.01
Zadejte debetni urok [%]:
0.1
Zadejte transakce:
0, 20000
45, -5000
100, 10000
120, 0
Zustatek: 25223.27
Zadejte kreditni urok [%]:
0.02
Zadejte debetni urok [%]:
0.4
Zadejte transakce:
10, 20000
25, -15000
45, -10000
70, 5000
100, 0
Zustatek: -491.27
Zadejte kreditni urok [%]:
abcd
Nespravny vstup.
Zadejte kreditni urok [%]:
0.02
Zadejte debetni urok [%]:
0.3
Zadejte transakce:
5, 2000
0, 3000
Nespravny vstup.
C / C++ › presný formát
11. 11. 2012   #166470

#13 KIIV
no dobře a jak si tedy můžu  vyzkoušet jestli mi aplikace funguje s přesným formátem na řádek když jediné co znám je , že potvrzuji v konzoli enterem?

jinak jsem zkompletoval tento kod:

#include <stdio.h>

int main( int argc, char * argv [] ) {

	double k_urok;
	double d_urok;
	double zustatek = 0;
	int castka;
	double vklad;
	int p_den = 0;
	int den = 0;
	double p_zustatek;
	char carka = ',';
	char mezera = ' ';

	printf("Zadejte kreditni urok [%%]:\n");
	scanf("%lf", &k_urok);
	if ( k_urok <= 0 ) {
		printf("Nespravny vstup.\n");
		return 0;
	}

	printf("Zadejte debetni urok [%%]:\n");
	scanf("%lf", &d_urok);
	if ( k_urok <= 0 ) {
		printf("Nespravny vstup.\n");
		return 0;
	}

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

	printf("Zadejte transakce:\n");
	
	while (1){
		scanf("%d%c%c%d", &den, &carka, &mezera, &castka);
		if (den <= p_den || carka != ',' || mezera != ' '){
			printf("Nespravny vstup.\n");
			return 0;
		}
			p_den = den;
		if (castka < 0 || castka > 0) {
			zustatek += castka;
		}
		if ( castka == 0 ) {
			p_zustatek = zustatek;
			if ( zustatek >= 0 ){
				printf("Zustatek: %.2f\n", (zustatek/100) * k_urok + p_zustatek);
				return 0;
			}
			else {
				printf("Zustatek: %.2f\n", ((zustatek/100) * d_urok) * (-1) + p_zustatek);
				return 0;	
			}
		}
		}
	}
C / C++ › presný formát
11. 11. 2012   #166455

#10 KIIV
u tebe se v konzoli dostanu na dalsi radek hnedka po potvrzeni první cislice a ten formate jak jsi to myslel budu mit akorat,  ze vertikalne pod sebou a ne na radce

C / C++ › presný formát
11. 11. 2012   #166435

Tak úplný zdroják samozřejmě nechci, ale snažím se pochopit proč tak složitě, když o té to funkci nemůžu najít ani zmínku v látce, kterou jsme probírali a to max 3 lekce.

Možná jsem udělal chybu, když jsem vytrhl z kontextu o co vlastně jde, snad se lecos změní:

mám naprogramovat primitivní bankomat s tím, že průběh programu vypadá nějak takto :

Zadejte kreditni urok [%]:
0.02
Zadejte debetni urok [%]:
0.4
Zadejte transakce:
10, 20000
25, -15000
45, -10000
70, 5000
100, 0
Zustatek: -491.27

kde první číslo transakce je den vkladu a druhé číslo vklad/výběr

Zatím jsem vykutil toto:

#include <stdio.h>

int main( int argc, char * argv [] ) {

double k_urok;
double d_urok;
double zustatek = 0;
int castka;
double vklad;
int p_den = 0;
int den = 0;
double p_zustatek;

printf("Zadejte kreditni urok [%%]:\n");
scanf("%lf", &k_urok);
if ( k_urok <= 0 ) {
  printf("Nespravny vstup.\n");
  return 0;
}

printf("Zadejte debetni urok [%%]:\n");
scanf("%lf", &d_urok);
if ( k_urok <= 0 ) {
  printf("Nespravny vstup.\n");
  return 0;
}

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

printf("Zadejte transakce:\n");

for ( ;  ; ){
  scanf("%d %d", &den, &castka );
  if (den <= p_den){
   printf("Nespravny vstup.\n");
   return 0;
  }
   scanf("%d", &castka );
  if (castka < 0 || castka > 0)
   zustatek += castka;
}
  if ( castka == 0 ) {
   if ( zustatek >= 0 ){
    p_zustatek = zustatek;
    printf("Zustatek: %lf\n", (zustatek/100) * k_urok+ p_zustatek);
    return 0;
   }
   else {
    printf("Zustatek: %lf\n", (zustatek/100) * d_urok + p_zustatek);
    return 0;
   }
  }
}
}
C / C++ › presný formát
11. 11. 2012   #166430

když napíše uživatel: "2, 500", tak bych rád abych se číslo 2 uložilo do prom1 a číslo 500 do prom2, ale když uživatel napíše "2 500" tak to nenapsal ve správném formátu, protože mu tam chybí čárka mezi konstantami a neprojde tak podminkou

C / C++ › presný formát
11. 11. 2012   #166426

#3 Radek Chalupa
je to konzolová aplikace....

chci aby uživatlel napsal číselnou hodnut za ní čárku a mazeru a další číselnou hodnotu jinak bude vyvolána výjimka,

Nebo uživatel napíše číselnou hodnotu pak pomocí printf zapíši ", " (čárka mezera) a zase nechám uživatele zadat číslo.

U druhého způsobu nevím jak buď to skočit na předchozí řádek v printf nebo jak ve scanf zabránit skoku na nový řádek

C / C++ › presný formát
11. 11. 2012   #166415

Ahoj, chtěl bych  aby uživatel zadal "číslo, číslo" např:

1, 500

nebo

5, -8000

jak mam docílit, aby musel napsat presny format:

jedine co me jako amatera napadlo je:

scanf("%d, %d", &den, &castka)
C / C++ › provnání hodnot
28. 10. 2012   #165461

#17 Keyzio
Aha, tak jsem na to přišel. Na této stránce: http://www.fit.vutbr.cz/~martinek/clang/gcc.html prezentovali přepínač -lm před soubor.c a ve skutečnosti jsem našel zroj , kde psali přepínač za souborem.c

Takže jsem měl špatně:
 

gcc -std=c99 -Wall -pedantic -g -lm zkouska2.c -o zkouska

a mělo to být:

gcc -std=c99 -Wall -pedantic -g zkouska2.c -lm -o zkouska
C / C++ › provnání hodnot
28. 10. 2012   #165456

Tak přepínač - lm jsem přidal a nic ...dávám k dispozici co jsem s čím prováděl

gcc -std=c99 -Wall -pedantic -g -lm zkouska.c -o zkouska

/*
chybové hlášení je:
/tmp/ccNmdyFZ.o: In function `main':
/home/keyzio/Dokumenty/ccko/zkouska2.c:27: undefined reference to `floor'
collect2: ld returned 1 exit status
*/

//a kód vypadá:

#include <stdio.h>
#include <math.h>

int main()
{
	double A;
	double B;
	double C;
	double D;
	double E;
	double F;

	printf("Zadejte velikost stran prveho trojuhelniku:\n");
	scanf("%lf%lf%lf", &A, &B, &C);

	if ( A + B <= C || A + C <= B || B + C <= A || A <= 0 || B <= 0 || C <= 0 ) {
		printf("Nespravny vstup.\n");	
	}
	else {
		printf("Zadejte velikost stran druheho trojuhelniku:\n");
		scanf("%lf%lf%lf", &D, &E, &F);
			if ( D + E <= F || D + F <= E || E + F <= D || D <= 0 || E <= 0 || F <= 0 ) {
			printf("Nespravny vstup.\n");
		}
			else {
				double ad = A/D;
				ad = floor(ad*1000)/1000;
				printf("%lf", ad);

		}
	}
}

				
C / C++ › provnání hodnot
26. 10. 2012   #165383

#14 vitamin
Moc děkuji za snahu, ale dělám tam psí kusy a nic platné.

Možná je to dáno nějakou souvislostí, kterou ještě neznám, tak zkusím zveřejnit celý kód jestli není chyba jinde:

#include <stdio.h>
#include <math.h>

main()
{
	double A;
	double B;
	double C;
	double D;
	double E;
	double F;

	printf("Zadejte velikost stran prveho trojuhelniku:\n");
	scanf("%lf%lf%lf", &A, &B, &C);

	if ( A + B <= C || A + C <= B || B + C <= A || A <= 0 || B <= 0 || C <= 0 ) {
		printf("Nespravny vstup.\n");	
	}
	else {
		printf("Zadejte velikost stran druheho trojuhelniku:\n");
		scanf("%lf%lf%lf", &D, &E, &F);
			if ( D + E <= F || D + F <= E || E + F <= D || D <= 0 || E <= 0 || F <= 0 ) {
			printf("Nespravny vstup.\n");
		}
			else {
				double ad = A/D;
				ad = floor(ad*1000)/1000;

		}
	}
}
C / C++ › provnání hodnot
26. 10. 2012   #165380

#12 vitamin
No dobře, googli jsem a častou jsou uvedené příklady na tento způsob:

double ad = A/D;
ad = round(ad*1000)/1000; //vložení výsledku do proměnné

ale, ať jsem deklaroval třeba i novou proměnou typu double a zkusil to vložit do ní.

Stále mi to píše tuto chybu:

zkouska2.c:(.text+0x1c4): undefined reference to `round'
collect2: ld returned 1 exit status

 

Keyzio
C / C++ › provnání hodnot
26. 10. 2012   #165376

#10

už mi asi zbývá jen, jak vyřešit zaokrouhlení...nemůžu najít syntaxi pro floor. Chtěl bych něco jako:

	double ad = A/D;
	double floor(ad*10)/1000; /* zde potřebuji zaokrouhlit na tisíciny
Keyzio
C / C++ › provnání hodnot
26. 10. 2012   #165363

A jak tedy porovnám 3 hodnoty mezi sebou ? Tím myslím např. A/D = B/E = C/F = nějaká konstanta ?

Keyzio
C / C++ › provnání hodnot
25. 10. 2012   #165315

Tak mě napadlo je, že porovnám - k ∈ Z \ 0 - ( A == k*B && B == k*E || A == k*B && B == k*F ||A == k*B && C == k*E || A == k*B && C == k*F || atd..................ale nevim jak to zapsat....tím myslím - k ∈ Z \ 0 -

Keyzio
C / C++ › provnání hodnot
25. 10. 2012   #165310

#4 Lukas
j jsem z FITu a zjistil jsem co je za peklo progtest :D jdu na to mrknout Díky

Keyzio
C / C++ › provnání hodnot
25. 10. 2012   #165307

#2 Lukas
no prave a jeste k tomu maji byt podobné i pri rozdilu jedno desetiny...nevite jak na to ?

Keyzio
C / C++ › provnání hodnot
25. 10. 2012   #165305

Ahoj, mam porovnat dva trojúhelníky jestli jsou schodné tzn. jestli jsou ve stejném poměru přičemž se nemůžu spoléhat na pořadí zadaných stran.

Zatím jsem vymyslel toto ale testování podobnosti mi stále chybí a nevím jak na něj.

#include <stdio.h>

main()
{
double A;
double B;
double C;
double D;
double E;
double F;

printf("Zadejte velikost stran prveho trojuhelniku:\n");
scanf("%lf%lf%lf", &A, &B, &C);

if ( A + B <= C || A + C <= B || B + C <= A || A <= 0 || B <= 0 || C <= 0 ) {
  printf("Nespravny vstup.\n");
}
else {
  printf("Zadejte velikost stran druheho trojuhelniku:\n");
  scanf("%lf%lf%lf", &D, &E, &F);
   if ( D + E <= F || D + F <= E || E + F <= D || D <= 0 || E <= 0 || F <= 0 ) {
   printf("Nespravny vstup.\n");
  }
   else {
    printf("rozhodnuti o podobnosti trojuhelniku");
  }
}
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý