Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[C/C++] Porównanie wartości w kilku tablicach jednowymiarowcyh

#1
[C/C++] Porównanie wartości w kilku tablicach jednowymiarowcyh
Zaprezentuje na przykladzie o co mi chodzi.
Mam 3 tablice
da() = {35,30,30}
db() = {20,20,30}
dc() = {35,30,50}

Chodzi o to zeby w efekcie uzyskac cos takiego

35 : 2
30 : 4
20 : 2
50 : 1

Czyli inaczej sumowanie/zliczanie tych 3 tablic i zapisanie moze do innej tablicy oraz wyswietlenie w formie powyzej. Ma ktos pomysl jak to wykonac?
 System operacyjny: windows_98_nt Przeglądarka: firefox
#2
RE: [C/C++] Porównanie wartości w kilku tablicach jednowymiarowcyh
Użyj tablicy dwuwymiarowej. na pozycji tablica[X][0] zapiszesz jaka to liczba, na pozycji tablica[X][1] liczbę powtórzeń.

Jeżeli liczby nie ma w tablicy tworzysz nowe miejsce, jeżeli jest zwiększasz liczbę wystąpień o jeden.
Pomagam zwiększyć widoczność w sieci. Wesoły

Każdy dzień bez forum to dzień stracony.
 System operacyjny: windows_98_nt Przeglądarka: mozilla
#3
RE: [C/C++] Porównanie wartości w kilku tablicach jednowymiarowcyh
musze to zrobic bez uzycia tablic dwuwymiarowych
 System operacyjny: windows_98_nt Przeglądarka: firefox
#4
RE: [C/C++] Porównanie wartości w kilku tablicach jednowymiarowcyh
Więc zapisuj wyniki do tablicy jednowymiarowej i pamiętaj które miejsce odpowiada której liczbie. Możesz też skorzystać z dodatkowych klas, takich jak Dictionary.
Pomagam zwiększyć widoczność w sieci. Wesoły

Każdy dzień bez forum to dzień stracony.
 System operacyjny: windows_98_nt Przeglądarka: mozilla
#5
RE: [C/C++] Porównanie wartości w kilku tablicach jednowymiarowcyh
mowisz klas czyli nie idzie tego zrobic bez obiektowosci?
co to jest ta klasa dictionary?

pomogl by mi ktos to napisac, chyba jednak nie jestem mistrzem programowania ;/


Mam cos takiego i w dodatku nie w c bo nie mam kompilatora ale przerobic szybko,oczywiscie nie dziala tak jak chce ..
Kod:
For i = 0 To rozmiar2
            juz_jest = 0
            l = 0
            Do While l < i
                If (dc(i) = dc(l)) Then
                    juz_jest = 1
                End If
                l = l + 1
            Loop
            If (juz_jest = 0) Then
                j = 1
                k = i + 1
                Do While k < rozmiar2
                    If (dc(i) = dc(k)) Then
                        j = j + 1
                    End If
                    k = k + 1
                Loop
                TextBox23.Text = TextBox23.Text & CStr(da(i)) & "   " & CStr(j) + vbCrLf
            
            End If
        Next
 System operacyjny: windows_98_nt Przeglądarka: firefox
#6
RE: [C/C++] Porównanie wartości w kilku tablicach jednowymiarowcyh
Jeżeli nie korzystasz z C++ z bibliotekami .NET sam musisz sobie taką klasę napisać. Jeżeli nie możesz korzystać z tablic dwuwymiarowych wydaje się to najbardziej eleganckim rozwiązaniem. Oczywiście jest parę innych sposobów ale jeżeli chcesz mieć taki wynik jak podałeś tj. liczba - ilość wystąpień wydaje mi się to dosyć prostym rozwiązaniem.

Możesz też pójść na skróty, napisać parę pętli które najpierw zapisuje aktualnie sprawdzany element do zmiennej, a następnie sprawdza każdą z tablic czy element ten się powtarza i natychmiast drukować wynik.

czyli w pseudokodzie:
Kod:
for(petla_wskazujaca_ktory_element_jest_sprawdzany)
int element = tablica[x];
int wynik = 1;
for(pętla_przechodząca_przez_kazda_z_tablic)
if(tablica[i] == element)
wynik++;
if(tablica1[i] == element)
wynik++;
if(tablica2[i] == element)
wynik++;
cout << element << " = " << wynik << endl;

