Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


Рекомендуемые сообщения

1)написать процедуру или функцию позволяющую найти самого молодого из студентов

Program Lab19_pr16;

Uses crt;

Type

Student=Record

Nume:String;

AnulS:integer;

Grupa:string;

Media:real;

Age:integer;

End;

FisierStud=File of Student;

Var

FS:FisierStud;

n:integer;

W:student;

s:string;

Med:real;

Key:1..4;

Procedure Creare(m:integer; c:string);

Var

i:integer;

Begin

Assign(FS, c);

Rewrite(FS);

For i:=1 to m do

Begin

Writeln('Dati datele Studentul ',i);

Writeln;

Write('Numele si Prenumele: ');

Readln(W.Nume);

Write('Anul de studiu: ');

Readln(W.AnulS);

Write('Grupa: ');

Readln(W.Grupa);

Write('Media: ');

Readln(W.Media);

Write('Age: ');

Readln(W.Age')

Writeln;

Write(FS, W);

End;

Close(FS);

End;

Procedure Afisare;

Begin

Reset(FS);

While not EOF(FS) do

Begin

Read(FS, W);

Writeln('Numele: ',W.Nume);

Writeln('Anul de Studiu: ',W.AnulS);

Writeln('Grupa: ',W.Grupa);

Writeln('Media: ',W.Media :5:2);

Writeln;

End;

Close(FS);

End;

Procedure MinAge

?????????????????

P.S.

Nume = имя

Age= возраст

Ссылка на комментарий
Поделиться на другие сайты

Radu:

написать процедуру или функцию позволяющую найти самого молодого из студентов
Procedure MinAge; var Age:integer;beginReset(FS);Age:=0; while not EOF(FS) do  begin Read(FS, W); if W.Age>Age then Age:=W.Age;  end;Close(FS); Reset(FS);while not EOF(FS) do begin Read(FS, W); if W.Age=Age then   begin	 Writeln('Numele: ',W.Nume); Writeln('Anul de Studiu: ',W.AnulS);	 Writeln('Grupa: ',W.Grupa); Writeln('Media: ',W.Media :5:2); 	 WriteLn('Age: ',W.Age:3); Writeln;  end; end;Close(FS);End;
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Привет троль.Выручай,нужно написать прогу с использованием рекурсии.

Задание:Вычислить сумму 12членов рукуррентной последовательности:

X0=1;X1=1;Xk=0.7Xk-1+1.1Xk-2;k=2,3...

Язык си.

Ссылка на комментарий
Поделиться на другие сайты

leksev:

Рекурсия - жутко неэкономичная штука. Но продемонстрировать ее применение несложно.

#include<stdio.h>float x(int k){return k<=1?1:0.7*x(k-1)+1.1*x(k-2);}float s(int k){return !k?0:s(k-1)+x(k-1);}main(){printf("%f",s(12));getchar();}

Тут функция x(k) рекурсивно вычисляет x с индексом k, а s(n) - рекурсивно вычисляет сумму n членов последовательности. С аргументом 12 будет вычислена сумма 12 членов (с 0-го по 11-й).

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Народ помогите плиз, немогу прогу заставить работать

uses crt;

type letters=set of char;

const o:letters=['ц','н','г','з','в','р','л','д','ж','ч','м','б'];

qq:array [1..12] of char=('ц','н','г','з','в','р','л','д','ж','ч','м','б');

R:letters=[',','.',';','?','!']; {знаки препинания}

var i,j,chet:byte;

s, ss: string;

o1,o2, temp: letters;

m: char;

begin

clrscr

chet:=1;

i:=1;

o1:=q;

o2:=[];

writeln ('******nachalo*******');

writeln ('введите строку') ;

readln(s);

if s=''then S:=' морковка горох капуста мозамбези крыша звезда';

repeat

while (s in R) and (i<length (S)) do begin

ss: ss+s ;

i:=i+1

end;

writeln (chet,'',ss);

temp:[];

for j:=1 to length (Ss) do

temp:=temp+[s[j]];

for j:=1 to 8 do begin

{первое условие}

if (chet=1) and (NOT (qq[j] in temp) then exclude (01,qq[j]);

{второе условие }

if (chet=0) and (NOT (qq[j] in temp) then 02:= 02+[qq[j]];

end;

cheat:=1-chet;

end;

until i>=length(s);

write ('входят в каждое нечётное слово:');

for m:=''to#255 do if m in 01 then write (m);

writeln;

write ('не входят хотя бы одно чётное слово:');

for m:=''to#255 do if m in 02 then write (m);

writeln;

repeat until key pressed;

end.

Ссылка на комментарий
Поделиться на другие сайты

leksev:

Рекурсия - жутко неэкономичная штука. Но продемонстрировать ее применение несложно.

#include<stdio.h>float x(int k){return k<=1?1:0.7*x(k-1)+1.1*x(k-2);}float s(int k){return !k?0:s(k-1)+x(k-1);}main(){printf("%f",s(12));getchar();}

Тут функция x(k) рекурсивно вычисляет x с индексом k, а s(n) - рекурсивно вычисляет сумму n членов последовательности. С аргументом 12 будет вычислена сумма 12 членов (с 0-го по 11-й).

А как ввод аргумента сделать произвольным.и что значит в функции s аргумент n,в програме вообще нет n.

Ссылка на комментарий
Поделиться на другие сайты

Students: Как я понял, любых сдвоенных символов? И, хм, а если символов три одинаковых подряд? Для простоты буду считать за пару символов каждое совпадение символа с предыдущим.

#include<stdio.h>main(){char s[255];int i,n=0;gets(s);for(i=1;s[i];i++)n+=s[i]==s[i-1];printf("%d\n",n);getchar();}

Не любых а указанных в здании. Именно "сс" "нн" "лл"

Как такое сделать ? :)

Ссылка на комментарий
Поделиться на другие сайты

Привет всем!вобщем задание звучит так..

На Си.

В заданном тексте перевернуть каждое слово.

попробовал написать:

#include "stdio.h"#include "conio.h"#include "string.h"#define M 100void PS(char str,int i,int k);main(){static char str[M];int i,k,N;puts("Введите предложение\n");gets(str);N=strlen(str);k=0; for(i=0;i<N;i++)  {if(str[i]=='_')  PS(*str,i,k);k=i+1;  }PS(*str,i,k);puts(str);getch();return 0;}void PS(char str,int i,int k){int j,n,p,z;static char temp[M];n=i-k; for(j=1;j<=n;j++) {  temp[1]=str[k];  for(z=1;z<n-j;z++){ str[k-1+z]=str[k+z]; str[i-j]=temp[1];	}return 0;  }return 0;}

неработает :) ошибок полно (

еще одно задание,тож на Си:

Слить две упорядоченные последовательности чисел в одну(Рекурсии).

Ссылка на комментарий
Поделиться на другие сайты

P.S. мал. ошибка :blush2:

Procedure MinAge;

var Age:integer;

begin

Reset(FS);

Age:=100;

while not EOF(FS) do

begin

Read(FS, W); if W.Age<Age then Age:=W.Age;

end;

Close(FS);

Reset(FS);

while not EOF(FS) do

begin

Read(FS, W);

if W.Age=Age then

begin

Writeln('Numele: ',W.Nume); Writeln('Anul de Studiu: ',W.AnulS);

Writeln('Grupa: ',W.Grupa); Writeln('Media: ',W.Media :5:2);

WriteLn('Age: ',W.Age:3); Writeln;

end;

end;

Close(FS);

End;

P.P.S. Еще просьба

1)написать процедуру или функцию позволяющую вывести на экран информацию о студентах имя которых начинается с буквы из указанного диапазона.

2)написать процедуру или функцию позволяющую удалить из списка данные человека имя которого вводится с клавиатуры.

