NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.
Avatar
Jan Jenda
Člen
Avatar
Jan Jenda:9.11.2017 20:24

Ahoj mohl by mě někdo pomoct, navést jak na úkol. Myslel jsem , že to bude hračka, ale nějak si nevím rady.

Zatím jsem asi snad napsal úkol č. 1, který snad funguje, ještě bych rád zjistil , jak to přepsat do funkce . A kdyby mě někdo navedl s jak na druhý úkol byl bych velmi rád. 3 zatím neřeším dokud nebudou 2 předchozí. Děkuji :

Úkol zde pdf soubor.
https://drive.google.com/…uKDh8Fx/view?…

/**
* Nazev programu:
*
* Autor: Jan Kratka
*
* Datum: 06.11.2017
*/

#include <stdio.h>
#include <stdlib.h>

/*
 *
 */
int main(int argc, char** argv) {
    printf("Jméno: Jan Kratka\n");
    printf("Login: kratka10\n");
    printf("Název úkolu: Úkol č. I\n");

    float v0;
    float v1;
    float t;
    float zrychleni;
    float v;
    float s;



    printf("Zadej počáteční rychlost a koncovou rychlost v kilometrech za hodinu (hodnoty oddelene lomitkem): ");
    scanf("%f/%f", &v0, &v1);
     if ((v0 > 0) && (v1 > 0))
     {



    printf("Zadej dobu zrychlování v hodinách ");
    scanf("%f", &t);
    printf("Zadej dobu pro vypocet drahy a okamzite rychlosti 0.5\n");
    zrychleni = (v1 - v0) / t;
    if (zrychleni > 0)
        printf("Pohyb je zrychlený\n");
    else if  (zrychleni < 0)
        printf("Pohyb je zpomalený\n");
    else
        printf("Pohyb je konstatní\n");

    printf("Zrychleni je %fkm/h/^2, ", zrychleni);
    printf(" v0 = %fkm/hn\n", v0);

    v = v0 + zrychleni * 0.5F;
    s = (0 + v0 * 0.5F )+( 0.5F * zrychleni *0.5F*0.5F);



    printf("v(t = 0.50h) = %f\n", v);

    printf("s(t = 0.50h) = %f\n", s);






















     }

     else

         printf("Zadal si špatně");



    return (EXIT_SUCCESS);
}

Zde mám i č.2 ale to je spíš takový marný pokud

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * File:   main.c
 * Author: X
 *
 * Created on 7. listopadu 2017, 10:09
 */

#include <stdio.h>
#include <stdlib.h>

/*
 *
 */
int main(int argc, char** argv) {

     int hodkostkou;
    int pocethodu;
    int soucethodu;
    int i;
    i = 0;



    printf("Zadej číslo v hodu kostkou v rozmezí 1-6 pokud padne 6 může házet znovu\n");
    scanf("%d", &hodkostkou);
    if ((hodkostkou > 0) && (hodkostkou < 6))
    {
            printf("Hodil si správně\n");
            printf("Hodil si číslo %d\n", hodkostkou);

            printf("Součet hodů je %d\n", hodkostkou);



    }

    else if (hodkostkou == 6)
    {


        while(hodkostkou = 6)


        {
            printf("Hodil si 6 házej znova");
            i++;






        }


    }






    else
        printf("Hodil si špatné číslo");




    return (EXIT_SUCCESS);
}
 
Odpovědět
9.11.2017 20:24
Avatar
David Novák
Tvůrce
Avatar
David Novák:10.11.2017 10:33

