#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 100
typedef struct {
char simbol[3];
int jumlah;
} Unsur;
int ambilAngka(char *s, int *i) {
int angka = 0;
angka = angka * 10 + (s[*i] - '0');
(*i)++;
}
if (angka == 0) angka = 1;
return angka;
}
int main() {
char rumus[MAX];
Unsur daftar[50];
int count = 0;
printf("Masukkan rumus kimia: ");
for (int i = 0; i < len;) {
char simbol[3] = "";
simbol[0] = rumus[i];
int j = i + 1;
if (j
< len
&& islower(rumus
[j
])) { simbol[1] = rumus[j];
j++;
}
int angka = ambilAngka(rumus, &j);
// Cek apakah unsur sudah ada
int ditemukan = 0;
for (int k = 0; k < count; k++) {
if (strcmp(daftar
[k
].
simbol, simbol
) == 0) { daftar[k].jumlah += angka;
ditemukan = 1;
break;
}
}
// Jika belum ada, tambahkan
if (!ditemukan) {
strcpy(daftar
[count
].
simbol, simbol
); daftar[count].jumlah = angka;
count++;
}
i = j;
} else {
i++;
}
}
// Cetak hasil
for (int i = 0; i < count; i++) {
printf("%s %d\n", daftar
[i
].
simbol, daftar
[i
].
jumlah); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgojZGVmaW5lIE1BWCAxMDAKCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIgc2ltYm9sWzNdOwogICAgaW50IGp1bWxhaDsKfSBVbnN1cjsKCmludCBhbWJpbEFuZ2thKGNoYXIgKnMsIGludCAqaSkgewogICAgaW50IGFuZ2thID0gMDsKICAgIHdoaWxlIChpc2RpZ2l0KHNbKmldKSkgewogICAgICAgIGFuZ2thID0gYW5na2EgKiAxMCArIChzWyppXSAtICcwJyk7CiAgICAgICAgKCppKSsrOwogICAgfQogICAgaWYgKGFuZ2thID09IDApIGFuZ2thID0gMTsKICAgIHJldHVybiBhbmdrYTsKfQoKaW50IG1haW4oKSB7CiAgICBjaGFyIHJ1bXVzW01BWF07CiAgICBVbnN1ciBkYWZ0YXJbNTBdOwogICAgaW50IGNvdW50ID0gMDsKCiAgICBwcmludGYoIk1hc3Vra2FuIHJ1bXVzIGtpbWlhOiAiKTsKICAgIHNjYW5mKCIlcyIsIHJ1bXVzKTsKCiAgICBpbnQgbGVuID0gc3RybGVuKHJ1bXVzKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjspIHsKICAgICAgICBpZiAoaXN1cHBlcihydW11c1tpXSkpIHsKICAgICAgICAgICAgY2hhciBzaW1ib2xbM10gPSAiIjsKICAgICAgICAgICAgc2ltYm9sWzBdID0gcnVtdXNbaV07CiAgICAgICAgICAgIGludCBqID0gaSArIDE7CiAgICAgICAgICAgIGlmIChqIDwgbGVuICYmIGlzbG93ZXIocnVtdXNbal0pKSB7CiAgICAgICAgICAgICAgICBzaW1ib2xbMV0gPSBydW11c1tqXTsKICAgICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW50IGFuZ2thID0gYW1iaWxBbmdrYShydW11cywgJmopOwoKICAgICAgICAgICAgLy8gQ2VrIGFwYWthaCB1bnN1ciBzdWRhaCBhZGEKICAgICAgICAgICAgaW50IGRpdGVtdWthbiA9IDA7CiAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewogICAgICAgICAgICAgICAgaWYgKHN0cmNtcChkYWZ0YXJba10uc2ltYm9sLCBzaW1ib2wpID09IDApIHsKICAgICAgICAgICAgICAgICAgICBkYWZ0YXJba10uanVtbGFoICs9IGFuZ2thOwogICAgICAgICAgICAgICAgICAgIGRpdGVtdWthbiA9IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEppa2EgYmVsdW0gYWRhLCB0YW1iYWhrYW4KICAgICAgICAgICAgaWYgKCFkaXRlbXVrYW4pIHsKICAgICAgICAgICAgICAgIHN0cmNweShkYWZ0YXJbY291bnRdLnNpbWJvbCwgc2ltYm9sKTsKICAgICAgICAgICAgICAgIGRhZnRhcltjb3VudF0uanVtbGFoID0gYW5na2E7CiAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpID0gajsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgfQoKICAgIC8vIENldGFrIGhhc2lsCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICBwcmludGYoIiVzICVkXG4iLCBkYWZ0YXJbaV0uc2ltYm9sLCBkYWZ0YXJbaV0uanVtbGFoKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=