I tak dalej. Rozwiązań jest parę, parę masz tu podanych.

Tutaj masz przykładowy program w C#, błędnie drukuje wyniki (tj. po każdym przejściu głównej pętli wyświetla wynik - do poprawienia, ale samo liczenie działa.
Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TablicaCheck
{
    class Program
    {
        private static int []tablica = {12, 22, 32, 11};
        private static int []tablica1 = {13, 11, 22, 32};
        private static int []tablica2 = {12, 11, 4, 2};

        static void Main(string[] args)
        {
            Console.WriteLine("Sprawdzamy ile razy jaki element się pojawia w tablicach");

            for(int i = 0; i < 4; i++)
            {
                int element = tablica[i];
                int wynik = 0;
                for(int x = 0; x < 4; x++)
                {
                    if (tablica[x] == element)
                        wynik++;
                    if (tablica1[x] == element)
                        wynik++;
                    if (tablica2[x] == element)
                        wynik++;
                }
                Console.WriteLine(element + " " + wynik);

                element = tablica1[i];
                wynik = 0;
                for (int x = 0; x < 4; x++)
                {
                    if (tablica[x] == element)
                        wynik++;
                    if (tablica1[x] == element)
                        wynik++;
                    if (tablica2[x] == element)
                        wynik++;
                }

                Console.WriteLine(element + " " + wynik);

                element = tablica2[i];
                wynik = 0;
                for (int x = 0; x < 4; x++)
                {
                    if (tablica[x] == element)
                        wynik++;
                    if (tablica1[x] == element)
                        wynik++;
                    if (tablica2[x] == element)
                        wynik++;
                }

                Console.WriteLine(element + " " + wynik);
            }

            Console.ReadKey();
        }
    }
}

Nie kompilowałem go ale powinien działać. Zmodyfikuj go i przeanalizuj - może coś się przyda.
Pomagam zwiększyć widoczność w sieci. Wesoły

Każdy dzień bez forum to dzień stracony.
 System operacyjny: windows_98_nt Przeglądarka: mozilla
#7
RE: [C/C++] Porównanie wartości w kilku tablicach jednowymiarowcyh
No tak samo liczenie dziala, nawet sie kompliuje jak sie wwywali jednego z usingow, ale mniejsza o to. Wystepuje tu problem ktory ja mam przez caly czas. Umiem wykonac to zadanie dla jednej tablicy czyli pozliczac i zapisac w w/w postaci. Nawet wyszlo mi dla dwoch(sposobem), ale nie wiem jak to zrobic dla trzech. Nie mam kompletnie pomyslu jak to zrobic. Wezmy na przykladzie tego co dales, bo to raczej to o co mi chodzi

Dla pierwszej tablicy zwracane wyniki w postaci
Console.WriteLine(element + " " + wynik);
dla kolejnej
Console.WriteLine(element + " " + wynik);
i ostatniej
Console.WriteLine(element + " " + wynik);

czyli wyniki sie dubluja a moj najwiekszy problem w tym co zrobic zeby przy pomocy wyswietlenia
Console.WriteLine(element + " " + wynik);
zwracana byla zliczona juz wartosc z trzech tablic nie suma a jak w formie jak powyzej
 System operacyjny: windows_98_nt Przeglądarka: firefox
#8
RE: [C/C++] Porównanie wartości w kilku tablicach jednowymiarowcyh
Można to zadanie rozwiązać ładnie z użyciem STL:
Kod:
#include <iostream>
#include <map>
using namespace std;

int main()
{
    map<int, int> val;
    int t_1[] = {35,30,30}, t_2[] = {20,20,30}, t_3[] = {35,30,50};
    for (int i = 0; i < 3; i++)
    {
        val[t_1[i]]++;
        val[t_2[i]]++;
        val[t_3[i]]++;
    }
    for (map<int, int>::iterator i = val.begin(); i != val.end(); i++)
        cout << i->first << ':' << i->second << endl;
    return 0;
}
Można i bez:
Kod:
#include <stdio.h>

int val_to_idx(int val, int *indices)
{
    int *i = indices;
    while (*i != val && *i != 0)
        i++;
    *i = val;
    return i - indices;
}

