Forum » Programiranje » [C#] Operacija IN in ALI med dvema int številoma
[C#] Operacija IN in ALI med dvema int številoma
Cvenemir ::
Lep pozdrav.
Zanima me, kako se v programskem jeziku c# izvede operacija IN in ALI nad dvema številoma tipa int.
Hvala.
Zanima me, kako se v programskem jeziku c# izvede operacija IN in ALI nad dvema številoma tipa int.
Hvala.
Cvenemir ::
Implementirajte tudi glavni podprogram, s katerim boste oba izdelana podprograma preizkusili: uporabnik naj vnese dve binarni števili, glavni podprogram pa naj izpiše v dvojiškem sestavu njuno vsoto in razliko ter rezultata dvojiških operacij IN in ALI med obema številoma.
Takšna so navodila. Zdej me pa zanima še če lahko IN in ALI izvedem nad števili v int obliki in nato samo pretvorim v binarno obliko, ali je potrebno izdelati postopek za operacijo IN ALI nad binarnimi števili?
Takšna so navodila. Zdej me pa zanima še če lahko IN in ALI izvedem nad števili v int obliki in nato samo pretvorim v binarno obliko, ali je potrebno izdelati postopek za operacijo IN ALI nad binarnimi števili?
gendale ::
ti prebereš string (recimo "011101")
to pretvoriš v int (recimo Convert.ToInt32(tvojString,2);)
nad intom delaš vse potrebne operacije
pretvoriš nazaj v binarni string (recimo Convert.ToString(tvojInt, 2);)
to pretvoriš v int (recimo Convert.ToInt32(tvojString,2);)
nad intom delaš vse potrebne operacije
pretvoriš nazaj v binarni string (recimo Convert.ToString(tvojInt, 2);)
seznam zanč moderatorjev in razlogov da so zanč
http://pastebin.com/QiWny5dV
gor je mavrik apple uporabniček (mali možgani in mali penis)
http://pastebin.com/QiWny5dV
gor je mavrik apple uporabniček (mali možgani in mali penis)
Cvenemir ::
Program zdaj pravilno deluje. Edini problem je še izpis. Če vpišem recimo 001 in 100 mi izpiše samo vsoto in operacijo ALI....če vpisujem daljša števila pa izpiše vse 4 operacije. Mogoče negativnih ne izpiše? In zakaj ne izpiše operacije IN med 1 in 4?
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Delo_z_binarnimi_števili { class Program { // Funkcija za pretvorbo iz destiške v binarno obliko static string decToBin(long vhodnoStevilo) { string rezultat = ""; // Nadaljuj dokler vhodno stevilo ni enako nic while (vhodnoStevilo > 0) { // Rezultatu dodamo spredaj 0 ali 1, odvisno od ostanka rezultat = (vhodnoStevilo % 2) + rezultat; // Vhodno stevilo delimo z 2 in nadaljujemo vhodnoStevilo /= 2; } return rezultat; } // Funkcija za pretvorbo iz binarne v desetiško obliko static long binToDec(string vhodniNiz) { long rezultat = 0; // Zanka skozi binarni niz, zacnemo na levi strani for (int i = 0; i < vhodniNiz.Length; ++i) // Rezultatu vsakic pristejemo binarno vrednost (0 ali 1), množeno z 2 na potenco, // ki je enaka (vhodniNiz.Length - 1) - i rezultat += long.Parse(vhodniNiz[i].ToString()) * (long)Math.Pow(2, vhodniNiz.Length - 1 - i); return rezultat; } //Glavni program, s katerim preverimo delovanje funkcij static void Main(string[] args) { //Branje vhodnih nizov in pretvorba v int Console.Write("Vnesite prvo število v binarni obliki: "); string vhodniNizBinarni1 = Console.ReadLine(); long stevilo1 = binToDec(vhodniNizBinarni1); Console.Write("Vnesite drugo število v binarni obliki: "); string vhodniNizBinarni2 = Console.ReadLine(); long stevilo2 = binToDec(vhodniNizBinarni2); //Računanje vsote, razlike , operacije IN in operacije ALI //long vsotaStevil = stevilo1 + stevilo2; //long razlikaStevil = stevilo1 - stevilo2; //long operacijaIN = stevilo1 & stevilo2; //long operacijaALI = stevilo1 | stevilo2; //Računanje, pretvorba in izpis long vsotaStevil = stevilo1 + stevilo2; string vsotaStevilBin = decToBin(vsotaStevil); Console.WriteLine("Vsota podanih števil je: {0} ", vsotaStevilBin); long razlikaStevil = stevilo1 - stevilo2; string razlikaStevilBin = decToBin(razlikaStevil); Console.WriteLine("Razlika podanih števil je: {0}", razlikaStevilBin); long operacijaIN = stevilo1 & stevilo2; string operacijaINx = decToBin(operacijaIN); Console.WriteLine("Rezultat operacije IN je: {0}", operacijaINx); long operacijaALI = stevilo1 | stevilo2; string operacijaALIy = decToBin(operacijaALI); Console.WriteLine("Rezultat operacije ALI je: {0}", operacijaALIy); // Pritisni katerokoli tipko za izhod Console.ReadKey(); } } }
LeQuack ::
Res je. V operacijo decToBin bi lahko na začetek dodal še tole:
Za prikazovanje negativnih števil binarno pa je bolj zoprno, ker obstaja več notacij, tako da bi to že moralo biti definirano v nalogi.
if (vhodnoStevilo == 0) return "0";
Za prikazovanje negativnih števil binarno pa je bolj zoprno, ker obstaja več notacij, tako da bi to že moralo biti definirano v nalogi.
Quack !
Cvenemir ::
Hvala za nasvet. Kako pa bi v funkciji binToDec preveril če je vhodni podatek pravilen? Se pravi, če je sestavljen iz ničel in enk.
Poskusil sem takole, ampak ker je vhod tipa string ne morem uporabiti primerjave !=. kljub temu mi izpiše napako tolikokrat, kolikokrat gre zanka skozi.
Poskusil sem takole, ampak ker je vhod tipa string ne morem uporabiti primerjave !=. kljub temu mi izpiše napako tolikokrat, kolikokrat gre zanka skozi.
for (int i = 0; i < vhodniNiz.Length; ++i) { if (vhodniNiz[i] != "0" && vhodniNiz[i] != "1") break; { // Rezultatu vsakic pristejemo binarno vrednost (0 ali 1), množeno z 2 na potenco, // ki je enaka (vhodniNiz.Length - 1) - i rezultat += long.Parse(vhodniNiz[i].ToString()) * (long)Math.Pow(2, vhodniNiz.Length - 1 - i); } } Console.WriteLine("Vhodni podatek je napačen."); return rezultat;
LeQuack ::
Qcube ima prav, char se določi samo z enojnim narekovajem.
// Funkcija za pretvorbo iz binarne v desetiško obliko static long binToDec(string vhodniNiz) { long rezultat = 0; // Zanka skozi binarni niz, zacnemo na levi strani for (int i = 0; i < vhodniNiz.Length; ++i) { // Binarni niz ne vsebuje samo 0 in 1, izpisi napako in zapri program if (vhodniNiz[i] != '0' && vhodniNiz[i] != '1') { Console.WriteLine("Vhodni podatek je napačen."); // Pritisni katerokoli tipko za izhod Console.ReadKey(); Environment.Exit(0); } else // Rezultatu vsakic pristejemo binarno vrednost (0 ali 1), množeno z 2 na potenco, // ki je enaka (vhodniNiz.Length - 1) - i rezultat += long.Parse(vhodniNiz[i].ToString()) * (long)Math.Pow(2, vhodniNiz.Length - 1 - i); } return rezultat; }
Quack !
Cvenemir ::
Hvala za pomoč. Sem popravil. Edino kar ne štima je še to, da operacija IN baje ne deluje kot bi morala nad števili tipa long. Bi bilo vredu zamenjati vse long z byte? :)
LeQuack ::
Ne vem zakaj ne bi delala operacija IN, vsaj kolikor sem jaz testiral dela normalno. Lahko pa poizkusiš s tipom int, če ne rabiš delati z zelo velikimi števili.
Quack !
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C# program za pretvorbo v desetiško število z rekurzijoOddelek: Programiranje | 1501 (1224) | MrStein |
» | KalkulatorOddelek: Programiranje | 1323 (1090) | lebdim |
» | Nemorem rešit ene naloge z c++ (sem začetnik) (strani: 1 2 )Oddelek: Programiranje | 10447 (6185) | technolog |
» | [c#] Optional parameters must appear....Oddelek: Programiranje | 786 (693) | lambda |
» | [C#] Input string was not in a correct format.Oddelek: Programiranje | 1091 (1028) | Cvenemir |