Program Lab19_pr16;

Uses crt;

Type

Student=Record

Nume:String;

AnulS:integer;

Grupa:string;

Media:real;

Age:integer;

End;

FisierStud=File of Student;

Var

FS:FisierStud;

n:integer;

W:student;

s:string;

Med:real;

Key:1..4;

Procedure Creare(m:integer; c:string);

Var

i:integer;

Begin

Assign(FS, c);

Rewrite(FS);

For i:=1 to m do

Begin

Writeln('Dati datele Studentul ',i);

Writeln;

Write('Numele si Prenumele: ');

Readln(W.Nume);

Write('Anul de studiu: ');

Readln(W.AnulS);

Write('Grupa: ');

Readln(W.Grupa);

Write('Media: ');

Readln(W.Media);

Write('Age: ');

Readln(W.Age')

Writeln;

Write(FS, W);

End;

Close(FS);

End;

Procedure Afisare;

Begin

Reset(FS);

While not EOF(FS) do

Begin

Read(FS, W);

Writeln('Numele: ',W.Nume);

Writeln('Anul de Studiu: ',W.AnulS);

Writeln('Grupa: ',W.Grupa);

Writeln('Media: ',W.Media :5:2);

Writeln;

End;

Close(FS);

End;

Спасибо!

P.S.

Nume = имя

Ссылка на комментарий
Поделиться на другие сайты

leksev:

А как ввод аргумента сделать произвольным.и что значит в функции s аргумент n,в програме вообще нет n.
Должен же я был в описании для тебя, что делает функция, как-нибудь обозначить ее аргумент!

У тебя в условии указано суммировать 12 членов ряда, вот там в программе и стоит вместо n число 12. Если ты хочешь суммировать другое количество членов ряда, замени 12 в тексте программы на другое число или вводи его с клавиатуры.

При вводе количества суммируемых членов ряда с клавиатуры программа будет выглядеть так

#include<stdio.h>float x(int k){return k<=1?1:0.7*x(k-1)+1.1*x(k-2);}float s(int k){return !k?0:s(k-1)+x(k-1);}main(){int n;printf("n ? ");scanf("%d",&n);printf("%f",s(n));getchar();getchar();}

Students:

Не любых а указанных в здании. Именно "сс" "нн" "лл"

Как такое сделать ?

Слегка изменить программу. Если речь идет об опреленных парах то, скорее всего, и сочетание, например, "сссс" надо считать за две пары? Если не половина, то четверть дела в написании программы - понять, чего от нее хотят. Вот измененный текст для счета именно пар этих символов.
#include<stdio.h>main(){char s[255]; int i,n=0; gets(s);for(i=1;s[i]&s[i-1];i++)if(s[i]==s[i-1]&&(s[i]=='с'||s[i]=='н'||s[i]=='л')){n++;i++;}printf("%d\n",n);getchar();}

Random:

В заданном тексте перевернуть каждое слово.
Честно говоря, разобраться с чужой программой в десять раз труднее, чем написать свою - чем обычно эта затея и заканчивается. Поэтому не буду ставить вопросы - а это для чего? а это почему? а просто напишу свой вариант
#include<stdio.h>main(){char t[255];int j,i=0,k=0; printf("Enter the string: "); gets(t); do if(t[i]>='0')k++;else{if(k){for(j=i-1;j>=i-k;j--)putchar(t[j]);k=0;}putchar(t[i]);}while(t[i++]); getchar();}
Ссылка на комментарий
Поделиться на другие сайты

Radu:

Тролль: Please #861
Ты уж извини, по ночам я обычно сплю. Ты почти в одиннадцать ночи написал условие задачи, а в седьмом часу утра напоминаешь, что за ночь еще ничего не сделано :blink:. Да и бывает, что и днем другие дела находятся... ;)

