Мне нужно хранить несколько целых чисел в массиве и печатать их с символами алфавита - PullRequest
0 голосов
/ 17 декабря 2018

Проблема в том,Я делаю задание.И мне нужно прочитать некоторые значения для массива, размеры которых указаны вначале для строк и столбцов (2-D массив).После чтения значений мне нужно использовать алгоритм Bubble Sort, чтобы отсортировать их в порядке убывания.Проблема в;Мне нужно назначить символ (от A до Z) каждому целочисленному значению (назвать / классифицировать его) и отсортировать целочисленное значение по символу, который я ему присвоил ...

#include <stdio.h>
#define IL 81
#define PARTI 26

        ///Variables:
int partiSayisi;

/**This variable is going to take a value between [0,81]
  *so it will be ROW of the array when I read values.*/   
int plakaKodu;

/**This is equal to 'plakaKodu', and I'm using it as the index,
  *if I use the actual variable as the index, it isn't working. (Not
  *sure why...)*/
int plakaKoduIndex;

/**The 2D array which holds variables I read from input.*/
int oySiniflama[IL][PARTI] = {0};

char partiIsimleri[26]= 
 {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q',
                'R','S','T','U','V','W','X','Y','Z'};

 ///Function Prototypes:
//------------------------------------------//
void oyAl(int partiSayisi, int plakaKoduIndex); //Input Routine
//-------------------------------------------//
void ilOyGoster(int plakaKoduIndex, int partiSayisi); //Output Routine
//-------------------------------------------//
/**Bubble Sort Function:*/
void bubbleSort();
//-------------------------------------------//

   ///Functions.:
//-------------------------------------------//
void oyAl(int partiSayisi, int plakaKoduIndex)
{
    int i;
    char j='A';

    for(i=0; i<partiSayisi; i++)
    {
        printf("%c Partisi'nin oy sayisini giriniz: ", j);
        scanf(" %d", &oySiniflama[plakaKoduIndex-1][i]);
        ++j;
    }
}

//-------------------------------------------//
void ilOyGoster(int plakaKoduIndex, int partiSayisi)
{
    int i;
     for(i=0; i<partiSayisi; i++)
    {
        printf("\n %c Partisi: %d oy.", partiIsimleri[i], 
        oySiniflama[plakaKoduIndex-1][i]);

    }
}
//-------------------------------------------//
void bubbleSort()
{
    /**Bubble Sort icin: */
    int i = 0, j=0, m=0, gecici_int;
    char gecici_char;
    for(m=1; m<(IL*PARTI); m++)
    {
        for(i=0; i<IL; i++)
        {
            for(j=0; j<PARTI-1; j++)
            {
                if(oySiniflama[i][j] != 0)
                {
                    if(oySiniflama[i][j] < oySiniflama[i][j+1])
                    {
                        gecici_int = oySiniflama[i][j];
                        oySiniflama[i][j] = oySiniflama[i][j+1];
                        oySiniflama[i][j+1] = gecici_int;
                    }
                    if(oySiniflama[i][j] < oySiniflama[i][j+1]);   
                    {
                        gecici_char = partiIsimleri[j];
                        partiIsimleri[j] = partiIsimleri[j+1];
                        partiIsimleri[j+1] = gecici_char;
                    }
                }
            }
        }
//For control.
        for(i=0; i<IL-1; i++)
        {
            if (oySiniflama[i][PARTI-1] > oySiniflama[i+1][0])
            {
                gecici_int = oySiniflama[i][PARTI-1];
                oySiniflama[i][PARTI-1] = oySiniflama[i+1][0];
                oySiniflama[i+1][0] = gecici_int;
            }

            if (oySiniflama[i][PARTI-1] > oySiniflama[i+1][0])
            {
                gecici_char = partiIsimleri[i];
                partiIsimleri[i] = partiIsimleri[i+1];
                partiIsimleri[i+1] = gecici_char;
            }
        }
    }
}
//-------------------------------------------//

Ожидаемый ввод и вывод:

Ожидаемый ввод

//TEST
A Partisi'nin oy sayisini giriniz: 3082
B Partisi'nin oy sayisini giriniz: 2556
C Partisi'nin oy sayisini giriniz: 1900
D Partisi'nin oy sayisini giriniz: 2581
E Partisi'nin oy sayisini giriniz: 2000
F Partisi'nin oy sayisini giriniz: 1255
G Partisi'nin oy sayisini giriniz: 12

Я сделал экран ввода в соответствии с инструкциями;введите символ (от A до Z) для классификации этого целочисленного значения;теперь вот и ожидаемый результат:

