Kričeči palindrom
Včasih palindromi (besede, ki se enako berejo z leve proti desni kot od desne proti levi)
kar bodejo v oči. Običajno, sploh če so daljši, pa ne. Ker bi radi hitreje videli,
kako blizu palindromu je poljuben niz, potrebujemo program, ki bo dele nizov, ki so "palindromasti"
izpisal z VELIKIMI ČRKAMI. To pomeni, da bo vsako črko na $i$-tem mestu v nizu spremenil v veliko,
če je enaka črki $i$ mest od konca besede (ki jo bo prav tako zamenjal z veliko).
Uporabnik bo seveda niz na začetku vnesel, program pa bo izpisal spremenjeni niz. Nekaj primerov:
Najprej bo besedo potrebno prebrati, nato pa jo pregledati črko po črko (pazi, da bo beseda res zapisana s samimi malimi crkami). Za pretvorbo male črke v veliko uporabi metodo Character.toUpperCase(char a), ki črko a spremeni v veliko (če je že velika, je ne spremeni). Primer uporabe:
char ca = 'a';
char cb = Character.toUpperCase(ca); //v spremenljivki cb je sedaj znak 'A'
Črka, v nizu lihe dolžine, ki je na sredini, je na dolzinaNiza/2-tem mestu.
Najprej bo besedo potrebno prebrati, nato pa jo pregledati črko po črko (pazi, da bo beseda res zapisana s samimi malimi crkami). Za pretvorbo male črke v veliko uporabi metodo Character.toUpperCase(char a), ki črko a spremeni v veliko (če je že velika, je ne spremeni). Primer uporabe:
char ca = 'a';
char cb = Char.ToUpper(ca); //v spremenljivki cb je sedaj znak 'A'
Črka, v nizu lihe dolžine, ki je na sredini, je na dolzinaNiza/2-tem mestu.
Nalogo lahko rešiš tako, da v zanki pregledaš niz z leve proti desni in primerjaš črke, ki ležijo v nizu na istem mestu od zadaj naprej (lahko pregledaš samo polovico niza). Sproti sestavljaš niza, ki ustrezata prvi oz. drugi polovici vhoda. Posebej pazi na sredinsko črko (različno za nize lihe oz. sode dolžine).
import javax.swing.JOptionPane;
public class KriceciPalindrom {
public static void main(String[] args) {
// vnesemo niz, za katerega zelimo vedeti, ali je palindrom
String niz = JOptionPane.showInputDialog("Vnesi niz: ");
int n = niz.length();
String prvaPolovica = "";
String drugaPolovica = "";
// najprej prepisemo niz, tako da so vse crke male
niz = niz.toLowerCase();
// pregledujemo niz - z leve proti desni in z desne proti levi
for (int i = 0; i < n / 2; ++i) {
// ce sta znaka enaka, ju spremenimo v velike
if (niz.charAt(i) == niz.charAt(n - i - 1)) {
prvaPolovica += Character.toUpperCase(niz.charAt(i));
drugaPolovica = Character.toUpperCase(niz.charAt(n - i - 1))
+ drugaPolovica;
}
// sicer prepisemo
else {
prvaPolovica += niz.charAt(i);
drugaPolovica = niz.charAt(n - i - 1) + drugaPolovica;
}
}
// prvo polovico smo ze spremenili
String rezultat = prvaPolovica;
// ce je bil niz lihe dolzine, sredinskega elementa se nismo zapisali
// nikamor
if (n % 2 == 1)
rezultat += Character.toUpperCase(niz.charAt(n / 2));
// dodamo se drugo polovico
rezultat += drugaPolovica;
// Izpis
JOptionPane.showMessageDialog(null, rezultat);
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace KriceciPalindrom {
class KriceciPalindrom {
static void Main(string[] args) {
// vnesemo niz, za katerega zelimo vedeti, ali je palindrom
Console.Write("Vnesi niz: ");
String niz = Console.ReadLine();
int n = niz.Length;
String prvaPolovica = "";
String drugaPolovica = "";
// najprej prepisemo niz, tako da so vse crke male
niz = niz.ToLower();
// pregledujemo niz - z leve proti desni in z desne proti levi
for (int i = 0; i < n / 2; ++i) {
// ce sta znaka enaka, ju spremenimo v velike
if (niz[i] == niz[n - i - 1]) {
prvaPolovica += Char.ToUpper(niz[i]);
drugaPolovica = Char.ToUpper(niz[n - i - 1])
+ drugaPolovica;
}
// sicer prepisemo
else {
prvaPolovica += niz[i];
drugaPolovica = niz[n - i - 1] + drugaPolovica;
}
}
// prvo polovico smo ze spremenili
String rezultat = prvaPolovica;
// ce je bil niz lihe dolzine, sredinskega elementa se nismo zapisali
// nikamor
if (n % 2 == 1)
rezultat += Char.ToUpper(niz[n / 2]);
// dodamo se drugo polovico
rezultat += drugaPolovica;
// Izpis
Console.WriteLine(rezultat);
Console.ReadKey();
}
}
}
#!C:/Python30/python
#-*-encoding: utf-8 -*-
# -*- coding: latin-1 -*-
'''
Created on 30.6.2009
@author: fajdigap
'''
# vnesemo niz, za katerega zelimo vedeti, ali je palindrom
niz = input("Vnesi niz: ")
n = len(niz)
print (n)
prvaPolovica = ""
drugaPolovica = ""
#najprej prepisemo niz, tako da so vse crke male
niz = niz.lower()
#pregledujemo niz - z leve proti desni in z desne proti levi
for i in range(0,int(n/ 2),1):
# ce sta znaka enaka, ju spremenimo v velike
if niz[i] == niz[n - i - 1 ]:
prvaPolovica =prvaPolovica + niz[i].upper()
drugaPolovica = niz[n-i-1].upper()+ drugaPolovica
# sicer prepisemo
else:
prvaPolovica = prvaPolovica+ niz[i]
drugaPolovica = niz[n - i - 1] + drugaPolovica
# prvo polovico smo ze spremenili
rezultat = prvaPolovica
#ce je bil niz lihe dolzine, sredinskega elementa se nismo zapisali
#nikamor
if (n % 2 == 1):
rezultat = rezultat + niz[int(n / 2)].upper()
#dodamo se drugo polovico
rezultat = rezultat + drugaPolovica
#Izpis
print (rezultat)