Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
ahoj lidičky, mam úlohu, která zní velmi jednoduše, ale nějak mi nejde to dát dohromady.
úloha zní, abych z čísel v rozmezí od 10 po 100 a po jejich zadání provedl jejich součet,
takže 13 a 14 součet 27.
Něco jsem zkusil, ale nefunguje mi to, zajímalo by mě, co dělám špatně?(zkoušel jsem ještě jednu podmínku s a zároveň,[x<10 && y>100] ale stejný případ, nefungovalo to)
import java.util.Scanner;
public class soucet {
static int soucet(int x, int y)
{
int soucet=0;
if(x<10 | x>100 | y<10 | y>100)
{
System.out.println("Je mi líto, rozsah čísel je: 10 až 100");
}
else
{
if(y<x)
{
for(int i=y;i<x;i++)
{
soucet+=i;
}
}
else
{
for(int i=x;i<y;i++)
{
soucet+=i;
}
}
}return soucet;
}
public static void main(String[]args)
{
Scanner s=new Scanner(System.in);
System.out.println("Zadejte čísla: ");
int x=s.nextInt(); int y=s.nextInt();
int secti=soucet(x,y);
System.out.println("Součet dvou čísel v rozmezí je:"+secti);
}
}Offline
Promiň, přehlídnul jsem ještě, že ta druhá podmínka má taky else.
Upravil bych to takhle:
if(y<x)
{
soucet=x; // Začíná s hodnotou x a pak přičítá y.
for(int i=y;i<x;i++)
{
soucet+=i;
}
}
else
{
soucet=y; // Začíná s hodnotou y a pak přičítá x.
for(int i=x;i<y;i++)
{
soucet+=i;
}
}
Když jsem to narychlo přepsal do Cčka (já v Javě nedělám, ale tohle vypadá jako základy... Pokud v přiřazení těch hodnot mám syntakticky špatně, tak si to prosím převeď do správné podoby), tak to fungovalo.
BTW je správně podle zadání, že by to při zadání x=10;y=12 vyhodilo soucet==33?
Offline
A proc misto
else
{
if(y<x)
{
for(int i=y;i<x;i++)
{
soucet+=i;
}
}
else
{
for(int i=x;i<y;i++)
{
soucet+=i;
}
}
}nenapsat
else
{
soucet = x + y;
}Tak jak to mas ty to po par uopravach upravach muze sice pocitat spravne (ted je to uplne mimo), ale velice neefektivne... Pokud je to ukol do skoly, pak si rozhodne myslim, ze by to takto nemelo byt uznano.
Offline
Mělo to sečíst jen ty dvě čísla, to zadání mohlo být trošku matoucí, za to se omlouvám.
Fajn, mám ještě jeden příklad, přesné zadání:
"Vytvořte jednorozměrné pole z náhodných čísel od 100 do 999, rozměr pole zadejte z klávesnice a zobrazte uvedené pole a pak pouze sudá čísla. "
bohužel mám trošku nedostatky, co se týče metod, takže nevím vůbec jak to pole vypsat, něco jsem zkusil, ale vůbec nevím jak pokračovat, nebo spíš jak to dokončit.
Děkuji za pomoc
package projekt;
import java.util.Scanner;
import java.util.Random;
/**
*
* @author
*/
public class pole_sude {
static int [] nacteniCisel(int x)
{
int [] pole=new int[x];
for(int y=0;y<pole.length;y++)
{
pole[x]=(int)Math.round(Math.random()*899+10);
}
return pole;
}
static void nacteni(int [] pole)
{
for(int x=0;x<pole.length;x++)
{
if(x % 2==0)
{
System.out.print(pole[x]+" ");
}
}
System.out.println("");
}
public static void main(String[]args)
{
Scanner s=new Scanner(System.in);
int x=s.nextInt();
int [] pole =nacteniCisel(x);
nacteni(pole);
System.out.println("čísla jsou: "+pole);
}
}Offline
můj postup by byl:
input x;
inicializace pole[x]; // Nevím jestli Java umí dynamická pole, ale to snad jo.
for(i=0;i<x;i++){pole[i]=(příkaz pro náhodnou hodnotu od 100 do 999)}
//Opět nevím jestli v Javě se pole indexuje o 0 nebo od 1. Pokud od 1 tak to samozřejmě změní na for(i=1;i=<x;i++)
for(i=0;i<x;i++){příkaz na vypsání pole[i]};
for(i=0;i<x;i++)
{
if (pole[i]%2==0){příkaz na vypsání pole[i]};
}Mezi číslicemi tam samozřejmě nech mezery a mezi vypsáním celého pole a pouze sudých číslic bych dal nějaký odstavec, aby se v tom člověk vyznal.
Offline
Koukám že metody v Javě je jen jiný jméno pro funkce. (doufám že to chápu dobře)
dejme tomu že budeš mít metody
vytvor_pole(int x)
{
int [] pole=new int[x];
for (int i=0;i<x;i++)
{
pole[i]=(int)Math.round(Math.random()*899+100);
}
return pole;
}
vypis_pole(int pole,int x)
{
for (int i=0;i<x;i++)
{
System.out.print(pole[i]+" ");
}
}
vypis_sude(int pole,int x)
{
for (int i=0;i<x;i++)
{
if (pole[i]%2==0)
{
System.out.print(pole[i]+" ");
}
}
}main() pak bude vypadat tak, že od uživatele na vstupu získáš x, které je jak dlouhé to pole má být.
pak voláš vytvor_pole(x); následně získáš pole náhodných čísel, to předáš vypis_pole(pole,x). A pak znovu vypis_sude(pole,x).
Snažil jsem se to psát podle kódu v tomhle threadu, aby to bylo syntakticky co nejblíž javě, ale chyby nevylučuju. Doufám, že to z toho ale pochopíš, jak jsem to celý myslel.
Offline
ahoj! tak takhle jsem to nějak dal dohromady, ale pořád ještě mám někde chybku, už to tedy ale co mi nejde, je že nevypíše ty prvky pole, a pak ty sudé prvky, vypíše to dohromady, někde asi v main mi něco chybí, strašně ti ale děkuji! už cítím finále :D
public class pole_sude {
public static int [] vytvor_pole(int x)
{
int [] pole=new int[x];
for(int i=0;i<pole.length;i++)
{
pole[i]=(int)Math.round(Math.random()*899+10);
}
return pole;
}
public static void vypis_pole(int []pole, int x)
{
for(int i=0;i<pole.length;i++)
{
System.out.println(pole[i]+" ");
}
}
public static void vypis_sude(int [] pole, int x)
{
for(int i=0; i<pole.length;i++)
{
if(pole[i]%2 ==0)
{
System.out.println(pole [i]+" ");
}
}
}
public static void main(String[]args)
{
Scanner s=new Scanner(System.in);
int x=s.nextInt();
int [] pole=vytvor_pole(x);
vypis_pole(pole,x);
vypis_sude(pole,x);
}
}Offline