Ну, вернемся к нашим баранам. Пишу только сами процедуры, как и раньше, не проверяя их в программе, так что полное отсутствие ошибок не гарантировано. Если что-то несущественное, надеюсь, сам справишься, нет - будем разбираться.

По первой процедуре пояснять почти нечего: просматриваем файл, если в текущей записи первая буква имени студента в интервале между заданными при вводе, печатаем все поля записи.

По второй процедуре: было два пути. Простейший - считывать все записи из файла и переписывать их в другой временный файл, за исключением той записи, которую надо удалить, а потом удалить исходный файл и временному файлу дать имя исходного. Более сложный, но красивее, который я и выбрал - работать непосредственно с исходным файлом. Читаем его и, найдя запись с нужным именем, если она последняя, просто сдвигаем указатель текущей позиции в файле на одну запись назад, а если нет, то начиная со следующей записи до конца файла танцуем так: читаем запись в переменную W, возвращаемся к шедшей до нее записи файла, записываем в нее значение W, переходим к записи, следующей после прочитанной, читаем ее в переменную W и далее сказка про белого бычка до конца файла (записи нумеруются с 0, поэтому последняя запись имеет номер на единицу меньше размера файла). Затем отрубаем хвост файла стандартной процедурой Trancate и закрываем файл.