Ожидаемый результат

A Partisi   3082
D Partisi   2581
B Partisi   2556
E Partisi   2000
C Partisi   1900
F Partisi   1255
G Partisi   12

Как я могу назначить символ целому числу и отсортировать их, как показано выше, используя Bubble Sort в качестве моегоАлгоритм сортировки и использование функций и массивов (правила присваивания строгие.)(И я не могу использовать структуры ...)

~ Спасибо, что нашли время ...

(PS. Спасибо, что объяснили мне правила публикации. Это мой первый разписать вопрос здесь, извините за написание непонятного вопроса ... Я отредактировал его как можно скорее.)

(PS. [@John Bode] Спасибо, что нашли время. Даже если яв первый раз написал неясный вопрос ... Теперь я отредактировал его, чтобы другие могли получить помощь, если им тоже нужна подобная проблема.

1 Ответ

0 голосов
/ 17 декабря 2018

Если я понимаю вашу проблему, вы хотите способ хранения значения символа с целочисленным значением без с использованием массива partiIsimleri, правильно?

Вероятно, самый простой способ сделать это - использовать тип struct:

struct labeled_value {
  int value;
  char label;
};

Вы бы объявили oySinfiflama как

struct labeled_value oySiniflama[IL][PARTI] = {{0,0}};

You 'd измените вашу подпрограмму ввода, чтобы использовать следующее:

for(i=0, j='A'; i<partiSayisi; i++, j++)
{
    printf("%c Partisi'nin oy sayisini giriniz: ", j);
    scanf(" %d", &oySiniflama[plakaKoduIndex-1][i].value);
    oySiniflama[plakaKoduIndex-1][i].label = j;
}

Вы бы изменили внутренности вашей пузырьковой сортировки следующим образом:

if(oySiniflama[i][j].value < oySiniflama[i][j+1].value )   /* Azalan sirada siralamak icin, > u < e cevir. */
{
    struct labeled_value gecici = oySiniflama[i][j];
    oySiniflama[i][j] = oySiniflama[i][j+1];
    oySiniflama[i][j+1] = gecici;
}

IOW, вы делаете свои сравнения на value член, но вы меняете все значение struct.Это позволяет вам полностью избавиться от массива partiIsimleri, поэтому вы можете полностью удалить эту часть из вашей подпрограммы bubblesort.

И тогда ваш выходной код будет иметь следующий вид:

for(i=0; i<partiSayisi; i++)
{
    printf("\n %c Partisi: %d oy.", oySiniflama[plakaKoduIndex-1][i].label, oySiniflama[plakaKoduIndex-1][i].value);
}

РЕДАКТИРОВАТЬ

Но проблема в том, что;Я не могу использовать структуры.Как я сказал в информации;Я могу использовать только основные функции C и некоторые промежуточные (функции и массивы).Правила строгие, поэтому я борюсь ...

О, ради ████, struct s равны a«Основная особенность C».Пощечину своему учителю за выполнение этого задания сложнее, чем должно быть 1 .

Хорошо, тогда вы застряли, используя отдельный массив для поддержки меток, и это также должен быть двухмерный массив (чтобы у вас был уникальный элемент метки для каждого числа):

char partiIsimleri[IL][PARTI];

Таким образом, ваша процедура ввода будет выглядеть следующим образом:

for(i=0, j='A'; i<partiSayisi; i++, j++)
{
    printf("%c Partisi'nin oy sayisini giriniz: ", j);
    scanf(" %d", &oySiniflama[plakaKoduIndex-1][i]);
    partiIsimleri[plakaKoduIndex-1][i] = j;
}

Вы можете усилить сортировку пузырьков:

if(oySiniflama[i][j] != 0)
{
    if(oySiniflama[i][j] < oySiniflama[i][j+1])   /* Azalan sirada siralamak icin, > u < e cevir. */
    {
        gecici_int = oySiniflama[i][j];
        oySiniflama[i][j] = oySiniflama[i][j+1];
        oySiniflama[i][j+1] = gecici_int;

        gecici_char = partiIsimleri[i][j];
        partiIsimleri[i][j] = partiIsimleri[i][j+1];
        partiIsimleri[i][j+1] = gecici_char;
    }
}

То есть вместо двух отдельных циклов дляпоменяйте местами целые числа и метки, вы можете выполнять обе операции в одном цикле.Вы действительно не хотите добавлять больше петель к пузырьковой сортировке.


Шучу.На самом деле не бить своего учителя.Даже если они действительно заслуживают того, что заставляют вас притворяться, что вы пишете на Фортран 77.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...