Diskuze: Dvourozměrné pole
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Možností je spousta. Např. vytvoř druhé pole o stejném rozměru jako pole první a inicializuj jeho prvky na nulu. Při procházení prvního pole testuješ zároveň souřadnici druhého pole na to, zda hodnota vzatého prvku na téže souřadnici je nulová. Pokud ano, může být tento prvek vyhodnocen jako maximální. Kompletním průchodem pole získaš souřadnici prvku který je největší. Poté změníš hodnotu druhého pole na této souřadnici na jedna, čímž zabrániš opakovanému vzetí prvků jako největší. Dalšími průchody získáš opět největší prvek z těch prvků, které ještě nebyly vzaty. Třemi průchody pole získáš tři největší prvky aniž bys musel něco transformovat.
Najdes jednu a ulozis si ji do promenne.
Tak ji uloz do pole a porovnavej s tim polem, ne? Pseudokod
//max = array();
// samozrejme idealne, kdybys to delal cyklem
if (n > max[0]) {max[2] = max[1]; max[1] = max[0]; max[0] = n; continue;}
if (n > max[1]) {max[2] = max[1]; max[1] = n; continue;}
if (n > max[2]) {max[2] = n; continue;}
Včera v noci jsem ještě přišel na jeden způsob.
int max = matice[0][0];
int min = matice[0][0];
int sum = 0;
for (int i = 0; i < 4; i++)
{
for (int k = 0; k < 4; k++)
{
if (matice[i][k] > max)
max = matice[i][k];
if (matice[i][k] < min)
min = matice[i][k];
}
}
cout << max << endl;
int max1 = matice[0][0];
for (int i = 0; i < 4; i++)
{
for (int k = 0; k < 4; k++)
{
if ((matice[i][k] > max1)and(matice[i][k] < max))
{
max1 = matice[i][k];
}
if (matice[i][k] < min)
min = matice[i][k];
}
}
cout << max1 << endl;
Děkuji za nápovědy
Ahoj.
To samé za pomoci Javy:
package itn.forum;
import java.util.concurrent.ThreadLocalRandom;
public class Top3 {
static int[] top = new int[3];
static int[][] array = new int[4][4];
static int getRandInt() {
return ThreadLocalRandom.current().nextInt(0, 16);
}
static void ini() {
//naplnit top nejnizsimi hodnotami
for(int i = 0; i < top.length; i ++) {
top[i] = Integer.MIN_VALUE;
}
//naplnime pole nahodnymi hodnotami
for(int i = 0; i < array.length; i ++) {
for(int j = 0; j < array[i].length; j ++) {
array[i][j] = getRandInt();
}
}
}
static void shift() {
for(int t = 0; t < top.length - 1; t ++) {
top[t] = top[t + 1];
}
}
static void findMax() {
//ziskat nejvyssi hodnotu
for(int t = 0; t < top.length; t ++) {
for(int i = 0; i < array.length; i ++) {
for(int j = 0; j < array[i].length; j ++) {
if(array[i][j] > top[top.length - 1]) {
shift();
top[top.length - 1] = array[i][j];
}
}
}
}
}
public static void printArray() {
String s = "";
//Radky
for(int i = 0; i < array.length; i ++) {
if(i > 0) { s += "\n"; }
//Sloupce
for(int j = 0; j < array[i].length; j ++) {
if(j == 0) { s += "{" + array[i][j] + "}"; }
else { s += ", {" + array[i][j] + "}"; }
}
}
System.out.println("{" + s + "}\n");
}
public static void printTop() {
String s = "";
for(int i = 0; i < top.length; i ++) {
if(i == 0) { s += "{" + top[i] + "}"; }
else { s += ", {" + top[i] + "}"; }
}
System.out.println("{" + s + "}\n");
}
public static void printAll() {
printTop();
printArray();
}
public static void main(String[] args) {
ini();
printAll();
findMax();
printAll();
}
}
Trocha mimo témy keďže je to vo vlákne pre C/C++, ale od Javy 8 môžeš
robiť aj takéto niečo
int rows = 4, columns = 5;
Random r = new Random();
Integer[][] array = new Integer[rows][columns];
for(int i = 0; i < rows * columns; i++){
array[i % rows][i % columns] = r.nextInt(100);
}
System.out.println(Arrays.deepToString(array));
Arrays.stream(array)
.flatMap(Arrays::stream)
.distinct()
.sorted(Comparator.reverseOrder())
.limit(3)
.forEach(System.out::println);
Ještě trošku obecněji za použití Javy:
package itn.forum;
import java.util.concurrent.ThreadLocalRandom;
class Top {
private int[] arr; //maximum top je na arr[0], minimum na arr[arr.length - 1]
private void shiftRight(final int ix) {
for(int i = arr.length - 2; i >= ix; i --) { //posouvame odzadu
arr[i + 1] = arr[i];
}
}
public void update(final int value) { //pokud value patri do top-zatridit
for(int i = 0; i < arr.length; i ++) {
if(value >= arr[i]) { //pokud je value vetsi nez prvek pole, aktualizovat
if(value > arr[i]) {
shiftRight(i); //vytvorit misto pro nove objevene maximum
arr[i] = value; //maximum updatovat
}
return;
}
}
}
public void ini() { for(int i = 0; i < arr.length; i ++) { arr[i] = 0; } }
public Top(int[] array) { arr = array; ini(); }
@Override
public String toString() {
String s = "";
for(int i = 0; i < arr.length; i ++) {
s += (i != 0?", ":"") + "{" + arr[i] + "}";
}
return "{" + s + "}\n";
}
}
class Matrix {
private int[][] arr;
private int getRandInt() { return ThreadLocalRandom.current().nextInt(0, 16); }
public void ini() {
//matici naplnime nahodnymi hodnotami z rozsahu 0 az 16
for(int i = 0; i < arr.length; i ++) {
for(int j = 0; j < arr[i].length; j ++) {
arr[i][j] = getRandInt();
}
}
}
public void findMaxTop(Top top) {
//zpracovat matici
for(int i = 0; i < arr.length; i ++) {
for(int j = 0; j < arr[i].length; j ++) {
top.update(arr[i][j]);
}
}
}
public Matrix(int[][] array) { arr = array; ini(); }
@Override
public String toString() {
String s = "";
for(int i = 0; i < arr.length; i ++) {
if(i > 0) { s += "\n"; }
for(int j = 0; j < arr[i].length; j ++) {
s += (j != 0?", ":"") + "{" + arr[i][j] + "}";
}
}
return "{" + s + "}\n";
}
}
public class Top3 {
public static void main(String[] args) {
Top top = new Top(new int[3]); //obsahuje nejvyssi dosud nalezene hodnoty
Matrix matrix = new Matrix(new int[4][4]); //obsahuje testovane hodnoty
System.out.println(matrix);
System.out.println(top);
matrix.findMaxTop(top);
System.out.println(top);
}
}
Zobrazeno 8 zpráv z 8.