Тролль Опубликовано 29 января, 2008 Жалоба Поделиться Опубликовано 29 января, 2008 (изменено) Антохен: Ну хорошо, посчитали частоты появления букв в тексте. Пожалуйста: var a:array[char]of word; f:text; c:char; n:word; beginAssign(f,'test.txt');Reset(f); while not eof(f) do begin Read(f,c);inc(a[c]);inc(n) end;for c:=#32 to #255 do Write(c,':',a[c]:3,' '); WriteLn; ReadLnend. Программка считает и даже выводит частоты появления символов в любом тексте, содержащемся в файле test.txt (выводит она пары символ:частота_его_появления_в_тексте, для большей ясности распечатки вывод сделан только для неслужебных символов - начиная с пробела). Частоты получаются в массиве a, например, в a['x'] содержится количество букв x в тексте. При желании можно поделить все элементы массива на количество символов в тексте, которое у нас в накопилось в переменной n, получив относительные частоты появления букв. Точно то же самое можно сделать и со вторым файлом, и со сколькими угодно. Если есть желание, можем объединить частоты букв, которые нам хочется, например, в русскоязычном файле твердый знак с мягким. Можем объединить и строчные буквы с их прописными вариантами, просто просуммировав попарно соответствующие частоты. Всё можем. А зачем всё это, непонятно. Задание-то бессмысленное. Требуется посчитать количество всех символов в первом и во втором, и заменить второй на первый. И замененный вариант сохранить в другом файлеБессмыслица. Переименование файлов. Изменено 29 января, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Антохен Опубликовано 30 января, 2008 Жалоба Поделиться Опубликовано 30 января, 2008 Спасибо. Доведу программу до ума сам. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Charlie Rat Опубликовано 1 февраля, 2008 Жалоба Поделиться Опубликовано 1 февраля, 2008 Помогите! 1. Дан массив целых чисел. Воспользовавшись указателями, поменяйте местами элементы массива с четными и нечетными индексами (т.е. те элементы массива, которые стоят на четных местах, поменяйте с элементами, которые стоят на нечетных местах). 2. Даны два массива, упорядоченных по возростанию: А[n] и B[m]. Сформируйте массив C[n+m], состоящий из элементов массивов А и В, упорядоченный по возростанию. 3. Даны два массива : А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать: Элементы обоих массивов; Общие элементы двух массивов; Элементы массива A, которые не включаются в B; Элементы массива B, которые не включаются в A; Элементы массивов A и B, коотрые не являются общими дял них (то есть объединение результатов двух предыдущих вариантов). Надо решить с помощью указателей. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 2 февраля, 2008 Жалоба Поделиться Опубликовано 2 февраля, 2008 (изменено) Charlie Rat: Ну как, с башнями Ханоя справился? Простейшее решение, с выдачей только указаний, как перемещать кольца, такое: procedure Hanoi(n:byte; a,b,c:char); begin if n<>0 then begin Hanoi(n-1,a,c,b); write(a,'->',b,' '); Hanoi(n-1,c,b,a) end end;var n:byte; begin Write('N=');ReadLn(n); Hanoi(n,'A','C','B'); WriteLn; ReadLn end. Можно добавить в вывод информацию о высоте башен, тогда программа будет выглядеть так: var l:array[1..3]of byte; n:integer; procedure Out; begin WriteLn(l[1]:4,l[2]:4,l[3]:4) end;procedure Hanoi(n:byte; a,b,c:byte); begin if n<>0 then begin Hanoi(n-1,a,c,b); dec(l[a]);inc(l[b]); write(a,'->',b);Out; Hanoi(n-1,c,b,a) end end;begin Write('N=');ReadLn(n); l[1]:=n;l[2]:=0;l[3]:=0; Write(' ');Out; Hanoi(n,1,3,2); WriteLn; ReadLn end. Можно показывать и размещение колец на башнях после каждого шага, тогда програма будет выглядеть несколько сложнее: type t=array[byte]of byte;var l:array[1..3]of t; n:integer;const s:string='ABCDEFGHIJKLMNOPQRSTUVWXYZ'; d=ord(' ');procedure Out; var i:byte; begin write(' ',l[1,0]:3,l[2,0]:3,l[3,0]:3,' '); for i:=1 to 3 do write(string(l[i]),' ':20-l[i,0]); WriteLn end;procedure Hanoi(n:byte; a,b,c:byte); begin if n<>0 then begin Hanoi(n-1,a,c,b);inc(l[b,0]);l[b,l[b,0]]:=l[a,l[a,0]]; l[a,l[a,0]]:=d;dec(l[a,0]);write(a,'->',b);Out; Hanoi(n-1,c,b,a) end end;begin Write('N=');ReadLn(N); l[1]:=t(s);l[1,0]:=N;l[2,0]:=0;l[3,0]:=0; WriteLn(N:9,0:3,0:3,' ',string(l[1]),' ':20-l[1,0]); Hanoi(N,1,3,2); WriteLn;Readln end. А по поводу последнего задания - указатели тут как корове седло. Формально, конечно, можно ими воспользоваться, например, для первой задачи можно настрочить что-нибудь вроде type ta=array[1..99]of integer;var PA:^ta; A:ta; i,j,p,m:integer;beginPA:=@A; Write('m='); ReadLn(m);for i:=1 to m do begin Write('A[',i:2,']='); ReadLn(PA^[i]) end;for i:=1 to m div 2 do begin j:=2*i; p:=PA^[j-1];PA^[j-1]:=PA^[j];PA^[j]:=p end;for i:=1 to m do Write(PA^[i]:8); ReadLnend. Условие выполнено, мы решили задачу, используя указатели, но выглядит это как сложение чисел с обязательным использованием умножения. 2+3=2*1+3*1 - да, мы сложили числа и использовали умножение, но где смысл? :g: Изменено 2 февраля, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Хиросима Опубликовано 2 февраля, 2008 Жалоба Поделиться Опубликовано 2 февраля, 2008 Здравствуйте! Горю по информатике, не успеваю сделать все лабы! Прошу помощи в написании задачи на Паскале ( желательно с блок-схемой ). Буду весьма благодарен! А вот и само задания ( обведено красным ) и пример решения "подобного" задания... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 2 февраля, 2008 Жалоба Поделиться Опубликовано 2 февраля, 2008 (изменено) Хиросима: Если записывать условие не на спине скачущей лошади :g: , оно будет выглядеть так: Получить таблицу пар значений y=f(x) для -4<=x<=1 с шагом h=0,1 и распечатать эту таблицу. f(x)=arcctg(x), x<=-1 ; arcsin(x), -1<x<0 ; arccos(x), 0<=x<=1/2 ; log 2(45), 1/2<x function f(x:real):real;begin if x<=-1 then f:=pi/2-arctan(x)else if x<0 then f:=arctan(x/sqrt(1-sqr(x))) else if x<=0.5 then f:=pi/2-arctan(x/sqrt(1-sqr(x))) else f:=ln(45)/ln(2)end;var x,y:array[0..50]of real; xb,xe,h:real; i,n:integer;begin xb:=-4; xe:=1; h:=0.1; n:=round((xe-xb)/h); for i:=0 to n do begin x[i]:=xb+i*h; y[i]:=f(x[i]) end; for i:=0 to n do Write(x[i]:8:1,y[i]:8:3); WriteLn; ReadLnend. Насчет блок-схем читай в этом топике в этом посте. Изменено 2 февраля, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Dady Опубликовано 19 февраля, 2008 Жалоба Поделиться Опубликовано 19 февраля, 2008 Люди, срочно требуется помощь...До пятницы нужны две программы.... 1. программа, которая сможет записать три коэффициента a b с в файл, считать их и Решить квадратное уравнение.... 2. программа, которая считает кол-во символов в txt файле и выводит 10 наиболее встречающихся в порядке убывания (возрастания) От этого зависит очень многое для меня.... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 февраля, 2008 Жалоба Поделиться Опубликовано 20 февраля, 2008 Dady: var F:file of Real; a,b,c,d,x1,x2:Real; beginAssign(F,'FFF'); Rewrite(F);Write('a=');ReadLn(a); Write('b=');ReadLn(b); Write('c=');ReadLn©; Write(F,a,b,c); Close (F);Reset(F); Read(F,a,b,c);d:=sqr(b)-4*a*c;if d<0 then WriteLn('No real solution') else begin d:=sqrt(d); x1:=(-b+d)/(2*a); x2:=(-b-d)/(2*a); if abs(x1)>abs(x2) then x2:=c/a/x1 else x1:=c/a/x2; WriteLn('x1=',x1,' x2=',x2) end;ReadLnend. Примечание: оператор if(abs(x1)... служит для повышения точности вычисления корней type r=record c:char; n:word end;var f:text; a:array[byte]of r; t:r; c:char; s:string; i,j,n:word;beginWrite('Name of the file: '); ReadLn(s);for i:=0 to 255 do begin a[i].c:=chr(i); a[i].n:=0 end;Assign(f,s); Reset(f); n:=0;while not eof(f) do begin Read(f,c); inc(a[ord©].n); inc(n) end;for i:=0 to 9 do for j:=0 to 254-i do if a[j].n>a[j+1].n thenbegin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end;WriteLn('N=',n);for i:=255 downto 246 do WriteLn(a[i].c,' :',a[i].n:5);ReadLnend. Примечание: оператор for i:=0 to 9 ... - от нуля только до 9, так как достаточно отсортировать только десять значений Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Dady Опубликовано 20 февраля, 2008 Жалоба Поделиться Опубликовано 20 февраля, 2008 Тролль: огромное тебе спасибо!!! Ты меня очень спас!!!! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
pooint Опубликовано 28 февраля, 2008 Жалоба Поделиться Опубликовано 28 февраля, 2008 Здравствуйте!!! Учусь заочно, в семемтре 2-3 лекции читают, все остальное для самостоятельного изучения. Помогите пожалуйста решить несколько задач на Pascal. ;) 1. Создать файл и записать в него n первых членов последовательности Фибоначчи. Вывести на экран все компоненты файла с порядковым номером, не кратным 3. 2. Имеется два файла с числами. Получить новый файл, каждый элемент которого равен сумме соответствующих компонентов заданных файлов (количество компонентов в исходных файлах одинаковое). 3. Дан текстовый файл. Найти самую короткую строку и ее длину. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 28 февраля, 2008 Жалоба Поделиться Опубликовано 28 февраля, 2008 pooint: 1. var F:file of LongInt; b,c:LongInt; i,n:Integer;beginAssign(F,'MyFile'); Rewrite(F);Write('n(1..40)='); ReadLn(n); b:=0; c:=1;for i:=1 to n do begin Write(F,c); c:=b+c; b:=c-b end;Close(F); Reset(F); i:=0;while not eof(F) do begin Read(F,c); inc(i); if i mod 3 <>0 then Write(c:10) end;ReadLnend. 2. var F,G,H:file of Integer; a,b,c:Integer;beginAssign(F,'File1'); Assign(G,'File2'); Assign(H,'File3');Reset(F); Reset(G); Rewrite(H);while not eof(F) do begin Read(F,a); Read(G,b); c:=a+b; Write(H,c) end;end. 3. var F:text; s,c:string;beginAssign(F,'file.txt'); Reset(F); FillChar(s,255,' ');while not eof(F) do begin ReadLn(F,c); if length©<length(s) then s:=c end;WriteLn(length(s)); WriteLn(s); ReadLnend. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
pooint Опубликовано 29 февраля, 2008 Жалоба Поделиться Опубликовано 29 февраля, 2008 pooint: 1. var F:file of LongInt; b,c:LongInt; i,n:Integer;beginAssign(F,'MyFile'); Rewrite(F);Write('n(1..40)='); ReadLn(n); b:=0; c:=1;for i:=1 to n do begin Write(F,c); c:=b+c; b:=c-b end;Close(F); Reset(F); i:=0;while not eof(F) do begin Read(F,c); inc(i); if i mod 3 <>0 then Write(c:10) end;ReadLnend. 2. var F,G,H:file of Integer; a,b,c:Integer;beginAssign(F,'File1'); Assign(G,'File2'); Assign(H,'File3');Reset(F); Reset(G); Rewrite(H);while not eof(F) do begin Read(F,a); Read(G,b); c:=a+b; Write(H,c) end;end. 3. var F:text; s,c:string;beginAssign(F,'file.txt'); Reset(F); FillChar(s,255,' ');while not eof(F) do begin ReadLn(F,c); if length©<length(s) then s:=c end;WriteLn(length(s)); WriteLn(s); ReadLnend. БОЛЬШОЕ спасибо, Тролль вы очень мне помогли!!! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
pooint Опубликовано 29 февраля, 2008 Жалоба Поделиться Опубликовано 29 февраля, 2008 Уважаемый Тролль, помогите пожалуйста решить еще одну задачку в Pascal :) !!! -1, при а<0 Написать подпрограмму sign(a), которая вычисляет значение по следующей формуле: Sign(a)={ 0, при a=0 1, при a>0 Вычислить с помощью нее значение выражения Z:=sign(x)+sign(y)+sign(x+y). Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 29 февраля, 2008 Жалоба Поделиться Опубликовано 29 февраля, 2008 (изменено) pooint: function Sign(a:real):integer; begin Sign:=byte(a>0)-byte(a<0) end; var x,y,z:real; begin Write('X=');ReadLn(x); Write('Y=');ReadLn(y); z:=Sign(x)+Sign(y)+Sign(x+y); Writeln('Z=',z); ReadLn end. Другой вариант функции Sign (оба работают одинаково, второй более стандартное для начинающих длинное решение): function Sign(a:real):integer; begin if a=0 then Sign:=0 else if a>0 then Sign:=1 else Sign:=-1 end; Изменено 29 февраля, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Charlie Rat Опубликовано 9 марта, 2008 Жалоба Поделиться Опубликовано 9 марта, 2008 Помогите решить задачи на С: 1. Написать программу для хранения в битовом поле информации о конфигурации компьютера. Например: Корпус AT – 0, ATX – 1; Видео на борту – 0, карта – 1 и так далее. 2. Написать программу учета сдачи зачетов при помощи битовых полей. Структура содержит поля: фамилия, группа, зачеты (битовое поле). Предусмотреть вывод списков сдавших все зачеты и должников по группам и в алфавитном порядке. 3. Создать битовое поле для хранения времени (часы, минуты, секунды, миллисекунды). Написать функции для установки и получения времени в(из) битовое(-го) поле(-я). Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Fantom Опубликовано 9 марта, 2008 Жалоба Поделиться Опубликовано 9 марта, 2008 Программа вычесления квадратного корня из числа введенного с клавиатуры.Исключите вычесления из отрицательных чисел и нуля. С нулём всё понятно. А вот как поставить условие,чтоб исключить вычесления из отрицательных чисел не могу. Подскожите пожалуста. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 10 марта, 2008 Жалоба Поделиться Опубликовано 10 марта, 2008 Fantom: На Паскале? var a:real; begin Write('Введите число: '); ReadLn(a); if a>0 then WriteLn(sqrt(a):20:8); if a=0 then WriteLn('Корень есть, но запрещено вычислять'); if a<0 then WriteLn('Действительного корня нет');ReadLnend. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 10 марта, 2008 Жалоба Поделиться Опубликовано 10 марта, 2008 (изменено) Charlie Rat: Это все беллетристика, то есть придумывание и запись в операторах ввода и вывода вопросов и ответов, программировать тут практически нечего. Просто покажу как пример работы с битовыми полями решение первой задачи ("Написать программу для хранения в битовом поле информации о конфигурации компьютера"), выдумывая параметры конфигурации на ходу: # include <stdio.h> main() { struct {unsigned a:1,b:1,c:1;} s; printf("\npower unit: no ATI / ATI (0/1): "); s.a=getch()-48; printf("%u",s.a); printf("\nprosessor: Intel/AMD (0/1): "); s.b=getch()-48; printf("%u",s.b); printf("\nvideomemory: out/in (0/1): "); s.c=getch()-48; printf("%u",s.c); printf("\npower unit: %s",s.a?"ATI":"no ATI"); printf("\nprocessor: %s",s.b?"AMD":"Intel"); printf("\nvideomemory: %s",s.c?"in":"out"); getch(); } Изменено 10 марта, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aliner88 Опубликовано 12 марта, 2008 Жалоба Поделиться Опубликовано 12 марта, 2008 Уважаемый Тролль, помогите в решении задачки на си! 1. Описать структуру с именем NOTE, содержащую следующие поля: • NAME — фамилия, имя; • TELE — номер телефона; • BDAY — день рождения (массив из трех чисел). 2. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив BLOCKNOTE, состоящий из восьми элементов типа NOTE; записи должны быть упорядочены по трем первым цифрам номера телефона; • вывод на экран информации о человеке, чья фамилия введена с клавиатуры; • если такого нет, выдать на дисплей соответствующее сообщение. Заранее благодарен! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 12 марта, 2008 Жалоба Поделиться Опубликовано 12 марта, 2008 aliner88: #include <stdio.h> #include <string.h> main() { struct NOTE{char NAME[20],TELE[15];unsigned BDAY[3];}BLOCKNOTE[8],T; int i,j,k=0; char Name[20]; for(i=0;i<8;i++) { printf("\nName? "); gets(BLOCKNOTE.NAME); if(strlen(BLOCKNOTE.NAME)==0)break; printf("Phone number? "); gets(BLOCKNOTE.TELE); printf("Birthday (YYYY MM DD)? "); for(j=0;j<3;j++)scanf("%u",&BLOCKNOTE.BDAY[j]); gets(Name); k++; }; for(i=0;i<k;i++)for(j=0;j<k-i-1;j++) if(strncmp(BLOCKNOTE[j].TELE,BLOCKNOTE[j+1].TELE,3)>0) {T=BLOCKNOTE[j];BLOCKNOTE[j]=BLOCKNOTE[j+1];BLOCKNOTE[j+1]=T;} printf("\nName for the seach? "); gets(Name); j=0; for(i=0;i<k;i++)if(!strncmp(Name,BLOCKNOTE.NAME,strlen(Name))) { printf("\nName: %s \nPhone number: %s \nBirthday: %u %u %u\n\n", BLOCKNOTE.NAME, BLOCKNOTE.TELE, BLOCKNOTE.BDAY[0],BLOCKNOTE.BDAY[1],BLOCKNOTE.BDAY[2]);j=1; }; if(!j)printf("No such person!\n\n"); getch(); } Фамилия и имя вводятся в одной строке, разделяются пробелом (или как угодно). Ввод пустой фамилии человека (то есть нажатие сразу Enter) прекращает дальнейший запрос информации о людях и выводится запрос на фамилию людей, данные о которых нужно найти. Если есть несколько человек с такой фамилией, будут выведены данные обо всех в порядке сортировки по первым трем цифрам телефонного номера, как указано в задании. Если людей с заданной фамилией нет, будет выведено сообщение об этом. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Сифон Опубликовано 16 марта, 2008 Жалоба Поделиться Опубликовано 16 марта, 2008 Здрастье всем я хочу составить одну прогу на ТП а у меня не получается помогите пожалуйста! В общем так: В матрице К размером m*n найти в каждом столюце произведения отрицательных элементов и колличество нулевых элементов в матрице. :bye1: Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 16 марта, 2008 Жалоба Поделиться Опубликовано 16 марта, 2008 (изменено) Сифон: var k:array[1..20,1..20]of real; q:real; i,j,p,m,n:integer; b:boolean; beginWrite('m='); ReadLn(m); Write('n='); ReadLn(n);for i:=1 to m do for j:=1 to n do begin Write('k[',i,',',j,']='); ReadLn(k[i,j]) end;WriteLn('Results:'); p:=0;for i:=1 to m do begin q:=1; b:=false; for j:=1 to n do begin if k[i,j]=0 then p:=p+1; if k[i,j]<0 then begin b:=true; q:=q*k[i,j] end end; Write('product of the negative elements [',i,']='); if b then WriteLn(q:10:4) else WriteLn(' none'); end;WriteLn('number of zero-elements of the matrix=',p:4); ReadLnend. Изменено 16 марта, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Lukash Опубликовано 16 марта, 2008 Жалоба Поделиться Опубликовано 16 марта, 2008 (изменено) Обращаюсь к всем неравнодушным, помогите разобраться вот с такой програмкой, сам не розберусь. Написать программу на С/С++ которая для текстового файла делает его форматирование по ширине. Параметры форматирования должны задаватся консольно ( с клавиатуры ). Заранее благодарен. P.S. Есть програмка аналогичная, но написанная на Delphi ! Предупреждение:Во-первых, не надо создавать две одинаковые темы. Во-вторых, надо замечать "важные" темы, их не просто так наверх повесили. Вторую тему удалил, темы соединил, автору штраф за кросспостинг и игнорирование "важных" тем Изменено 16 марта, 2008 пользователем Ray Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
sakol18 Опубликовано 19 марта, 2008 Жалоба Поделиться Опубликовано 19 марта, 2008 Привет всем!!!! помогите пожалуйста.... программирование на турбо паскале было пол года назад! а сейчас снова началось, но ток теперь на С++. Задали курсовик на паскале, а я же ничего не помню.... :g: Скока в нете не искал, ничего подходящего не нашел... Тема такая: " составить программу обучения по переводу чисел из двоичной системы счисления в восьмеричную и шестнадцатиричную системы. программа должна предлагать двоичное чилсо, выбранное с помощью датчика случайных чисел,обучающийся должен назвать это число, а программа дать ответ о правильности ответа обучающегося или его ошибке, в случае ошибки вывести правильный ответ." Помогите, пожалуйста. очень надо!!!!!!!!!!!! P.S. в начале программы должны присутствовать элементы меню, типа : 1 разработчик, 2 помощь, 3 начать обучение, 4 о программе, 5 выход.... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 19 марта, 2008 Жалоба Поделиться Опубликовано 19 марта, 2008 sakol18: теперь на С++. Задали курсовик на паскалеСоберись с мыслями... На C++ или на Паскале? предлагать двоичное чилсо, выбранное с помощью датчика случайных чисел,обучающийся должен назвать это число, а программа дать ответ о правильности ответа Обучение чтению? :g: Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.