summaryrefslogtreecommitdiff
path: root/I_anno/Programmazione_1
diff options
context:
space:
mode:
Diffstat (limited to 'I_anno/Programmazione_1')
-rw-r--r--I_anno/Programmazione_1/h9_1.cc27
-rw-r--r--I_anno/Programmazione_1/h9_2.cc32
-rw-r--r--I_anno/Programmazione_1/h9_3.cc30
-rw-r--r--I_anno/Programmazione_1/h9_4.cc40
-rw-r--r--I_anno/Programmazione_1/h9_5.cc51
-rw-r--r--I_anno/Programmazione_1/h9_6.cc37
6 files changed, 217 insertions, 0 deletions
diff --git a/I_anno/Programmazione_1/h9_1.cc b/I_anno/Programmazione_1/h9_1.cc
new file mode 100644
index 0000000..12c629d
--- /dev/null
+++ b/I_anno/Programmazione_1/h9_1.cc
@@ -0,0 +1,27 @@
+#include <iostream>
+
+// Array NxM. Trovare media dei valori differenza tra gli elementi della diagonale principale e secondaria
+
+int main() {
+ const short N = 4, M = 3;
+ int A[N][M] = {
+ {3, 1, 5},
+ {5, 3, 1},
+ {8, 7, 4},
+ {4, 7, 4},
+ };
+
+ int diff1 = A[0][0], diff2 = A[N-1][0];
+
+ // Condizione necessaria per matrici in cui M != N
+ short cond = (N < M) ? N : M;
+
+ for(int i = 1, j = N-1, j2 = 1; i < cond; ++i, --j, ++j2) {
+ diff1 -= A[i][i];
+ diff2 -= A[j][j2];
+ }
+
+ std::cout << static_cast<float>((diff1+diff2)/2) << std::endl;
+
+ return 0;
+}
diff --git a/I_anno/Programmazione_1/h9_2.cc b/I_anno/Programmazione_1/h9_2.cc
new file mode 100644
index 0000000..0e9c853
--- /dev/null
+++ b/I_anno/Programmazione_1/h9_2.cc
@@ -0,0 +1,32 @@
+#include <iostream>
+
+// Array NxM e numero p. Stampare le medie per ogni colonna dispari dei valori x <= p
+
+int main() {
+ const short N = 4, M = 4;
+ int p = 9;
+ int A[N][M] = {
+ {3, 1, 5, 5},
+ {5, 3, 1, 5},
+ {8, 7, 4, 5},
+ {4, 7, 4, 5},
+ };
+ // Condizione necessaria per matrici in cui M != N
+ short cond = (N < M) ? N : M;
+
+ for(int i = 1; i < cond; i+=2) {
+ int sum = 0, c = 0;
+ for(int j = 0; j < M; ++j) {
+ if(A[j][i] <= p) {
+ sum += A[j][i];
+ c++;
+ }
+ }
+
+ if(c > 0) {
+ std::cout << static_cast<float>(sum)/c << '\n';
+ }
+ }
+
+ return 0;
+}
diff --git a/I_anno/Programmazione_1/h9_3.cc b/I_anno/Programmazione_1/h9_3.cc
new file mode 100644
index 0000000..9745560
--- /dev/null
+++ b/I_anno/Programmazione_1/h9_3.cc
@@ -0,0 +1,30 @@
+#include <iostream>
+#include <algorithm>
+
+// Dato array V=NxM e uno grande W, trovare il numero di elementi presenti in W che sono compresi in ogni riga di V
+
+int main() {
+ const auto N = 4, M = 4, L = 3;
+ int V[N][M] = {
+ {3, 1, 5, 50},
+ {5, 3, 1, 5},
+ {8, 7, 4, 5},
+ {4, 7, 4, 5},
+ };
+
+ int W[L] = {4, 50, 2};
+
+ for(auto i = 0; i < N; ++i) {
+ const auto range = std::minmax_element(std::begin(V[i]), std::end(V[i]));
+ int count{0};
+ for(auto const& j : W) {
+ if(j >= *range.first && j <= *range.second)
+ count++;
+ }
+
+ std::cout << count << std::endl;
+ }
+
+
+ return 0;
+}
diff --git a/I_anno/Programmazione_1/h9_4.cc b/I_anno/Programmazione_1/h9_4.cc
new file mode 100644
index 0000000..cd534b3
--- /dev/null
+++ b/I_anno/Programmazione_1/h9_4.cc
@@ -0,0 +1,40 @@
+#include <iostream>
+#include <algorithm>
+
+// Data matrice V di NxM, array A e numero w<M, trovare se c'è almeno una riga di V con almeno w elementi maggiori di ogni elemento di A
+
+const auto N{4}, M{4}, k{3}, w{2};
+
+bool row_alg(int V[N][M], int* A, int w) {
+ // È ovvio che sia presente almeno 0 elementi, quindi non ha senso continuare
+ if(w <= 0) return true;
+ auto max_element_of_A = std::max_element(A,A+k);
+
+ for(auto i = 0; i < N; ++i) {
+ int counts = 0;
+ for(auto j = 0; j < M; ++j) {
+ if(V[i][j] > *max_element_of_A)
+ counts++;
+
+ if(counts == w)
+ return true;
+ }
+ }
+
+ return false;
+}
+
+int main() {
+ int V[N][M] = {
+ {3, 59, 5, 54},
+ {5, 3, 1, 5},
+ {8, 7, 4, 5},
+ {4, 7, 4, 5},
+ };
+
+ int A[k] = {4, 50, 2};
+
+ std::cout << row_alg(V, A, w) << std::endl;
+
+ return 0;
+}
diff --git a/I_anno/Programmazione_1/h9_5.cc b/I_anno/Programmazione_1/h9_5.cc
new file mode 100644
index 0000000..a2e3f8b
--- /dev/null
+++ b/I_anno/Programmazione_1/h9_5.cc
@@ -0,0 +1,51 @@
+#include <iostream>
+#include <algorithm>
+#include <map>
+
+// Date due matrici e un numero p, stampare i valori che compaiono p volte dalla prima alla seconda matrice
+
+int main() {
+ const auto N{4}, M{4}, L{4}, Q{4}, p{4};
+ int V[N][M] = {
+ {3, 1, 5, 50},
+ {5, 3, 1, 5},
+ {8, 7, 4, 5},
+ {4, 7, 4, 5},
+ };
+
+ int W[L][Q] = {
+ {30, 3, 5, 50},
+ {51, 25, 12, 5},
+ {90, 12, 4, 5},
+ {4, 6, 4, -3},
+ };
+
+ std::map<int, int> values;
+
+ for(auto i = 0; i < N; ++i) {
+ for(auto j = 0; j < M; ++j) {
+ if(values.find(V[i][j]) == values.end())
+ values.insert({V[i][j], 1});
+ else
+ values[V[i][j]] += 1;
+ }
+ }
+
+ for(auto i = 0; i < L; ++i) {
+ for(auto j = 0; j < Q; ++j) {
+ auto elem = values.find(W[i][j]);
+ if(elem != values.end()) {
+ if(elem->second >= p) {
+ std::cout << W[i][j] << ' ';
+ } else {
+ std::cout << "x ";
+ }
+ } else {
+ std::cout << "x ";
+ }
+ }
+ std::cout << '\n';
+ }
+
+ return 0;
+}
diff --git a/I_anno/Programmazione_1/h9_6.cc b/I_anno/Programmazione_1/h9_6.cc
new file mode 100644
index 0000000..e8afa45
--- /dev/null
+++ b/I_anno/Programmazione_1/h9_6.cc
@@ -0,0 +1,37 @@
+#include <iostream>
+#include <algorithm>
+
+int main() {
+ const auto N{4}, M{4}, s{50}, z{2};
+ int V[N][M] = {
+ {3, 1, 5, 50},
+ {5, 3, 1, 5},
+ {8, 7, 4, 5},
+ {4, 7, 4, 5},
+ };
+
+ int W[M] = {0};
+
+ for(auto i = 0; i < N; ++i) {
+ bool finish{false};
+ int index{0};
+ for(auto j = 0; j < M-1; ++j) {
+ int sum{0};
+ for(auto zz = index; zz < index+z; ++zz) {
+ sum+=V[i][zz];
+ if(sum >= s) {
+ W[i] = 1;
+ finish = true;
+ break;
+ }
+ }
+ index++;
+ if(finish) break;
+ }
+ }
+
+ for(auto i = 0; i < N; ++i)
+ std::cout << W[i] << ' ';
+
+ return 0;
+}