Procedure Select;var C1,C2:char;beginWrite('letter 1 (from)? '); ReadLn(C1);Write('letter 2 (to)? '); ReadLn(C2);Reset(FS);while not EOF(FS) do begin Read(FS,W); if (W.Nume[1]>=C1)and(W.Nume[1]<=C2) thenbeginWriteln('Numele: ',W.Nume); Writeln('Anul de Studiu: ',W.AnulS);Writeln('Grupa: ',W.Grupa); Writeln('Media: ',W.Media :5:2);WriteLn('Age: ',W.Age:3); Writeln;end end;Close(FS);end;Procedure Delete;var i:integer; Nume:string;beginWrite('Nume to delete the student? '); ReadLn(Nume);Reset(FS); W.Nume:='';while (W.Nume<>Nume)and not EOF(FS) do Read(FS,W);if Nume<>W.Nume then WriteLn('no such nume!')else begin if EOF(FS) then Seek(FS,FilePos(FS)-1) else for i:=FilePos(FS) to FileSize(FS)-1 do begin Seek(FS,i); Read(FS,W); Seek(FS,i-1); Write(FS,W) end; Truncate(FS); end;Close(FS);end;

Подсказки в процедурах на английском, как это будет по-румынски, не знаю :g:.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль: спасибо

"Подсказки в процедурах на английском, как это будет по-румынски, не знаю" -да не вопрос , я исправлю .

Ссылка на комментарий
Поделиться на другие сайты

Тролль: все работает отлично

P.S. Еще одна задачка

С клавиатуры вводятся информация : имя человека( m человек), урок ( n уроков) и оценка на каждый урок.Написать програмку для Turbo Pascal которая считает сколько оценок 9 есть на несколко ( n уроков ) уроков у всех ( m человек ) . Можно в любом типе даных .

Ссылка на комментарий
Поделиться на другие сайты

Radu:

Глупое условие.

var n:integer; s:string;beginwriteln('Вводите что хотите через Enter, закончив вводом пустой строки');n:=0; repeat readln(s); if s='9' then inc(n) until s=''; writeln('9 вводилось ',n,' раз'); readlnend.

Каков вопрос - таков и ответ.

Ссылка на комментарий
Поделиться на другие сайты

Тролль: ине бы по сложнее если можно

1. Вводим количество человек и уроков

2. Вводим информацию про учеников имя, и оценки на каждый урок (нарпимер 1 человек,3 урока - вводим имя а потом урок1-оценка,урок2-оценка,урок3-оценка)

3.написать процедуру или функцию которая считает сколько оценок 9 есть.

Я вот как-то так представляю себе эту програмку.

Ссылка на комментарий
Поделиться на другие сайты

ине бы по сложнее если можно
Оригинально :D

Вообще-то, делая глупости, ограничивайся минимумом необходимого :D.

Почти вся вводимая информация не нужна для ответа.

var a,b:array[1..50]of string[20]; c:array[1..50,1..50]of byte; i,j,m,n,s:integer;begin write('сколько учеников? '); readln(m); write('сколько уроков? '); readln(n); writeln('имена учеников? '); for i:=1 to m do readln(a[i]);writeln('названия уроков? '); for j:=1 to n do readln(b[j]);writeln('оценки? '); for i:=1 to m do for j:=1 to n do  begin write(a[i],'':20-length(a[i]),b[j],'':20-length(b[j])); readln(c[i,j]) end;s:=0; for i:=1 to m do for j:=1 to n do if c[i,j]=9 then inc(s);writeln; writeln(s); readlnend.