Tak v první řadě musíš vyžadovat zadání, než skutečně zadá 1-6 (tj. když zadá např. 7..

scanf("%d", &hodkostkou);

while ((hodkostkou < 1) || (hodkostkou > 6))
{
   printf("Neplatné číslo - házej znovu\n");
   scanf("%d", &hodkostkou);
}

Takto budeš cyklit až do té doby, než zadá správnou číslici. Následně spočteš statistiky:

// pozor, oba musi byt na zacatku nastavene na 0!
pocethodu++;
soucethodu += hodkostkou;

Nakonec řešíš hod 6, kdy se má celý hod opakovat. Opakování = cyklus.. Takže to celé zabalíme do dalšího cyklu:

int hodkostkou;
int pocethodu = 0;
int soucethodu = 0;

scanf("%d", &hodkostkou);

do {
  while ((hodkostkou < 1) || (hodkostkou > 6))
  {
     printf("Neplatné číslo - házej znovu\n");
     scanf("%d", &hodkostkou);
  }

  pocethodu++;
  soucethodu += hodkostkou;
} while (hodkostkou == 6);

printf("statistiky: ....");

Jinak bacha na věci typu "while(hodkostkou = 6)" - přiřazuješ namísto porovnávání ;)

Editováno 10.11.2017 10:35
Nahoru Odpovědět
10.11.2017 10:33
Chyba je mezi klávesnicí a židlí.
Avatar
Jan Jenda
Člen
Avatar
Jan Jenda:10.11.2017 11:21
int main(int argc, char** argv) {
    printf("Jméno: Jan Kratka\n");
    printf("Login: kratka10\n");
    printf("Název úkolu: Úkol č. III a IV\n");

    int hodkostkou;
    int pocethodu = 0;
    int soucethodu = 0;

    printf("Hoď kostkou v rozmezí 1-6 pokud  ti padn 6 házej znova\n");
    scanf("%d", &hodkostkou);

do {
  while ((hodkostkou < 1) || (hodkostkou > 6))
  {
     printf("Neplatné číslo - házej znovu\n");
     scanf("%d", &hodkostkou);
  }





  pocethodu++;
  soucethodu += hodkostkou;
} while (hodkostkou == 6);



printf("Hodil si %d krát\n", pocethodu);
printf("Součet tvých bodů je %d", soucethodu);




    return (EXIT_SUCCESS);
}

¨

Děkuji za pomoc. Vlastně tohle si mi napsal, takže když zadám 1-5 program správně skončí , a vypíše statistiku, ale pokud zadám 6 kolikrát chci a pak třeba 2 program nikdy neskončí a pořád jede dál. A pokud bych chtěl ještě napsat to těla do nějaký printf tak se mi to zacyklilo jak je to možné? :)

 
Nahoru Odpovědět
10.11.2017 11:21
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Jan Jenda
David Novák:10.11.2017 13:30

Oh. teď si všímám jedné chyby :D

Před "while ((hodkostkou < 1) || (hodkostkou > 6))" musí být samozřejmě ještě nepodmíněné zadávání.. protože takto se to nikdy nezeptá znova..

Takže stačí začátek do {} while hodit o dva řádky výš...

do {
  printf("Hoď kostkou v rozmezí 1-6 pokud  ti padn 6 házej znova\n");
  scanf("%d", &hodkostkou);

  while ((hodkostkou < 1) || (hodkostkou > 6))
  {
...

Zkus si to v hlavě prokrokovat a zamyslet se, proč to tak je.. :)

Nahoru Odpovědět
10.11.2017 13:30
Chyba je mezi klávesnicí a židlí.
Avatar
Jan Jenda
Člen
Avatar
Jan Jenda:10.11.2017 15:15

Super děkuji moc. Takže chápu, že prvně se vykoná do, kde pokud dám správně 1-6 (kvůli jiném číslum je tam tedy to while.) zapíše se do proměnné počet a součet. Pokud nedám 6 tak cyklus skončí. Ale jak ještě udělám když dám 6, aby vykonalo to stejný, ale s jiným textem?

A já myslím, že do while se může použít jen do while, a né do while, while, nebo je to tak , že je to do while, ale v cyklu do je while jako sólo.

 
Nahoru Odpovědět
10.11.2017 15:15
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Jan Jenda
David Novák:11.11.2017 21:02

Cykly můžeš libovolně vnořovat jak potřebuješ (a často se tomu nedá vyhnout).

Pokud chceš vypisovat jiný text, tak tam budeš muset přihodit nějaký if.

Nahoru Odpovědět
11.11.2017 21:02
Chyba je mezi klávesnicí a židlí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.