Programowanie w języku Pascal.
Witam. Mam do napisania program, stosunkowo prosty, jednak nie mam możliwości zrobienia go samemu, proszę więc o pomoc.
Treść zadania:
----------------------------------------------------------------------------------------
"Dana jest sekwencja jednej nici DNA. Utworzyć sekwencję dla drugiej nici. Pierwszą nić wpisujemy z klawiatury, druga nić ma być tworzona przez program."
----------------------------------------------------------------------------------------
Chodzi tu o to, że jak mamy wypisaną pierwszą nić np. taką:
ATGCGCTAGTTATTCG
to 2 nić ma wyglądać tak:
TACGCGATCAATAAGC
[W drugiej nici zamiast literki A ma być T (i na odwrót) a zamiast C ma być G (i również na odwrót)]
I to głównie wszystko. No i oczywiście w przypadku podania do pierwszej nici liter innych niż A,T,C,G program ma wywalać błąd o niepoprawnie podanej sekwencji DNA.
" Life is not a problem to be solved but a reality to be experienced! "
© Copyright 2013 - 2024 KUDO.TIPS - All rights reserved.
Pisane pod FPC 2.6.0 (!)
Pod innymi kompilatorami na 95% nie będzie działać! (skladnia for..in; C++'owskie operatory)
Link do kodu:
http://pastebin.com/e4g1KgcM
Kod:
Type TchangeArray = Array[0..3] of Record
cFrom, cTo: Char;
End;
Const validChars = ['A', 'T', 'C', 'G'];
changeArray: TchangeArray =
(
(cFrom: 'A'; cTo: 'T'),
(cFrom: 'T'; cTo: 'A'),
(cFrom: 'C'; cTo: 'G'),
(cFrom: 'G'; cTo: 'C')
);
Function change(S: String): String;
Function findChange(C: Char): Integer;
Var T: Integer;
Begin
Result := 0;
For T := Low(changeArray) To High(changeArray) Do
if (changeArray[T].cFrom = C) Then
Result := T;
End;
Var I, Ch: Integer;
Begin
Result := '';
For I := 1 To Length(S) Do
Begin
Ch := findChange(S[I]);
Result += changeArray[Ch].cTo;
End;
End;
Function isValid(S: String): Boolean;
Var C: Char;
Begin
Result := True;
For C in S Do
if not (C in validChars) Then
Result := False;
End;
Function loadDNA: String;
Begin
Repeat
Write('Wpisz sekwencje DNA: ');
Readln(Result);
Writeln;
Until (isValid(Result));
End;
Begin
Writeln('Sekwencja DNA po zmianie: '+change(loadDNA));
End.
var
s:string;
function nic(s:string):string;
var lg,i:integer;
begin
lg:=length(s);
for i:=1 to lg do
begin
if (s[i]='A') then s[i]:='T' else
if (s[i]='T') then s[i]:='A' else
if (s[i]='C') then s[i]:='G' else
if (s[i]='G') then s[i]:='C' else
begin
nic:='BLAD';
exit;
end;
end;
nic:=s;
end;
begin
readln(s);
writeln(nic(s));
end.
nie testowalem ani w turbo ani w fpc, ale wrzucilem na ideone: http://ideone.com/vuEVx i smiga ;)
swoją drogą na ideone jest wbudowany komplilator fpc 2.2.0, wiec pod fpc ruszy, sadze jednak ze pod Turbo Pascalem takze ;)
Gdy jest blad to zwraca wartosc "BLAD", wiec nie rozumiem w czym problem ;)