Задача типа: на первой остановке в трамвай вошло 4 человека, на следующей остановке вышло 2 человека, на следующей остановке вошло еще 5 человек, сколько остановок проехал трамвай?

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

фуф...вернулся со своим калькулятором. дописал функции обработки много разрядных чисел и теперь осталась самая малость. Вычесление. Как оказалось, имеющийся алгоритм также работает только с одноразрядными числами.

Вот моя функция. В чем проблема? расчет с операциями '+' и '-' делает но непонятно каким образом. при сложении трех чисел с 3 разрядами - например 200+400+600 - результат - 1500. с 4 разрядами - вообще бред. С двумя все прекрасно. с * и / програма вообще выдает результаты совсем непонятного характера. Или еще примеры - записав строку вида "12-4" получаем результат -30. не пойму в чем проблема

До начала работы функции у програмы уже есть строка в ОПН - "123 123 + 123 + =", записана в AnsiString AfterCon. Вот собственно и надо наладить работу функции

void   TStr2PPN::calculate (){/* оголошення необхідних змінних для функції обрахування */float stack[256];char * buf=AfterCon.c_str();char  temp[10];int sp = 0,i=0,j=0,k=0;while(i<=AfterCon.Length()){ if (buf[i]>='0'&&buf[i]<='9') { while (buf[j]>='0'&&buf[j]<='9'){ temp[k]=*(buf+j); k++;j++; } *(stack+sp)=StrToFloat(temp); k=0;sp++;i++;}  else{switch(*(buf+i)){	case '\0':	break;	case ' ':	  j++;	break;	case '=':	Result=stack[--sp];	break;	case '+':	j++;   stack[sp-2] = stack[sp-2] + stack[sp-1];	   sp--;	   break;	case '-':	 j++;  stack[sp-2] = stack[sp-2] - stack[sp-1];	   sp--;	   break;	case '*':	 j++;  stack[sp-2] = stack[sp-2] * stack[sp-1];	   sp--;	   break;	case '/':	 j++;  stack[sp-2] = stack[sp-2] / stack[sp-1];	   sp--;	   break;	default:	   stack[sp++] = StrToFloat(buf);}} i++;}}
Ссылка на комментарий
Поделиться на другие сайты

С одноразрядными числами и операциями * и / решилось. просто дописал отдельній случай для одноразрядных чисел. И так - в диапазоне 0..99 - калькулятор работает прекрасно со всеми скобками и т д. - но вот дальше 99 - непонятные операции. Привожу дописаную функцию

void   TStr2PPN::calculate (){/* оголошення необхідних змінних для функції обрахування */float stack[256];char * buf=AfterCon.c_str();char  temp[10];int sp = 0,i=0,j=0,k=0;while(i<=AfterCon.Length()){ if (buf[i]>='0'&&buf[i]<='9') { if (buf[i+1]==' '){ stack[sp++]=StrToFloat(buf[i]); } else{ { } while (buf[j]>='0'&&buf[j]<='9'){ temp[k]=*(buf+j); k++;j++; temp[k+1]='\0'; } *(stack+sp)=StrToFloat(temp); k=0;  sp++;i++;}}  else{switch(*(buf+i)){	case '\0':	break;	case ' ':	  j++;	break;	case '=':	Result=stack[--sp];	break;	case '+':	j++;   stack[sp-2] = stack[sp-2] + stack[sp-1];	   sp--;	   break;	case '-':	 j++;  stack[sp-2] = stack[sp-2] - stack[sp-1];	   sp--;	   break;	case '*':	 j++;  stack[sp-2] = stack[sp-2] * stack[sp-1];	   sp--;	   break;	case '/':	 j++;  stack[sp-2] = stack[sp-2] / stack[sp-1];	   sp--;	   break;	default:	   stack[sp++] = StrToFloat(buf);}} i++;}}
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...