int main()
{
    int t_1[] = {35,30,30}, t_2[] = {20,20,30}, t_3[] = {35,30,50}, i, indices[256] = {0}, count[256] = {0};
    for (i = 0; i < 3; i++)
        count[val_to_idx(t_1[i], indices)]++;
    for (i = 0; i < 3; i++)
        count[val_to_idx(t_2[i], indices)]++;
    for (i = 0; i < 3; i++)
        count[val_to_idx(t_3[i], indices)]++;
    for (i = 0; indices[i] != 0; i++)
        printf("%2d : %d\n", indices[i], count[i]);
    return 0;
}
Wadą tego rozwiązania jest to, że wykorzystuje 0 jako informację, że dana liczba nie wystąpiła jeszcze (jeśli 0 należy do zbioru, to program się wysypie).
Zamiast powyższego rozwiązania możesz też wykorzystać listę jednokierunkową:
Kod:
#include <stdio.h>
#include <stdlib.h>

typedef struct __list
{
    int val, count;
    struct __list *next;
} list;

list *values = NULL;

int add_val(int val)
{
    if (values == NULL)
    {
        values = (list*)malloc(sizeof(list));
        values->val = val;
        values->count = 1;
        values->next = NULL;
        return 0;
    }
    else
    {
        list *head = values;
        while (head->next != NULL)
        {
            if (head->val == val)
            {
                head->count++;
                return;
            }
            head = head->next;
        }
        if (head->val == val)
        {
            head->count++;
            return;
        }
        head->next = (list*)malloc(sizeof(list));
        head = head->next;
        head->val = val;
        head->count = 1;
        head->next = NULL;
    }
}

int main()
{
    int t_1[] = {35,30,30}, t_2[] = {20,20,30}, t_3[] = {35,30,50}, i;
    list *head = values;
    for (i = 0; i < 3; i++)
        add_val(t_1[i]);
    for (i = 0; i < 3; i++)
        add_val(t_2[i]);
    for (i = 0; i < 3; i++)
        add_val(t_3[i]);
    for (head = values; head != NULL; head = head->next)
        printf("%2d : %d\n", head->val, head->count);
    head = values;
    while (head != NULL)
    {
        head = head->next;
        free(values);
        values = head;
    }
    return 0;
}
 System operacyjny: linux_ubuntu Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki ([C/C++] Porównanie wartości w kilku tablicach jednowymiarowcyh)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Ściana batch file ustawianie jednej wartosci zmiennej do kilku plikow kulis88 6 2181 03.08.2017, 19:12
Ostatni post: kulis88
  VisualBasic - tablicowanie wartości funkcji . samanta19 2 7474 20.01.2017, 01:01
Ostatni post: samanta19
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 8215 16.06.2016, 08:10
Ostatni post: Szachista

Skocz do:


Wybrane wątki ([C/C++] Porównanie wartości w kilku tablicach jednowymiarowcyh)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Transfer plików via FTP Visual Basic FireBytes 3 5518 15.08.2019 07:41
Ostatni post: Szachista
  Menu wysuwane z boku patryk67 1 4227 07.08.2019 12:43
Ostatni post: aht
  Visual Basic Excel l.całkowitą przedstawić w postaci szesnastkowej fugaz 4 5932 18.06.2019 21:36
Ostatni post: fugaz
  Nauka do Olimpiady Informatycznej? piotr0905 1 5774 08.06.2019 16:50
Ostatni post: wlisik
Ściana Prosta gra w Builder C++ Kiranek1 1 5723 31.05.2019 15:20
Ostatni post: Szachista
  Menu (Nie widoczne długie opisy) wanhelsing 5 7637 28.04.2019 19:31
Ostatni post: koneton
  Skrypt usuwający pliki sylwiaa1 2 3431 28.04.2019 15:20
Ostatni post: sylwiaa1
  Środowisko do assemblera Physicist 4 7243 21.04.2019 14:04
Ostatni post: Ajgor
  VBA excel dmjs 6 7609 17.04.2019 10:20
Ostatni post: ptrick
  C++ - sens pogłębiania nauki gbr 5 7676 25.03.2019 12:53
Ostatni post: koneton
  Klasa wewnętrzna w C++ Physicist 4 7326 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 6477 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 9643 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 6895 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 7375 07.02.2019 22:01
Ostatni post: Szachista