Если я понимаю вашу проблему, вы хотите способ хранения значения символа с целочисленным значением без с использованием массива 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.